Flash ROM 是近些年应用最广、速度最快的只读存储器,原理是从 EEPROM 基础上改进发展来的,特点是擦除和编程速度快,因此得名为闪速(或闪烁)存储器,简称闪存。
存储区域
描述 Flash 的存储区域常用到扇区、块这些专用名词,其实是从早期的软盘、硬盘等存储器发展而来,目的是将一个存储器划分为多个区域,更方便的编程管理这些存储单元。
根据容量大小来说,它们的关系是 页(Page)< 扇区(Sector) < 块(Block)< 芯片(Chip)

通常的换算关系如下:
| 每块 | 每扇区 | 每页 |
| 16 扇区 | 16 页 | 256 Byte(2048 bit) |
常用 FLASH 型号大小如下
| 型号 | W25Q80 | W25Q16 | W25Q32 |
| 块 | 16 | 32 | 64 |
| 扇区 | 256 | 512 | 1024 |
| 页 | 4096 | 8192 | 16384 |
| 字节数 | 1M Byte(8M bit) | 2M Byte(16M bit) | 4M Byte(32M bit) |
写入和擦除
Flash 写入数据时和 EEPROM 类似,不能跨页写入,一次最多写入一页,如 W25Q128 的一页是 256 字节。写入数据一旦跨页,必须在写满上一页的时候,等待 Flash 将数据从缓存搬移到非易失区,重新再次往里写。写入时的最小单位:1 Byte,即一次可写入 1~256 Byte 的任意长度字节。
未进行写入时,FLASH 里面的数据为全 1,即 0xFF。写入数据时只能将 1 写入为 0,而不能将 0 写入为 1,只能先进行擦除再重新写入。如对于 0xF0(1111 0000),只有高 4 位可写入,低 4 位不可直接写入。
Flash 擦除数据时的最小单位通常为扇区,也可选择按块或全片擦除。
引脚功能

如图为常见的 8pin flash 芯片引脚。
- CS:chip select 片选. CS 拉高时,芯片处理省电模式,各数据引脚 (D0/D1/D2/D3) 处理高阻态;CS 拉低时芯片工作,数据引脚可以传输数据。
- DO:(在 CLK 下降沿) 输出数据或状态。正常情况下只有 DI/DO 作为 IO 引脚,启用 Quad 模式需要置 QE (Quad Enable) 位. QE=1 时,WP 和 HOLD 分别变为 IO2,IO3.
- WP:低电平有效,保护状态寄存器不被写入。
- GND:接地
- DI:(在 CLK 上升沿) 向 Flash 输入指令,地址 或 数据.
- CLK:提供输入输出操作的同步时钟.
- HOLD:当多个芯片共用 SPI 总线时非常有用. HOLD 为低电平时,DO 引脚变为高阻态,且此时 DI/CLK 上的信号被忽略。相当于芯片此时不工作。假设对一个 SPI FLASH 的页写操作只进行到一半,此时一个中断来了,另一个更高优先级的任务要占用 SPI 总线,此时就可以使用 HOLD 拉低来暂停 SPI FLASH 内部的工作,等到任务切换回来再让操作继续下去.
- VCC:通常 2.7 ~ 3.6V

