一、SPI 指令码 / 指令集 通用原理

SPI 不像 I2C 有固定标准协议,每个外设自定义自己的指令集,但结构套路完全统一:

1. 通用 SPI 指令帧格式

固定三段式:指令码 (Command) + 地址 (Address) + 读写数据 (Data)

  1. 指令码(1 字节 8bit)告诉从机要做什么:读寄存器、写寄存器、读状态、复位、擦除等
  2. 地址域(0~3 字节)要操作的寄存器地址 / Flash 存储地址
  3. 数据域(N 字节)要写入的数据 / 读取返回的数据

2. 两类典型 SPI 外设指令体系

类型 A:外置 CAN 控制器 —— MCP2515 / MCP2518FD(经典指令集)

工业最常用、必须掌握的 SPI 指令码

指令码 (HEX)指令名称功能说明
0x01RESET软件复位芯片
0x02READ读寄存器
0x03WRITE写寄存器
0x05READ STATUS读取状态寄存器
0x08BIT MODIFY位修改(只改某几位,不整体写)
0x0ATX REQUEST请求发送 CAN 报文

通信流程示例:读 MCP2515 寄存器

  1. CS 拉低
  2. 发指令码 0x02 (READ)
  3. 发寄存器地址
  4. 从机通过 MISO 返回寄存器值
  5. CS 拉高

类型 B:SPI Flash(W25Qxx 通用标准指令集)

行业统一标准指令,所有厂商兼容

指令码功能
0x06写使能 WREN
0x03低速读数据 READ
0x0B高速读
0x02页编程(写数据)
0x20扇区擦除
0xFF空指令 / 唤醒

类型 C:以太网 PHY SPI 指令结构

PHY 的 SPI 不做大数据传输,只读写 PHY 寄存器

帧结构:

读写命令 + PHY地址 + 寄存器地址 + 16bit数据

无复杂指令码,直接寄存器寻址读写。


二、SPI 指令读写 标准时序举例(最简模型)

以「写寄存器」为例:

  1. CS = Low
  2. SCK 开始脉冲
  3. MOSI 依次输出:写指令码 → 寄存器地址 → 待写数据
  4. 同时 MISO 会返回无效占位数据(全 1)
  5. 传输完毕
  6. CS = High

以「读寄存器」为例:

  1. CS = Low
  2. MOSI 发:读指令码 → 寄存器地址
  3. 后续时钟周期,MISO 输出寄存器真实数据
  4. CS = High

三、总结

  1. 无统一标准协议,各外设自定义指令集,通用结构:指令码 + 地址 + 数据;
  2. 速率远高于 I2C/UART,适合 Flash、LCD、MCP2515、以太网 PHY 高速配置通信。
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐