AT45DB161B存储器读/写子程序
2017-10-24 14:32:50
DataFlash系列存储器可以按地址从低到高顺序读写,也可以随机读写任一字节的数据。对于顺序读数据,可以使用连续读主存页阵列命令(操作码68H或E8H)从给定的起始地址开始连续读出,中间不需用户干预,也可使用读单页主存命令(操作码52H或D2H),自行提供页地址读取数据。对于顺序写数据,可以使用通过缓存写主存页命令(操作码82H或85H),直接将数据写入主存;也可以先使用写缓存命令(操作码84H或87H),将数据写入缓存,在适当的时刻再使用缓存写主存页命令(操作码83H或86H),将缓存中的数据写入主存。
使用何种方式读写取决于特定的应用场合与要求。 下面的子程序为顺序读/写存储器的例子。子程序spiwt采用了通过缓存写主存页的方法,向存储器写入1字节数据。顺序读存储器子程序spicrd采用了边疆读主存页阵列命令。从给定地址处连续读出数据,用图5所示的PIC16LC73B单片机汇编语言编写,使用MPLAB5.4.00编译器编译通过并烧写入单片机,按下图所示系统实测通过。
顺序写子程序,用spiwt名称调用
spiwt bcf STATUS,RP0
bcf PORTB,SCK ;模式0
bcf PORTB,cs ;片选
movlw 82H ;加载操作码
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出操作码
movf PA1,w ;加载第一字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf BA1,w
xorwf PA2,w ;获得第二字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf BA2,w ;加载第三字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf spi_wt,w ;加载待写数据
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
bsf PORTB,cs ;触发写入操作
nop ;延时
retlw 0 ;从子程序返回
;输出子程序,用spiout名称调用
spiout movlw 0x08 ;加载输出位数
movwf spi_cnt ;置入寄存器
nspiout rlf spi_out ;先输出最高位
btfsc STATUS,C ;是否为1
bsf PORTB,SDO ;输出1
btfss STATUS,C ;是否为0
bcf PORTB,SDO ;输出0
nop ;延时
bsf PORTB,SCK ;时钟信号上升沿
nop ;延时
bcf PORTB,SCK ;时钟信号下降沿
decfsz spi_cnt ;检查输出位数
goto nspiout ;输出下一位
retlw 0 ;从子程序返回
;顺序读子程序,用名称spicrd调用
spicrd bcf STATUS,RP0
bcf PORTB,cs ;片选
bcf PORTB,SCK ;模式0
movlw E8H ;加载操作码
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf PA1,w ;加载第一字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf BA1,w
xorwf PA2,w ;获得第二字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf BA2,w ;加载第三字节地址
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf DCRE,w ;加载任意位字节
movwf spi_out ;置入寄存器
call spiout ;调用子程序输出
movf DCRE,w ;共需4个任意位字节
movwf spi_out
call spiout
movf DCRE,w
movwf spi_out
call spiout
movf DCRE,w
movwf spi_out
call spiout
retlw 0 ;从子程序返回
本文关键词:
DataFlash
相关文章:
DataFlash存储器命令接口与状态机
深圳市英尚微电子有限公司,十年来专业致力代理分销存储器芯片IC, SRAM、MRAM、pSRAM、 FLASH芯片、SDRAM(DDR1/DDR2/DDR3)等,为客人提供性价比更高的产品及方案。
了解更多关于存储芯片知识,请关注英尚微电子:https://www.sramsun.com