跳到主要内容

SPI通信协议

1. SPI通信

SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线.

SPI最大的特点是数据传输没有固定的起始/停止位,完全由时钟沿控制数据采样和移位

提示

四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)

同步,全双工

支持总线挂载多设备(一主多从)

Image

所有SPI设备的SCK、MOSI、MISO分别连在一起。

主机另外引出多条SS控制线,分别接到各从机的SS引脚。

输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入。

Image

SPI主从机的寄存器间的数据传递与队列(queue)机制非常相似,时钟提供时,主机寄存器的数据首位通过MOSI线传输到从机寄存器的末位,如果是1就是上升沿,如果是0就是下降沿。转移了首位的数据,数据往前移动一位,这样从机的首位数据就可以通过MISO线进入主机寄存器的末位。如此往复,交换数据。

Image

2. SPI时序基本单元

2.1 起始、终止条件

SPI 的通信由 CS(SS) 信号控制:

  • 起始条件:CS 从高电平变为低电平(激活从机)
  • 终止条件:CS 从低电平变为高电平(释放从机)

在 CS(SS) 有效期间,SCK 才会工作,数据传输才能进行。

Image

SPI 模式由两个参数决定:

  1. CPOL(Clock Polarity) - 时钟极性
  • CPOL = 0:SCK 空闲时为低电平
  • CPOL = 1:SCK 空闲时为高电平
  1. CPHA(Clock Phase) - 时钟相位
  • CPHA = 0:数据在第一个时钟沿采样
  • CPHA = 1:数据在第二个时钟沿采样

组合成 4 种模式:模式 0、1、2、3。

2.2 模式0(CPOL=0, CPHA=0)

这是SPI最常用的模式。时序特点:SCK 空闲 = 低电平,数据在 SCK 上升沿被采样,在 SCK 下降沿发生变化。

Image

  1. CS 拉低后,主机在第一个 SCK 下降沿输出第一位数据(MOSI)
  2. 从机在 SCK 上升沿采样该位数据
  3. 同时从机在 SCK 上升沿输出自己的数据(MISO)
  4. 主机在下一个 SCK 下降沿采样 MISO 数据
  5. 如此循环 8 次完成 1 字节传输

像ADC,FLASH这些能够采样的都是常见的SPI设备。

2.3 模式1(CPOL=0, CPHA=1)

SCK 空闲 = 低电平,数据在 SCK 下降沿被采样,数据在 SCK 上升沿发生变化。

Image

  1. CS 拉低后,主机在第一个 SCK 上升沿输出第一位数据
  2. 从机在 SCK 下降沿采样该位数据
  3. 数据传输比模式 0 延迟半个时钟周期

适用于某些特定传感器或旧式 SPI 设备。

2.4 模式2(CPOL=1, CPHA=0)

SCK 空闲 = 高电平,数据在 SCK 下降沿被采样,数据在 SCK 上升沿发生变化。

Image

注意

注意:虽然 CPHA=0,但因为 CPOL=1,实际“第一个时钟沿”是下降沿(因为 SCK 从高变低)。

工作流程:

  1. 主机在CS有效后立即输出第一位数据,然后在每个上升沿更新数据
  2. 从机在每个下降沿读取数据

适用场景:较少使用,但一些特殊芯片支持。

2.5 模式3(CPOL=1, CPHA=1)

SCK 空闲 = 高电平,数据在 SCK 上升沿被采样,数据在 SCK 下降沿发生变化。

Image

  1. CS 拉低时 SCK 为高电平
  2. 主机在第一个 SCK 下降沿输出数据(SCK 从高→低)
  3. 从机在 SCK 上升沿采样数据
  4. 这与模式 0 类似,只是空闲电平相反

适用于某些射频芯片、特定通信模块。

注意
  1. 主从设备模式必须匹配,否则无法通信。
  2. 数据位顺序(MSB/LSB 优先)也需要匹配,这独立于模式设置。
  3. 时钟频率不能超过从设备最大支持频率。
  4. 每次 CS 拉低都重新开始传输
  5. 多字节连续传输时,CS 可保持低电平
  6. CS 拉高期间,MOSI/MISO 应为高阻态
  7. 模式选择依据:必须查阅从设备数据手册,通常模式 0 最常见。

3. SPI时序

Image

Image

Image

4. SPI外设

STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担

可配置8位/16位数据帧、高位先行/低位先行

时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)

支持多主机模型、主或从操作

可精简为半双工/单工通信

支持DMA。

兼容I2S协议。

STM32F103C8T6 硬件SPI资源:SPI1、SPI2。

5. SPI基本结构

Image

Image

6. 主模式全双工传输

6.1 连续传输

Image

6.2 非连续传输

Image

7. 软件/硬件波形对比

Image

Image