加入硬件工程师交流群,请点击以下连接。硬件工程师技术交流群
本文以常见的4M Flash W25Q32为例。
1、Flash存储容量
容量可以从芯片的名称上看出来,虽然不同厂家的命名方式不一样,但是大体类似,比如W25Q80, W25Q16, W25Q32等。
封装类型有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、通讯方式
标准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位地址,等待擦除完成即可。
扩展阅读:一直蒙圈的SPI四种模式