FLASH在嵌入式开发是很常用的一种芯片。它是存储芯片的一种,通过特定的程序可以修改里面的数据。FLASH在电子以及半导体领域内往往表示Flash Memory的意思,即平时所说的“闪存”,全名叫Flash EEPROM Memory。
FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。
1 W25QXX简介
W25QX系列是串行闪存器件。擦写周期多达10W次,可将数据保存达20年之久,支持2.7~3.6V的电压,支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可达80Mhz。
FLASH芯片的内存空间一般都是由多个块组成,而块又是由扇区组成。
例如W25Q64就是将8M字节的容量分为了128个块,每个块大小为64K字节,每个块又可分为16个扇区,每个扇区4K个字节。
25Q系列的FLASH最小擦除单位为一个扇区,也就是每次必须擦除4K个字节。所以,这需要给FLASH开辟一个至少4K的缓存区,这样必须要求芯片有4K以上的SRAM才能有很好的操作。
2 硬件参数
硬件参数比较多,我只挑一些常用的介绍一下,更详细的介绍可以查阅芯片手册。
基本参数 | 说明 |
---|---|
电压 | 2.7V - 3.6V |
电流 | 4mA活动电流,掉电模式下小于1uA |
通讯方式 | 标准SPI双路SPI四路SPI |
速率 | 80MHz工作时钟160MHz等效时钟(双路SPI模式下)320MHz等效时钟(四路SPI模式下) |
引脚号 | 引脚名称 | I/O | 功能 |
---|---|---|---|
1 | CS | I | 片选输入 |
2 | DO(IO1) | I/O 数据输出,标准SPI数据引脚 (数据输入输出1)*1 |
|
3 | WP(IO2) | I/O | 写保护输入,低电平有效,拉低时不能写入数据 (数据输入输出2)*2 |
4 | GND | - | 地 |
5 | DI(IO0) | I/O | 数据输入,标准SPI数据引脚 (数据输入输出0)*1 |
6 | CLK | I | 串行时钟输入 |
7 | HOLD(IO3) | I/O | 保持输入,拉低时,DO将处于高阻抗,DI和CLK针上的信号将被忽略,拉高时设备允许操作 (数据输入输出3)*2 |
8 | VCC | - | 供电 |
注:IO0和IO1用在标准和双路SPI模式,IO0到IO3用在四路SPI模式下。如果IO2和IO3不使用,可以硬件拉高。
3 寄存器介绍
我这里只列举部分跟软件编程相关的常用寄存器,更详细的介绍可以查阅芯片手册。。
指令名称 | 数值 |
---|---|
制造商设备ID | 90h |
JEDEC ID | 9Fh |
写状态寄存器 | 01h |
读状态寄存器1 | 05h |
读状态寄存器2 | 35h |
读数据 | 03h |
写使能 | 06h |
写失能 | 04h |
扇区擦除(4KB) | 20h |
全片擦除 | C7h |
页编程 | 02h |
4 编程相关
当我们要使用MCU来读写flash芯片的时候,需要用到spi通讯,这里面有几个比较容易踩的坑。
1、WP和HOLD引脚
如果使用标准4线spi通讯,要注意WP和HOLD引脚的状态,WP拉低时不能写入数据,HOLD拉低时,DO将处于高阻抗,DI和CLK针上的信号将被忽略。因此,如果不使用4路spi的话,WP和HOLD引脚可以直接通过硬件拉高,也可以通过MCU的GPIO拉高。否则,悬空或者拉低都会影响数据的写入。
2、连续写入时需要注意分区
flash一次最大可编辑256字节。flash内存可以分成多个页,每页256个字节,我们在使用spi写入flash时最多只能一次写入一页数据,并且不能跨页写入。因此,当我们需要连续写入超过一页数据时,需要注意把spi通讯分成多次。同样的,写入时也不能跨扇区写入。
3、flash写入前需要先擦除
flash写入时是按bit操作的,只能把1改成0,只有擦除才能把0变成1,因此,如果不擦除直接写入的话就会变成或运算,最终存储的数据可能跟写入的数据不一致。
4、擦除的最小单位是扇区(4K字节)
flash不能只单独擦除某一个寄存器,最少也是4096字节。如果某一个扇区原本保存了一些重要数据,然后你又需要从这个扇区的中间位置添加一些新的数据,这个时候需要注意在擦除前要先把原有保存的数据读出来,擦除后再把旧的数据和新的数据写进去,不然直接擦除的话会把原有的数据擦掉。
结束语
好了,关于W25QXX系列FLASH的介绍就讲到这里了,因为关于这个芯片的资料网上有很多讲解教程,因此本文只是挑了一些重点来讲,更详细的内容可以查阅相关的资料,如果有哪里不懂又找不到的话也可以在评论区留言或者私信给我。