Loading

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的数据交换本质上是两个移位寄存器的环形连接

  1. 主机移位寄存器的MSB通过MOSI移出,进入从机移位寄存器的LSB
  2. 从机移位寄存器的MSB通过MISO移出,进入主机移位寄存器的LSB
  3. 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协议的核心就三

  1. 四根线,全双工,时钟同步
  2. 移位寄存器交换数据,发送即接收
  3. CS选中谁,谁才响应

协议本身没有规定数据帧格式、校验机制或流控——这些全靠上层自己定义。简单粗暴,但够快够直接。

posted @ 2026-06-01 20:19  cc_record  阅读(37)  评论(0)    收藏  举报