Extreme64 and PS2 kb & Mouse


Author Message
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 6603
Posted: 02:45am 09 Sep 2019      

I have been playing with the W25Q16JV which comes on the STM32F4 board.
The data sheet is similar to the W25Q64FV.

This is the circuit for the flash chip:



Note the 3.3Vsupply and also the WP and HOLD pins tied to 3.3V

The chips supplied on my boards are of the variety that default to QUAD ENABLE being set!



The speed I am using to talk to the chips is:
SPI OPEN 1000000,0,8


I haven't done anything more than read the serial number and status registers etc but will try saving and retrieving data next.
As it is not a MX chip, I can't use Peters CFunctions but the exercise has been good for the grey matter.

  Quote  'armite F4 Flash test
OPTION BASE 1
DIM AS INTEGER F_CS = 35
DIM AS INTEGER x
SETPIN F_CS, DOUT

x = WB.ID%()
PRINT "Device ID = ";HEX$(x)
x = WB.JEDECID%()
PRINT "JEDEC  ID = ";HEX$(x)

x = WB.SERIAL%()
PRINT "Serial No = ";HEX$(x)

PRINT
x = WB.Write_Disable()
PRINT "Status registers:"
FOR n = 1 TO 3
x = WB.READSTATUS(n)
PRINT STR$(n);"  ";BIN$(x,8)
NEXT n
PRINT
x = WB.Write_Enable()
FOR n = 1 TO 3
x = WB.READSTATUS(n)
PRINT STR$(n);"  ";BIN$(x,8)
NEXT n

FUNCTION WB.Write_Enable()
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 1, &H06
 
PIN(F_CS)=1
 
SPI CLOSE
END FUNCTION

FUNCTION WB.Write_Disable()
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 1, &H04
 
PIN(F_CS)=1
 
SPI CLOSE
END FUNCTION

FUNCTION WB.READSTATUS(reg)
 
LOCAL adr
 
SELECT CASE reg
 
CASE 1 : adr = &H05
 
CASE 2 : adr = &H35
 
CASE 3 : adr = &H15
 
END SELECT
 
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 1, adr
 WB.READSTATUS=
SPI(0)
 
PIN(F_CS)=1
 
SPI CLOSE
END FUNCTION

FUNCTION WB.ID%()
'W25Q64FV &HEF16
'W25Q16JV &HEF14
LOCAL AS INTEGER mybyte(5)
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 1, &H90
 
SPI READ 5, mybyte()
 
PIN(F_CS)=1
 
SPI CLOSE
 WB.ID%=mybyte(
4)*256+mybyte(5)
END FUNCTION

FUNCTION WB.JEDECID%()
'W25Q64FV &HEF4017
'W25Q16JV &HEF4015
LOCAL AS INTEGER mybyte(3)
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 1, &H9F
 
SPI READ 3, mybyte()
 
PIN(F_CS)=1
 
SPI CLOSE
 WB.JEDECID%=mybyte(
1)*256*256+mybyte(2)*256+mybyte(3)
END FUNCTION

FUNCTION WB.SERIAL%()
LOCAL AS INTEGER mybyte(8)
LOCAL AS FLOAT n
 
SPI OPEN 1000000,0,8
 
PIN(F_CS)=0
 
SPI WRITE 5, &H4B,0,0,0,0
 
SPI READ 8, mybyte()
 
PIN(F_CS)=1
 
SPI CLOSE

 WB.SERIAL%=mybyte(
1)
 
FOR n = 2 TO 8
 WB.SERIAL%=WB.SERIAL%*
256+mybyte(n)
 
NEXT n
END FUNCTION


> RUN
Device ID = EF14
JEDEC  ID = EF4015
Serial No = E66840D843431B36

Status registers:
1  00000000
2  00000010
3  01100000

1  00000010
2  00000010
3  01100000
>


I think you will be safe with 3.3V

Jim
VK7JH
MMedit