各种 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停滞电流供应内存中的数据便无法保持,因此每次电脑开机都须要把数据重新载入内存。
FLASH芯片先容——W25Q64W25Q64 (64M-bit(兆位)==>8MB(兆字节)),W25Q16(16M-bit==>2MB)和 W25Q32(32M-bit==>4MB)是为系统供应一个最小的空间、引脚 和功耗的存储器办理方案的串行 Flash 存储器。25Q 系列比普通的串行 Flash 存储器更灵巧,性能 更优胜。基于双倍/四倍的 SPI,它们能够可以立即完成供应数据给 RAM,包括存储声音、文本和数据。芯片支持的事情电压 2.7V 到 3.6V,正常事情时电流小于 5mA,掉电时低于 1uA。所有芯片供应 标准的封装。

内存空间分配:
W25Q64/16/32 由每页 256 字节组成。每页的 256 字节用一次页编程指令即可完成。每次可以擦 除 16 页(1 个扇区)、128 页(32KB 块)、256 页(64KB 块)和全片擦除。

W25Q64 的内存空间构造:一页 256 字节,4K(4096 字节)为一个扇区,16 个扇区为 1 块,容量 为 8M 字节,共有 128 个块,2048 个扇区。
W25Q16内存空间构造:容量2M字节,32个块,对应的扇区3216=512个扇区。
内存之间各种单位之间的关系:256字节=1页,16页=1扇区,16扇区=1块。
在我们操作flash地址时,格式一样平常为一个6位16进制数,换算成二进制数每位对应的含义分别对应了他的块地址(前两位),扇区地址(第三位),页地址(第四位)和业内地址(后两位)。详细关系如下:
干系寄存器:
对W25Q64芯片的操作,同样是由相应的掌握寄存器和状态寄存器完成的
总线忙标志位(BUSY)
BUSY位是一个只读位,在状态寄存器中的S0位。当W25Q64在实行“页编程”、“扇区擦除”、“块区擦除”、“芯片擦除”以及“写状态寄存器”指令时,该位被硬件自动置1。这时候,除了“读状态寄存器”指令外的所有操作指令将会被芯片忽略。当芯片实行完这些指令后,硬件会自动将该位清零,表示芯片器件可以吸收其他的指令。
写保护位(WEL)
WEL位是一个只读位,在状态寄存器的S1位。在实行完“写使能”指令后,该位会被硬件自动置1。当芯片掉电后和实行“写禁能”、“页编程”、“扇区擦除”、“块区擦除”以及“芯片擦除”指令都会进入“写保护状态”。
块区保护位(BP2、BP1、BP0)
BP2、BP1、BP0这3位为可读可写位,分别在状态寄存器的S4、S3以及S2位。这3个位默认状态为0,即块区处于未保护状态。可以利用“写状态寄存器”指令对这几个位进行置1来达到块区保护的目的。块区保护状态为:没有保护、部分保护和全部保护状态。
注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这3个位不可被变动。
底部和顶部块保护位(TB)
TB位是一个可读可写位,在状态寄存器的S5位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当TB = 0时,表示保护位从顶部开始,当TB = 1时,表示保护位从底部开始。
注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这个位不可被变动。
扇区/块保护(SEC)
SEC位为一个可读可写位,在状态寄存器的S6位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当SEC = 0时,表示每次保护的区域大小为4K;当SEC = 1时,表示每次保护的区域大小为8K。
状态寄存器保护位(SRP0、SRP1)
SRP0和SRP1这2位为可读可写位,分别在状态寄存器的S7和S8(状态寄存器2)位。这两个位的默认值为0,可以利用“写状态寄存器”指令对这个位进行置1或清零。这2个位和读写保护管脚(/WP)决定了状态寄存器写保护的办法。状态寄存器写保护的办法有:软件保护,硬件保护、电源锁定或一次性可编程(OTP)保护。
快速SPI通讯使能(QE)
QE位为一个可读可写位,在状态寄存器的S9(状态寄存器2)位,默认值为0。以利用“写状态寄存器”指令对这个位进行置1或清零。当QE = 0时,W25Q54设置为标准速率模式或快速模式,保持管脚(/HOLE)和读写保护管脚(/WP)启用;当QE = 1时,W25Q54设置为高速模式,保存管脚(/HOLE)和读写保护管脚(/WP)被设置为IO2和IO3功能利用。
详细操作步骤干系指令表:
事情时序图
1,写使能
Write Enable指令将状态寄存器中的Write Enable Latch (WEL)位设置为1,在每个页面程序,扇区擦除,块擦除,芯片擦除和写状态寄存器指令实行前,都须要设置写使能为1。写使能指令先将CS引脚拉低,发送指令代码“06h”进入数据输入(DI)引脚上,在CLK的上升沿进行采集,然后将CS引脚拉高。
2,写失落能
Write Disable指令操作顺序和使能一样,只不过是将发送的指令改为“04h”
3,读状态寄存器指令
当/CS 拉低之后,开始把 05h 从 DI0 引脚送到芯片,在CLK 的上升沿数据被芯片采集,当芯片认出采集到的数据时 05h 时,芯片就会把“状态奇存器〞的值从 DO引脚输出,数据在CLK 的低落沿输出,高位在前。“读状态奇存器”指令在任何时候都可以用,乃至在编程、擦除和写状态奇存器的过程中也可以用,这样,就可以从状态奇存器的 BUSY 位判断编程、擦除和写状态奇存器周期有没有结束,从而让我们知道芯片是否可以吸收下一条指令了。如果/CS 不被拉高,状态寄存器的值将一贯从 DO 引脚输出。/CS 拉高之后,读指令结束。
4,写状态寄存器
在实行“写状态寄存器”指令之前,须要先实行“写使能”指令。先拉低/CS引脚,然后把01h从DIO引脚送到芯片,然后再把你想要设置的状态寄存器值通过DIO引脚送到芯片,拉高/CS引脚,指令结束,如果此时没有把/CS引脚拉高,或者是拉的晚了,值将不会被写入,指令无效。
只有“状态寄存器”当中的“SRP, TB、BP2,BP1、BPO位”可以被写入,其它“只读位"值不会变。在该指令实行的过程中,状态寄存器中的BUSY位为1,这时候可以用“读状态寄存器”指令读出状态寄存器的值判断,当指令实行完毕, BUSY位将自动变为0,WEL位也自动变为0
通过对“TB” “BP2”“BP1” “BPO”位写1,就可以实现将芯片的部分或全部存储区域设置为只读。通过对“SRP位”写1,再把/P引脚拉低,就可以实现禁止写入状态寄存器的功能。
5,读取数据
“读数据”指令许可读出一个字节或一个以上的字节被读出。先把/CS引脚拉低,然后把03h通过DIO引脚送到芯片,之后再送入24位的地址,这些数据在CLK的上升沿被芯片采集。芯片吸收完24位地址之后,就会把相应地址的数据在CIK引脚的低落沿从DO引脚送出去,高位在前。当读完这个地址的数据之后,地址自动增加,然后通过DO引脚把下一个地址的数据送出去,形成一个数据流。也便是说,只要时钟在事情,通过一条读指令,就可以把全体芯片存储区的数据读出来。把/cS引脚拉高, “读数据”指令结束。当芯片在实行编程、擦除和读状态寄存器指令的周期内, “读数据”指令不起浸染。
6,按页写入数据
实行“页编程”指令之前,须要先实行“写使能”指令,而且哀求待写入的区域都为1,也便是须要先把待写入的区域擦除。先把/CS引脚拉低,然后把代码02h通过DIO引脚送到芯片,然后再把24位地址送到芯片,然后接着送要写的字节到芯片。在写完数据之后,把/CS引脚拉高。
写完一页(256个字节)之后,必须把地址改为0,不然的话,如果时钟还在连续,地址将自动变为页的开始地址。在某些时候,须要写入的字节不敷256个字节的话,其它写入的字节都是无意义的。如果写入的字节大于了256个字节,多余的字节将会加上无用的字节覆盖刚刚写入的的256个字节。以是须要担保写入的字节小于即是256个字节。
在指令实行过程中,用“读状态寄存器”可以创造BUSY位为1,当指令实行完毕, BUSY位自动变为0。如果须要写入的地址处于“写保护”状态, “页编程”指令无效。
7,获取设备信息
出于兼容性缘故原由,W25Q64BV供应了几个指令以电子办法确定设备的身份。Read JEDEC ID指令与用于SPI的JEDEC标准兼容兼容串行存储器在2003年被采取。指令通过驱动/CS引脚启动降落并移动指令代码“9Fh”。JEDEC分配给Winbond (EFh)的制造商ID字节然后将两个设备ID字节,内存类型(ID15-ID8)和容量(ID7-ID0)移出以最有效位(MSB)为首的CLK低落沿,如图29所示。用于存储类型和
容量值拜会厂商和设备标识表。
STM32模块编程思路配置SPI模块功能管脚相应的GPIO管脚。配置SPI模块事情办法。使能SPI模块时钟。根据SPI SPI主模式设置步骤设置SPI事情办法。编写SPI读写字节函数。根据目前器件的指令操作器件。








