跳到主要内容

SPI通信协议

1. SPI通信

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

四根通信线: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 起始、终止条件

Image

2.2 模式0

Image

2.3 模式1

Image

2.4 模式2

Image

2.5 模式3

Image

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