4. 标准SPI指令
标准SPI模式使用4线接口:CS#(片选)、SI(数据输入)、SO(数据输出)、SCLK(时钟)。所有指令在CS#下降沿开始,CS#上升沿结束。
SPI总线信号说明:
| 信号 | 方向 | 说明 |
|---|---|---|
| CS# | I | 片选,低电平有效 |
| SI (IO0) | I | 串行数据输入 |
| SO (IO1) | O | 串行数据输出 |
| SCLK | I | 串行时钟 |
| HOLD# (IO3) | I | 保持,暂停设备但不取消选中 |
4.1 指令参数
SPI指令集分为标准SPI和Quad SPI两类。所有指令格式为:1字节操作码 + 地址(可选) + 空周期(可选) + 数据。
完整指令集:
| 指令名称 | 缩写 | 操作码 | 地址字节 | 空周期 | 数据字节 | 功能描述 |
|---|---|---|---|---|---|---|
| Normal Read Array | READ | 03H | 3 | 0 | 1+ | 从Flash读取数据,CS#拉高停止 |
| Fast Read Array | FREAD | 0BH | 3 | 8 | 1+ | 高速读取数据,CS#拉高停止 |
| Read Quad Output | QREAD | 6BH | 3 | 8 | 1+ | Quad输出读取数据 |
| Read 4I/O | 4READ | EBH | 3 | 6(10) | 1+ | 4线I/O读取数据 |
| Sector Erase (4KB) | SE | 20H | 3 | 0 | 0 | 擦除所选4KB扇区 |
| Page Program | PP | 02H | 3 | 0 | 1+ | 页编程(最多256字节) |
| Quad Page Program | QPP | 32H | 3 | 0 | 1+ | Quad输入页编程 |
| Write Enable | WREN | 06H | 0 | 0 | 0 | 置位写使能锁存位 |
| Write Disable | WRDI | 04H | 0 | 0 | 0 | 复位写使能锁存位 |
| Read Status Register | RDSR | 05H | 0 | 0 | 1 | 读取状态寄存器 |
| Deep Power-down | DP | B9H | 0 | 0 | 0 | 进入深度睡眠模式 |
| Release Deep Power-down / Read Electronic ID | RDP/RES | ABH | 3 | 0 | 1 | 退出深度睡眠 / 读取电子ID |
4.2 Read Data Bytes (READ 03H)
READ指令从Flash读取数据。CS#拉低后,发送0x03指令码和3字节地址,之后通过SO引脚读取数据,每读一个字节地址自动递增,CS#拉高停止。
时序过程:
- CS# 拉低
- 发送 0x03 (指令码) + 3字节地址(MSB优先,共24位)
- SO引脚输出数据,时钟SCLK驱动
- CS# 拉高,停止读取
READ 时序图
4.3 Read Data Bytes at Higher Speed (READ_FAST 0BH)
READ_FAST指令与READ类似,但增加了8个空周期(Dummy Bytes),允许更高频率读取。
时序过程:
- CS# 拉低
- 发送 0x0B (指令码) + 3字节地址
- 插入8个空周期(SI保持低电平或输入任意数据)
- SO引脚输出数据,每16个时钟输出32字节
- CS# 拉高,停止读取
READ_FAST 时序图
4.4 Read Status Register (RDSR 05H)
RDSR指令读取状态寄存器的内容。状态寄存器格式:
RDSR 时序图
| 位 | 名称 | 说明 |
|---|---|---|
| B7 | SRP | Status Register Protect |
| B6 | — | Reserved |
| B5 | — | Reserved |
| B4 | — | Reserved |
| B3 | — | Reserved |
| B2 | — | Reserved |
| B1 | WEL | Write Enable Latch(1=写使能) |
| B0 | WIP | Write In Progress(1=写入中) |
4.5 Deep Power-down (DP B9H)
发送B9H指令使芯片进入深度睡眠模式。CS#下降沿→发送B9H→CS#上升沿后,等待T_DP(约25μs),芯片进入最低功耗状态。在深度睡眠模式下,所有指令被忽略,仅响应Release Deep Power-down指令。
Deep Power-down 时序图
4.6 Release Deep Power-down / Read Electronic ID (RDP/RES ABH)
发送ABH指令使芯片退出深度睡眠模式。CS#下降沿→发送ABH→CS#上升沿后等待T_RES1(约25μs),芯片恢复正常工作。该指令还可用于读取Electronic ID。
4.7 Write Enable (WREN 06H)
发送WREN指令置位写使能锁存位(WEL=1)。页编程、扇区擦除等写入操作前必须先执行WREN。
时序:
- CS# 拉低
- 发送 0x06 (WREN)
- CS# 拉高
WREN 时序图
4.8 Write Disable (WRDI 04H)
发送WRDI指令复位写使能锁存位(WEL=0)。写入操作完成后,WEL自动清零。
4.9 Page Program (PP 02H)
PP指令将数据写入Flash(256字节为一页)。写入前必须执行WREN使能写入。
时序过程:
- 执行WREN指令
- CS# 拉低
- 发送 0x02 + 3字节地址(24位)
- 发送1~256字节写入数据
- CS# 拉高,开始内部编程
注意: 如果写入数据跨越页边界(256字节对齐),地址会回卷(wraps around)到当前页起始地址。
Page Program 时序图
4.10 Sector Erase (SE 20H)
SE指令擦除指定4KB扇区,所有位变为1(0xFF)。擦除前必须执行WREN。
时序过程:
- 执行WREN指令
- CS# 拉低
- 发送 0x20 + 3字节地址
- CS# 拉高,开始擦除(约45ms)
Sector Erase 时序图
4.11 状态轮询
编程/擦除操作期间,可通过RDSR指令轮询WIP位(B0位)。WIP=1表示操作进行中,WIP=0表示操作完成。
4.12 SPI操作注意事项
- HOLD#引脚可暂停SPI通信(保持当前状态),释放后继续
- 额定工作电压 2.7V~3.6V(典型值3.3V)
- 上电后需等待VCC升至最低工作电压(≥2.7V)后再操作
- WREN命令后,下一次PP/SE操作完成后WEL自动清零


