高通字库
版本 V1.1 · 更新于 2026-03

4. 标准SPI指令

标准SPI模式使用4线接口:CS#(片选)、SI(数据输入)、SO(数据输出)、SCLK(时钟)。所有指令在CS#下降沿开始,CS#上升沿结束。

SPI总线信号说明:

信号方向说明
CS#I片选,低电平有效
SI (IO0)I串行数据输入
SO (IO1)O串行数据输出
SCLKI串行时钟
HOLD# (IO3)I保持,暂停设备但不取消选中

4.1 指令参数

SPI指令集分为标准SPI和Quad SPI两类。所有指令格式为:1字节操作码 + 地址(可选) + 空周期(可选) + 数据。

完整指令集:

指令名称缩写操作码地址字节空周期数据字节功能描述
Normal Read ArrayREAD03H301+从Flash读取数据,CS#拉高停止
Fast Read ArrayFREAD0BH381+高速读取数据,CS#拉高停止
Read Quad OutputQREAD6BH381+Quad输出读取数据
Read 4I/O4READEBH36(10)1+4线I/O读取数据
Sector Erase (4KB)SE20H300擦除所选4KB扇区
Page ProgramPP02H301+页编程(最多256字节)
Quad Page ProgramQPP32H301+Quad输入页编程
Write EnableWREN06H000置位写使能锁存位
Write DisableWRDI04H000复位写使能锁存位
Read Status RegisterRDSR05H001读取状态寄存器
Deep Power-downDPB9H000进入深度睡眠模式
Release Deep Power-down / Read Electronic IDRDP/RESABH301退出深度睡眠 / 读取电子ID

4.2 Read Data Bytes (READ 03H)

READ指令从Flash读取数据。CS#拉低后,发送0x03指令码和3字节地址,之后通过SO引脚读取数据,每读一个字节地址自动递增,CS#拉高停止。

时序过程:

  1. CS# 拉低
  2. 发送 0x03 (指令码) + 3字节地址(MSB优先,共24位)
  3. SO引脚输出数据,时钟SCLK驱动
  4. CS# 拉高,停止读取

READ 时序图READ 时序图

4.3 Read Data Bytes at Higher Speed (READ_FAST 0BH)

READ_FAST指令与READ类似,但增加了8个空周期(Dummy Bytes),允许更高频率读取。

时序过程:

  1. CS# 拉低
  2. 发送 0x0B (指令码) + 3字节地址
  3. 插入8个空周期(SI保持低电平或输入任意数据)
  4. SO引脚输出数据,每16个时钟输出32字节
  5. CS# 拉高,停止读取

READ_FAST 时序图READ_FAST 时序图

4.4 Read Status Register (RDSR 05H)

RDSR指令读取状态寄存器的内容。状态寄存器格式:

RDSR 时序图RDSR 时序图

名称说明
B7SRPStatus Register Protect
B6Reserved
B5Reserved
B4Reserved
B3Reserved
B2Reserved
B1WELWrite Enable Latch(1=写使能)
B0WIPWrite 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 时序图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。

时序:

  1. CS# 拉低
  2. 发送 0x06 (WREN)
  3. CS# 拉高

WREN 时序图WREN 时序图

4.8 Write Disable (WRDI 04H)

发送WRDI指令复位写使能锁存位(WEL=0)。写入操作完成后,WEL自动清零。

4.9 Page Program (PP 02H)

PP指令将数据写入Flash(256字节为一页)。写入前必须执行WREN使能写入。

时序过程:

  1. 执行WREN指令
  2. CS# 拉低
  3. 发送 0x02 + 3字节地址(24位)
  4. 发送1~256字节写入数据
  5. CS# 拉高,开始内部编程

注意: 如果写入数据跨越页边界(256字节对齐),地址会回卷(wraps around)到当前页起始地址。

Page Program 时序图Page Program 时序图

4.10 Sector Erase (SE 20H)

SE指令擦除指定4KB扇区,所有位变为1(0xFF)。擦除前必须执行WREN。

时序过程:

  1. 执行WREN指令
  2. CS# 拉低
  3. 发送 0x20 + 3字节地址
  4. CS# 拉高,开始擦除(约45ms)

Sector Erase 时序图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自动清零