首页 » 互联网 » STM32进修笔记——SpiFlash_存放器_指令

STM32进修笔记——SpiFlash_存放器_指令

乖囧猫 2024-10-18 01:40:26 0

扫一扫用手机浏览

文章目录 [+]

各种 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停滞电流供应内存中的数据便无法保持,因此每次电脑开机都须要把数据重新载入内存。

FLASH芯片先容——W25Q64

W25Q64 (64M-bit(兆位)==>8MB(兆字节)),W25Q16(16M-bit==>2MB)和 W25Q32(32M-bit==>4MB)是为系统供应一个最小的空间、引脚 和功耗的存储器办理方案的串行 Flash 存储器。
25Q 系列比普通的串行 Flash 存储器更灵巧,性能 更优胜。
基于双倍/四倍的 SPI,它们能够可以立即完成供应数据给 RAM,包括存储声音、文本和数据。
芯片支持的事情电压 2.7V 到 3.6V,正常事情时电流小于 5mA,掉电时低于 1uA。
所有芯片供应 标准的封装。

STM32进修笔记——SpiFlash_存放器_指令 STM32进修笔记——SpiFlash_存放器_指令 互联网

W25Q64事理框图:

内存空间分配:

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

STM32进修笔记——SpiFlash_存放器_指令 STM32进修笔记——SpiFlash_存放器_指令 互联网
(图片来自网络侵删)

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读写字节函数。
根据目前器件的指令操作器件。

相关文章

R语言在数据处理与文件读取中的应用讨论

随着大数据时代的到来,数据已成为企业、科研等领域的重要资产。R语言作为一种强大的统计软件,以其丰富的功能、简洁的语法和高度的可扩展...

互联网 2025-01-05 阅读0 评论0