本文仅考虑标准SPI,同时仅仅写了比较常用的指令,有错误欢迎评论区指出。
存储大小 32768个页 每页256byte 一次能写入256个字节 擦除可以分为16页擦除(扇区擦出4kb)或者128或256页擦除,也可以整片擦除 包含2048个可擦除扇区,和128个可擦除块。(一个块里面16个扇区) 支持SPI模式80MHZ (stm32f103spi最大是36MHZ)
引脚:
/CS CS高电平的时候其他引脚成高阻态,处于低电平的时候,可以读写数据
DI 标准SPI使用单向的DI,来串行的写入指令,地址,或者数据到FLASH中,在时钟的上升沿。
DO 标准SPI使用单向的DO,来从处于下降边沿时钟的设备,读取数据或者状态
/WP 防止状态寄存器被写入
/HOLD 当它有效时允许设备暂停,低电平:DO引脚高阻态,DI CLK引脚的信号被忽略。
高电平:设备重新开始, 当多个设备共享相同的SPI信 号的时候该功能可能会被用到
CLK 从外部获取时间,为输入输出功能提供时钟
SPI操作(标准SPI说明)
芯片允许通过由四个信号组成的总线进行访问,在CLK的上升沿,标准SPI使用DI输入引脚来串行向芯片写入指令,地址或者数据。在CLK的下降沿。DO引脚被使用从芯片中读取数据或者状态,
芯片支持SPI工作模式0和3,
/HOLD功能
当它处于低电平的时候,允许芯片被暂停。比如当SPI总线被使用的时候正在传输数据,,可以先把数据存到缓存区,等到总线用完再继续传输数据。
状态寄存器:
BUSY寄存器是状态寄存器(S0)的只读位,当设备执行页面操作,扇区擦除,块擦除,或者整片擦除,或者是读状态寄存器操作的时候置1.这个为1期间设备将会忽视进一步的指令,除了读寄存器,和擦除暂停指令。当上面的操作完成的时候,BUSY寄存器将被置0.可以接收进一步的指令。
指令
包含27条被SPI总线完全控制的指令。指令以/CS的下降沿开始,上升沿结束。DI输入的第一个字节提供指令代码。数据在上升沿被采样。(MSB高位先行)(我觉得这就是它只支持SPI工作模式0和3的原因)
1.写使能指令06h
写使能指令把状态寄存器中的写使能锁存器置1,必须在页程序操作,扇区擦除,快擦除,整个擦除之前把它置一。使用流程:先拉低CS再写入指令,然后拉高。可以利用主机stm32来判断是否传输完指令。
2.读状态寄存器1指令 05h(因为S0在这上面,就看他就行)
读状态寄存器可以随时使用,在执行擦除命令的时候也可以。因此可以用它检测擦除是否完成。

stm32读取数据和发送数据是双向的因此,可以检测接收缓冲区为非空来读取数据
3.读数据指令03h
/CS引脚拉低开始,DI发送03h,接着发送地址(24位),然后芯片自动由DO发送出去数据(MSB)。一个指令可以一直发送数据,直到/CS被拉高。如果当BUSY=1的时候,发送指令,则指令会被忽略。
4.页写入 02h
页写入指令允许在已经擦除的的存储器位置写入1到256个字节。执行页写入之前先要执行写使能指令。先将/CS引脚拉为低电平,然后通过DI引脚输入02h,接着跟着24位地址,和至少1个字节数据。期间/CS引脚一直保持低电平。页写入期间BUSY置1.页写入完成后,写使能位被置0
5.扇区擦除 20h
擦除前必须先写使能。/CS低电平开始,发送20h然后发送24位地址。擦除期间BUSY=1,擦除后写使能置0。
6.读JEDEC ID 9Fh
可以检测FLASH是否是好使的。/CS低电平开始发送9fh,然后接收到3个字节的数据。/CS拉高结束。
写入操作:首先:写使能,然后擦除,并检测BUSY是否置1,不为1则页写入。
读数据操作:首先检测BUSY是否置1,不为1则发送读命令。
打了半天字,给个赞呗

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/161981.html