SPI总线
30秒速通SPI协议:从四根线到完整时序
配套视频已发布,用动画演示了SPI的核心机制,建议结合观看。
SPI是什么
SPI(Serial Peripheral Interface)是摩托罗拉在上世纪80年代提出的一种同步串行通信协议。它的核心特点是全双工、高速、硬件简单,广泛用于芯片间短距离通信。
和I2C相比,SPI没有复杂的地址机制和应答协议,通信效率更高,代价是多占几根引脚。
四线制
SPI总线由四根信号线组成:
| 信号 | 方向 | 作用 |
|---|---|---|
| MOSI | Master → Slave | 主机发送数据 |
| MISO | Slave → Master | 从机返回数据 |
| SCK | Master → Slave | 时钟,由主机产生 |
| CS | Master → Slave | 片选,低电平有效 |
关键点:MOSI和MISO同时工作,每个时钟沿主机发出一位的同时也收到一位,这就是全双工。
时钟模式:CPOL与CPHA
SPI有四种时钟模式,由两个参数决定:
- CPOL(Clock Polarity):时钟空闲时的电平。0=空闲低,1=空闲高。
- CPHA(Clock Phase):数据采样的时钟沿。0=第一个沿采样,1=第二个沿采样。
| Mode | CPOL | CPHA | 说明 |
|---|---|---|---|
| 0 | 0 | 0 | 空闲低,上升沿采样 |
| 1 | 0 | 1 | 空闲低,下降沿采样 |
| 2 | 1 | 0 | 空闲高,下降沿采样 |
| 3 | 1 | 1 | 空闲高,上升沿采样 |
实际使用中,Mode 0最常见。主从双方必须配置相同的模式,否则数据错位。
数据传输:移位寄存器
SPI的数据交换本质上是两个移位寄存器的环形连接:
- 主机移位寄存器的MSB通过MOSI移出,进入从机移位寄存器的LSB
- 从机移位寄存器的MSB通过MISO移出,进入主机移位寄存器的LSB
- 8个时钟脉冲后,双方寄存器内容完成交换
举例:主机发送0xA5(10100101),从机发送0x3C(00111100)。8个时钟后,主机寄存器变成0x3C,从机寄存器变成0xA5。
发送即接收——即使你只想读从机数据,也必须发送(通常发0x00或0xFF作为dummy byte)。
片选机制
当主机连接多个从机时,每个从机需要独立的CS线:
- CS拉低 = 选中该从机
- CS拉高 = 从机忽略总线上的所有信号
- 同一时刻只能选中一个从机
这意味着N个从机需要N条CS线,引脚消耗随从机数量线性增长。这是SPI相比I2C的主要劣势之一。
完整传输时序
一次标准SPI字节传输的流程:
1. 主机拉低CS,选中目标从机
2. 主机产生8个SCK时钟脉冲
3. 每个时钟沿,MOSI输出一位,MISO输入一位
4. 8个时钟后,一字节交换完成
5. 主机拉高CS,释放从机
多字节传输时,CS保,连续发送多个8-clock周期即可。
SPI vs I2C
| 特性 | SPI | I2C |
|---|---|---|
| 双工 | 全双工 | 半双工 |
| 速度 | 通常10-100MHz | 标准100/400kHz,快速3.4MHz |
| 引脚 | 4+N(N=从机数) | 2(SDA+SCL) |
| 寻址 | 硬件CS线 | 7/10位地址 |
| 应答 | 无 | 有ACK/NACK |
| 复杂度 | 低 | 中等 |
选型建议:
- 需要高速传输(Flash、显示屏、ADC)→ SPI
- 引脚紧张、从机多、速度要求不高(传感器、EEPROM)→ I2C
- 两者都能用时,看数据手册支持哪个,以及板子还剩几个引脚
常见应用
- Flash存储:W25Q系列,SPI接口,读取速度可达100MHz+
- OLED/TFT屏幕:SSD1306、ST7789等驱动IC
- ADC/DAC:高精度模数转换器
- 无线模块:nRF24L01、CC1101
- SD卡:SD卡的SPI模式,嵌入式中很常用
小结
SPI协议的核心就三
- 四根线,全双工,时钟同步
- 移位寄存器交换数据,发送即接收
- CS选中谁,谁才响应
协议本身没有规定数据帧格式、校验机制或流控——这些全靠上层自己定义。简单粗暴,但够快够直接。

浙公网安备 33010602011771号