SPI (Serial Peripheral Interface)
SPI 是一种高速、全双工、同步的通信总线,由摩托罗拉在 1980 年代推出。它通常用于短距离、高速的数据传输。
协议概述
- 物理层:通常需要 4 根线(有时 3 根)。
- SCLK (Serial Clock):时钟线,由主机产生。
- MOSI (Master Out Slave In):主机输出,从机输入。
- MISO (Master In Slave Out):主机输入,从机输出。
- CS/SS (Chip Select / Slave Select):片选线,低电平有效。
- 架构:单主多从(Single-Master, Multi-Slave)。
- 速率:非常高,通常可达 10 Mbps 甚至更高(取决于器件)。
通信模式:全双工交换
SPI 的本质是移位寄存器的数据交换。在时钟脉冲下,主机和从机的数据同时移出和移入。
sequenceDiagram participant Master as 主机 (MCU) participant Slave as 从机 (Flash) Note over Master: 拉低 CS 选中从机 Master->>Slave: CS = Low loop 每个时钟周期 Master->>Slave: MOSI 发送 1 bit Slave->>Master: MISO 发送 1 bit end Note over Master: 拉高 CS 结束通信 Master->>Slave: CS = High
特点:
- 全双工:发送和接收同时进行。
- 无地址:通过独立的 CS 片选线 来选择从设备。每个从设备需要一根独立的 CS 线。
- 四种模式:根据时钟极性 (CPOL) 和相位 (CPHA) 的不同,有 4 种工作模式 (Mode 0-3)。
优缺点
| 优点 | 缺点 |
|---|---|
| 速度快:比 I2C 和 UART 快得多。 | 引脚多:每个从机需要一根 CS 线,占用 MCU 引脚多。 |
| 全双工:数据传输效率高。 | 无应答:没有硬件 ACK 机制,无法确认从机是否接收。 |
| 协议简单:硬件实现简单,无复杂的起始/停止位。 | 距离短:仅限于板级通信,抗干扰能力弱。 |
典型应用
- 高速存储器(Flash, SD 卡)
- 高速传感器(IMU)
- 显示屏驱动(TFT LCD)
- 网络控制器(Ethernet)