SPI 指令码 / 指令集
·
一、SPI 指令码 / 指令集 通用原理
SPI 不像 I2C 有固定标准协议,每个外设自定义自己的指令集,但结构套路完全统一:
1. 通用 SPI 指令帧格式
固定三段式:指令码 (Command) + 地址 (Address) + 读写数据 (Data)
- 指令码(1 字节 8bit)告诉从机要做什么:读寄存器、写寄存器、读状态、复位、擦除等
- 地址域(0~3 字节)要操作的寄存器地址 / Flash 存储地址
- 数据域(N 字节)要写入的数据 / 读取返回的数据
2. 两类典型 SPI 外设指令体系
类型 A:外置 CAN 控制器 —— MCP2515 / MCP2518FD(经典指令集)
工业最常用、必须掌握的 SPI 指令码
| 指令码 (HEX) | 指令名称 | 功能说明 |
|---|---|---|
| 0x01 | RESET | 软件复位芯片 |
| 0x02 | READ | 读寄存器 |
| 0x03 | WRITE | 写寄存器 |
| 0x05 | READ STATUS | 读取状态寄存器 |
| 0x08 | BIT MODIFY | 位修改(只改某几位,不整体写) |
| 0x0A | TX REQUEST | 请求发送 CAN 报文 |
通信流程示例:读 MCP2515 寄存器
- CS 拉低
- 发指令码
0x02(READ) - 发寄存器地址
- 从机通过 MISO 返回寄存器值
- CS 拉高
类型 B:SPI Flash(W25Qxx 通用标准指令集)
行业统一标准指令,所有厂商兼容
| 指令码 | 功能 |
|---|---|
| 0x06 | 写使能 WREN |
| 0x03 | 低速读数据 READ |
| 0x0B | 高速读 |
| 0x02 | 页编程(写数据) |
| 0x20 | 扇区擦除 |
| 0xFF | 空指令 / 唤醒 |
类型 C:以太网 PHY SPI 指令结构
PHY 的 SPI 不做大数据传输,只读写 PHY 寄存器
帧结构:
读写命令 + PHY地址 + 寄存器地址 + 16bit数据
无复杂指令码,直接寄存器寻址读写。
二、SPI 指令读写 标准时序举例(最简模型)
以「写寄存器」为例:
- CS = Low
- SCK 开始脉冲
- MOSI 依次输出:写指令码 → 寄存器地址 → 待写数据
- 同时 MISO 会返回无效占位数据(全 1)
- 传输完毕
- CS = High
以「读寄存器」为例:
- CS = Low
- MOSI 发:读指令码 → 寄存器地址
- 后续时钟周期,MISO 输出寄存器真实数据
- CS = High
三、总结
- 无统一标准协议,各外设自定义指令集,通用结构:指令码 + 地址 + 数据;
- 速率远高于 I2C/UART,适合 Flash、LCD、MCP2515、以太网 PHY 高速配置通信。
更多推荐

所有评论(0)