SPI NOR Flash 的命令码详解
我们来对 SPI NOR Flash 的命令码进行一次非常详细和系统的解析。这将帮助您彻底理解其通信协议和工作原理。
命令码概述
SPI NOR Flash 通过一套标准化的命令集进行控制。主机(如 MCU)通过 MOSI 线发送命令码(通常为 1 字节),后跟地址、数据或空时钟(Dummy Clock),从而触发芯片内部相应的操作。
重要前提:
-
大多数修改阵列的操作(编程/擦除)和写寄存器操作都必须先发送 WREN (06h) 命令来使能写操作,否则操作会被忽略。
-
操作完成后,应通过读取状态寄存器来检查操作是否完成。
命令码详解表
下表列出了最常见和关键的 SPI NOR Flash 命令码。请注意,不同制造商或容量的芯片可能会有细微差异,请务必以您使用的具体型号的官方数据手册 (Datasheet) 为准。
命令名称 | 命令码 (Hex) | 功能描述 | 命令序列格式 (在 /CS 拉低后开始) | 说明与注意事项 |
---|---|---|---|---|
基本读写操作 | ||||
WREN (Write Enable) | 06h | 写使能。允许后续执行编程或擦除操作。 | 06h | 任何写操作前必须发送。成功执行后状态寄存器的 WEL 位置 1。 |
WRDI (Write Disable) | 04h | 写禁止。禁止后续编程或擦除操作。 | 04h | 操作完成后或发生错误时使用,会使 WEL 位清零。 |
READ (Read Data) | 03h | 读取数据。从指定地址开始读取数据。 | 03h + A23-A0 (3B Addr) + (读数据...) | 最基础、最兼容的读命令,速度较慢。 |
FAST_READ (Fast Read) | 0Bh | 快速读取。更高的时钟频率读取数据。 | 0Bh + A23-A0 (3B Addr) + Dummy Byte + (读数据...) | 比 READ 更快,但需要至少 1 个哑元时钟。 |
PP (Page Program) | 02h | 页编程。向指定地址写入数据。 | 02h + A23-A0 (3B Addr) + (写数据 Bytes...) | 只能将位从 '1' 改为 '0'。写入前需确保区域已擦除(全为 FFh)。有页边界限制。 |
SE (Sector Erase) | 20h | 扇区擦除。擦除一个指定扇区(通常为 4KB)。 | 20h + A23-A0 (3B Addr) | 地址必须对齐到扇区起始地址。擦除将整个扇区置为 FFh (全 '1')。 |
BE (Block Erase) | D8h | 块擦除。擦除一个更大的块(通常为 64KB)。 | D8h + A23-A0 (3B Addr) | 地址必须对齐到块起始地址。用于快速擦除大块区域。 |
CE (Chip Erase) | C7h / 60h | 整片擦除。擦除整个芯片存储阵列。 | C7h | 谨慎使用!耗时非常长。需确保整个芯片数据都可丢弃。 |
RDSR (Read Status Register) | 05h | 读状态寄存器。获取芯片当前状态。 | 05h + (持续读 SReg...) | 最关键的命令。用于检查 BUSY 位和 WEL 位。 |
WRSR (Write Status Register) | 01h | 写状态寄存器。配置写保护等功能。 | 01h + (写 Status Byte) | 需先 WREN。用于设置块保护(BP)位等。 |
识别与配置 | ||||
RDID (Read JDEC ID) | 9Fh | 读识别ID。读取制造商ID、设备类型和容量。 | 9Fh -> (回送 Manuf.ID, Memory Type, Capacity) | JEDEC 标准命令。用于自动识别 Flash 型号。 |
RDP (Release from Deep Power-down) | ABh | 退出深度省电模式并读取电子签名。 | ABh + (3 Dummy Bytes) -> (回送 Device ID) | 也可用于读取 ID,但非标准方式。 |
DP (Deep Power-down) | B9h | 进入深度省电模式。极大降低功耗。 | B9h | 电流可从 mA 级降至 μA 级。适合电池供电场景。 |
RCR (Read Configuration Register) | 35h | 读配置寄存器。 | 35h -> (回送 Config Reg) | 读取非易失性配置位,如 QE (Quad Enable) 位。 |
WCR (Write Configuration Register) | ? | 写配置寄存器。 | Cmd + (写 Config Reg) | 命令码厂商各异(如 GD25 是 31h)。用于使能四线模式(QE位)等。 |
高性能模式 (Quad SPI/QPI) | ||||
QPP (Quad Page Program) | 32h / 38h | 四线页编程。使用 4 条数据线写入数据。 | 32h + (3B Addr) + (4线模式写数据...) | 需先使能 QE 位。写入速度大幅提升。 |
QOFR (Quad Output Fast Read) | 6Bh | 四线输出快速读。 | 6Bh + (3B Addr) + Dummy Byte + (4线模式读数据...) | 时钟频率下,数据输出速率是标准 READ 的 4 倍。 |
QIOR (Quad I/O Fast Read) | EBh | 四线输入输出快速读。 | EBh + (4线模式发送Addr) + Dummy Cycle + (4线模式读数据) | 地址也用 4 线传输,极大提升读取效率。 |
4-Byte Address Mode | 针对大于 16Mb (128Mb) 的芯片 | |||
EN4B (Enter 4-Byte Mode) | B7h | 启用 4 字节地址模式。 | B7h | 将地址线从 3 字节扩展到 4 字节,可寻址更大容量。 |
EX4B (Exit 4-Byte Mode) | E9h | 退出 4 字节地址模式。 | E9h | 恢复为 3 字节地址模式。 |
READ4B (Read with 4B Addr) | 13h | 4 字节地址读取。 | 13h + A31-A0 (4B Addr) + ... | 在 4 字节模式下的读命令。 |
PP4B (Page Prog with 4B Addr) | 12h | 4 字节地址页编程。 | 12h + A31-A0 (4B Addr) + ... | 在 4 字节模式下的写命令。 |
状态寄存器 (Status Register - S0) 详解
这是与命令交互最频繁的寄存器,必须熟练掌握。
位 (Bit) | 符号 | 名称 | 功能描述 |
---|---|---|---|
0 | WIP | Write In Progress | 忙状态位。1:芯片正忙(正在编程/擦除);0:芯片空闲。通过循环读取此位判断操作是否完成。 |
1 | WEL | Write Enable Latch | 写使能锁存位。1:写操作被使能(已发送 WREN);0:写操作被禁止(默认或操作完成)。任何成功的写操作都会自动清除此位。 |
2 | BP0 | Block Protect 0 | 块保护位。这些位(BP0, BP1, BP2, ...)通过 WRSR 命令设置,用于定义受硬件写保护的存储区域范围,防止误擦写。 |
3 | BP1 | Block Protect 1 | |
4 | BP2 | Block Protect 2 | |
5 | TB | Top/Bottom Protect | 保护区域定位位。决定保护的区块是从底部开始还是从顶部开始。 |
6 | SEC | Sector/Block Protect | 保护粒度位。决定保护的单位是扇区(SEC=1)还是块(SEC=0)。 |
7 | SRP0 / SRWD | Status Reg Protect | 状态寄存器保护位。常与 /WP 引脚配合,用于禁止写状态寄存器。 |
8 (S1) | QE | Quad Enable | 四线模式使能位。1:使能 Quad SPI 模式;0:禁用(标准 SPI 模式)。此位通常需要通过 WCR 命令来设置。 |
一个典型的工作流程
向地址 0x1000 写入数据 [0xAA, 0xBB, 0xCC]:
-
检查并等待就绪:发送
RDSR (05h)
,循环读取直到返回值的WIP位
为 0。 -
使能写操作:发送
WREN (06h)
。 -
(可选)确认WEL置位:发送
RDSR (05h)
,检查返回值的WEL位
是否为 1。 -
发送写命令和数据:发送
PP (02h)
+0x00, 0x10, 0x00
(3字节地址) +0xAA, 0xBB, 0xCC
(数据)。 -
等待写入完成:再次发送
RDSR (05h)
,循环读取直到WIP位
变为 0。 -
验证数据 (可选):发送
READ (03h)
+0x00, 0x10, 0x00
,读取数据并对比。
总结与注意事项:
-
先擦后写:NOR Flash 的编程只能写 '0'。因此,写入前目标区域必须被擦除(全为 '1' 或 0xFF)。
-
页边界:Page Program 命令不能跨页写入。如果尝试写入超过当前页末尾,数据会回绕到当前页的开头。
-
地址对齐:擦除命令(SE/BE)的地址必须是对应扇区或块的起始地址。
-
硬件写保护:注意
/WP
引脚和状态寄存器保护位的配置,它们可能会阻止写操作。 -
始终查阅手册:本文是通用指南,具体芯片的特性(如页大小、扇区大小、特殊命令)请以其数据手册为准。