本文以常见的4M Flash W25Q32为例。
1、Flash存储容量
容量可以从芯片的名称上看出来,虽然不同厂家的命名方式不一样,但是大体类似,比如W25Q80, W25Q16, W25Q32等。
W25Q80: 8M-bit / 1M -byte (1,048,576)W25Q16: 16M-bit / 2M-byte (2,097,152)W25Q32: 32M-bit / 4M-byte (4,194,304)
2、存储单位
Page(页)
:256字节,编程最小单位,一次最多编程256字节。
Sector(扇区)
:擦除的最小单位,一个Sector一般包含16个Page,即4KB。
Block(块)
:包含16个Sector,块擦除可以32KB(半块)、64KB(整块)两种擦除方式。
2、封装和管脚
封装类型有SOIC-8、WSON-8等。注意不一定封装越小越贵,要看哪一款用量大,用量大产量就大,产量大价格相对就便宜。元器件选型时要注意。
管脚序号 (SOIC-8为例) |
定义 |
|
1 |
/CS |
选通信号 |
2 |
DO(IO1) |
数据输出或者IO1 |
3 |
/WP(IO2) |
写保护或者IO2 |
4 |
GND |
地 |
5 |
DI(IO0) |
输入输入(IO0) |
6 |
CLK |
时钟 |
7 |
/HOLD(IO3) |
保持或者IO3 |
8 |
VCC |
电源 |
3、通讯方式
W25Q32支持标准的SPI、
Dual SPI,Quad SPI
标准SPI
:DI和DO都是单向的,即一进一出。
Dual SPI
:DI和DO是双向的,即IO0和IO1。
Quad SPI
:DI、DO、/WP、/HOLD变为IO0、IO1、IO2、IO3。
标准SPI比较常见,Dual SPI和Quad SPI用得不多,他们通讯数据线多一些,速度更快。有些单片机没有内部Flash或者内部Flash较少,但是带有QSPI Flash接口,可以使用Quad SPI和Flash通讯,当然这种外部Flash运行程序速率肯定要打折扣的,这是题外话了。
4、关于写保护
为了保证数据的完整,有以下几种写保护措施,防止软件误操作和电源不稳造成的数据错误。
1、电源低于下限值,自动写保护。
2、上电后写保护,直到Delay-Time时间到。
3、通过指令的方式进行写保护。
4、通过状态寄存器进行写保护。
5、硬件管脚/WP写保护。
说实话,写保护方法挺多,用的不多,看自己需求吧。
4、状态寄存器介绍
状态寄存器1
状态寄存器2
BUSY:只读位,可以简单理解为芯片自己在干活,比较忙,忙完了自动清除。
WEL:只读位,写使能指令后置1,写禁用后清零。
BP2, BP1, BP0:写保护相关位,是个非易失位,可读可写,用于写保护控制,保护原理下面介绍。
TB:非易失位,写保护相关位,保护底部还是顶部。
SEC:非易失位,保护扇区还是块。
SRP1、SRP0:也是个非易失位,可读可写,和/WP管脚不同组合确定保护方式。
QE:Quad使能位,启用4个数据线通讯方式,也是个非易失位。
注意:状态寄存器里有些位是非易失特性,大部分SPI Flash会出现越擦越慢的情况,这些位肯定是存储在Flash里,也会出现越擦越慢的情况,改写的越多,再次改写时间越长,这一点要留意。
写保护:
举个例子:如上图蓝色区域
例1:SEC=0保护块,TB=0保护顶端,保护60-63这4个块共256K,占用了Flash 1/16的空间。
例子2:SEC=1保护扇区,TB=0保护顶端,保护63块顶端8K。
5、指令:
指令就不一一解读了,手册中有详细的时序图,举几个常用指令。
读指令:03H,时序图如下
先发读指令码03H,然后24位地址,之后SPI返回数据。
写指令:02H,时序图如下
先发写指令码02H,然后24位地址,之后要写入的数据,写操作时注意地址回绕问题。
扇区擦除指令:20H,时序图如下
先发写指令码20H,然后24位地址,等待擦除完成即可。
全部0条评论
快来发表一下你的评论吧 !