I am providing this as a working example of accessing the Microchip 23K256 SRAM chip using a 28X2 Picaxe chip.
This chip has 32768 x 8bit Bytes available.
I had to slow down the SPI but that might be due to the wiring using long leads etc.
This chip has 32768 x 8bit Bytes available.
I had to slow down the SPI but that might be due to the wiring using long leads etc.
Code:
'Written 26-JUL-2012 to 28X2
'Written/Modified by Simmicht
'This program reads and writes to the Microchip 23K256 256K SPI Bus Low-Power Serial SRAM
'
' Electrical Connections
' PIXAXE28X2 23K256
' Pin 13 PinC.2 CS -> Pin 1 Chip Select BAR
' Pin 15 PinC.4 SDI -> Pin 2 SO
' Pin 3 NC
' Pin 4 GND
' Pin 16 PinC.5 SDO -> Pin 5 SI
' Pin 14 PinC.3 SCK -> Pin 6 SCK
' Pin 7 HOLD_BAR
' Pin 8 3V3
'
#REM
###############################
# #
# MAIN INITILISATION BLOCK#
# #
###############################
#endrem
#SLOT 0
' Written 26-JUL-2012 - PicAxe 28X2
' By Simmicht
#picaxe 28X2
'#terminal 38400 '8MHz resonator
#terminal 19200
'#terminal 9600
#no_data
#no_table
SYMBOL StdFreq = EM16 'Has 4MHz Xtal installed
'SYMBOL StdFreq = m8 'Has 4MHz Xtal installed
setfreq StdFreq
'SetTimer t1s_16
#rem 'For 32MHz
SYMBOL TwoSecond = 8000
SYMBOL OneSecond = 4000
SYMBOL Point5Second = 2000
SYMBOL Point3Second = 1200
SYMBOL Point1Second = 400
#endrem
'For 16MHz
SYMBOL TwoSecond = 4000
SYMBOL OneSecond = 2000
SYMBOL Point5Second = 1000
SYMBOL Point3Second = 600
SYMBOL Point1Second = 200
SYMBOL I = W2
'instruction set for 23K256 memory chip
SYMBOL _23K_READ = %00000011
SYMBOL _23K_WRITE = %00000010
SYMBOL _23K_RDSR = %00000101
SYMBOL _23K_WDSR = %00000001
SYMBOL _23K_BYTEMODE = %00000000
SYMBOL _23K_PAGEMODE = %10000000
SYMBOL _23K_SEQMODE = %01000000
SYMBOL _23K_CS = C.2
SYMBOL _23K_StatusReg = B54'W27
SYMBOL _23K_Byte = B55'W27
SYMBOL _23K_AddressReg = W26
SYMBOL _23K_AddressRegL = B52'W26
SYMBOL _23K_AddressRegH = B53'W26
HIGH _23K_CS 'disable 23K256
hspisetup spimode00, spislow ; spi mode
'set sequential mode
gosub ReadMode_23K
Sertxd("Status register is ",#_23K_Byte,cr,lf)
'_23K_Byte= _23K_SEQMODE
'gosub WriteMode_23K
_23K_Byte= _23K_PAGEMODE
gosub WriteMode_23K
gosub ReadMode_23K
Sertxd(" MODE is ",#_23K_Byte," - ")
IF _23K_Byte=%01000000 THEN
Sertxd("Sequential")
ELSEIF _23K_Byte=%10000000 THEN
Sertxd("32 Byte Page mode")
ELSE
Sertxd("Byte mode")
ENDIF
Sertxd(cr,lf)
FOR I = 0 to 100
_23K_Byte=I
_23K_AddressReg=I 'Word address of byte to read/write
GOSUB Write23K
NEXT
do
FOR I = 0 to 100
_23K_AddressReg=I 'Word address of byte to read/write
GOSUB Read23K
Sertxd("Read@",#I," = ",#_23K_Byte,cr,lf)
NEXT
_23K_AddressReg=0 'Word address of byte to read/write
gosub ReadBlock23K 'now rea out 100 bytes sequentially
END
for I = 1 to 2
pause 2000
next
loop
END
'===========================================================================
ReadBlock23K:
setfreq M8
LOW _23K_CS 'ENABLE 23K256
HSPIOUT(_23K_READ ) 'READ FROM ADDRESS
HSPIOUT(_23K_AddressRegH) 'READ FROM ADDRESS
HSPIOUT(_23K_AddressRegL) 'READ FROM ADDRESS
FOR I = 0 to 100
HSPIIN (_23K_Byte)
setfreq StdFreq
sertxd(#I,":",#_23K_Byte,",")
setfreq M8
NEXT
HIGH _23K_CS 'disable 23K256
setfreq StdFreq
RETURN
'===========================================================================
ReadMode_23K:
setfreq M8
LOW _23K_CS 'ENABLE 23K256
HSPIOUT(_23K_RDSR ) 'Read setup Mode call
HSPIIN (_23K_Byte)
HIGH _23K_CS 'disable 23K256
setfreq StdFreq
RETURN
'===========================================================================
WriteMode_23K:
setfreq M8
LOW _23K_CS 'ENABLE 23K256
HSPIOUT(_23K_WDSR ) 'write setup Mode call
HSPIOUT(_23K_Byte)
HIGH _23K_CS 'disable 23K256
setfreq StdFreq
RETURN
'===========================================================================
Read23K:
setfreq M8
LOW _23K_CS 'ENABLE 23K256
HSPIOUT(_23K_READ ) 'READ
HSPIOUT(_23K_AddressRegH) 'READ FROM ADDRESS
HSPIOUT(_23K_AddressRegL) 'READ FROM ADDRESS
HSPIIN (_23K_Byte)
HIGH _23K_CS 'disable 23K256
setfreq StdFreq
RETURN
'===========================================================================
Write23K:
setfreq M8
'Sertxd("H=",#_23K_AddressRegH," L=",#_23K_AddressRegL,cr,lf)
LOW _23K_CS 'ENABLE 23K256
HSPIOUT(_23K_WRITE ) 'WRITE
HSPIOUT(_23K_AddressRegH) 'READ FROM ADDRESS
HSPIOUT(_23K_AddressRegL) 'READ FROM ADDRESS
HSPIOUT(_23K_Byte ) 'WRITE TO ADDRESS
HIGH _23K_CS 'disable 23K256
setfreq StdFreq
RETURN
Last edited: