1. SPI协议基础:SPI总线物理层、四线制时序与四种工作模式详解
1.1 SPI总线物理层概述
SPI(Serial Peripheral Interface,串行外设接口)是一种全双工、同步、主从架构的串行通信总线。物理层由四条信号线构成,所有通信由主设备(Master)发起并控制时钟。
| 信号线 | 全称 | 方向(主设备视角) | 功能描述 |
|---|---|---|---|
| SCLK | Serial Clock | 输出 | 由主设备产生,同步所有数据传输 |
| MOSI | Master Out Slave In | 输出 | 主设备发送数据至从设备 |
| MISO | Master In Slave Out | 输入 | 从设备发送数据至主设备 |
| CS | Chip Select | 输出 | 片选信号,低电平有效,选中特定从设备 |
关键概念:SPI 是全双工协议,每个时钟周期内,主设备通过 MOSI 发送一位数据,同时从设备通过 MISO 返回一位数据。因此,一次传输总是同时完成发送和接收。
1.2 四线制时序基础
SPI 的时序围绕时钟信号(SCLK)展开。数据在时钟的上升沿或下降沿被采样,具体取决于工作模式。下图展示了 SPI 单字节传输的基本时序结构:
时序要点:
- CS 拉低后,从设备被选中,开始准备通信。
- SCLK 产生 8 个时钟周期,每个周期传输 1 位数据。
- MOSI 和 MISO 上的数据在采样点必须稳定有效。
- 传输完成后,CS 拉高,释放从设备。
1.3 四种工作模式:CPOL 与 CPHA
SPI 协议通过 CPOL(Clock Polarity,时钟极性) 和 CPHA(Clock Phase,时钟相位) 两个参数定义四种工作模式。这两个参数决定了时钟空闲电平以及数据采样/切换的边沿。
| 模式 | CPOL | CPHA | 时钟空闲电平 | 数据采样边沿 | 数据切换边沿 |
|---|---|---|---|---|---|
| 模式 0 | 0 | 0 | 低电平 | 上升沿 | 下降沿 |
| 模式 1 | 0 | 1 | 低电平 | 下降沿 | 上升沿 |
| 模式 2 | 1 | 0 | 高电平 | 下降沿 | 上升沿 |
| 模式 3 | 1 | 1 | 高电平 | 上升沿 | 下降沿 |
常见误区:许多开发者误以为模式 0 和模式 3 是"最常用"的模式,但实际上不同外设芯片可能要求不同的模式。驱动开发时必须查阅从设备数据手册,确认其支持的 SPI 模式,否则可能导致通信失败或数据错误。
1.4 四种模式时序对比
下图直观展示了四种模式下 SCLK 与数据采样点的关系: