SPI 硬件基础:四线制与时钟模式详解
SPI(Serial Peripheral Interface,串行外设接口)是一种同步、全双工、主从架构的串行通信总线。在嵌入式 Linux 设备树配置中,理解 SPI 的硬件信号定义和时钟模式是正确编写节点属性的前提。本节从物理层信号线、时钟极性与相位两个核心维度展开。
2.1 SPI 四线制信号定义
标准 SPI 总线使用四条信号线完成主设备与从设备之间的数据交换。下表列出每条信号线的名称、方向与功能:
| 信号线 | 全称 | 方向(主设备视角) | 功能描述 |
|---|---|---|---|
| SCLK | Serial Clock | 输出 | 由主设备产生的同步时钟信号,决定数据传输速率 |
| MOSI | Master Out Slave In | 输出 | 主设备发送数据到从设备的数据线 |
| MISO | Master In Slave Out | 输入 | 从设备发送数据到主设备的数据线 |
| CS | Chip Select | 输出 | 片选信号,低电平有效,用于选中特定的从设备 |
关键概念: SPI 是全双工通信,在每个时钟周期内,主设备通过 MOSI 发送一位数据,同时从设备通过 MISO 返回一位数据。CS 线决定了总线上哪个从设备参与本次通信,未被选中的从设备必须将 MISO 置为高阻态。
下图展示了标准 SPI 四线制连接拓扑:
2.2 SPI 时钟极性与相位(CPOL / CPHA)
SPI 协议通过 时钟极性(CPOL) 和 时钟相位(CPHA) 两个参数定义数据采样与切换的时序关系。这两个参数共同决定了 SPI 的四种工作模式。
2.2.1 CPOL:时钟极性
- CPOL = 0:SCLK 空闲状态为低电平(0)。
- CPOL = 1:SCLK 空闲状态为高电平(1)。
2.2.2 CPHA:时钟相位
- CPHA = 0:数据在 SCLK 的第一个边沿(上升沿或下降沿)被采样,第二个边沿切换数据。
- CPHA = 1:数据在 SCLK 的第二个边沿被采样,第一个边沿切换数据。
记忆口诀: CPOL 决定空闲电平,CPHA 决定采样边沿是第一个还是第二个。CPHA=0 时采样发生在第一个边沿,CPHA=1 时采样发生在第二个边沿。
2.3 SPI 四种模式详解
将 CPOL 与 CPHA 组合,得到 SPI 的四种标准模式。下表列出每种模式的参数组合与典型应用:
| 模式 | CPOL | CPHA | 空闲电平 | 采样边沿 | 数据切换边沿 | 常见设备 |
|---|---|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低 | 上升沿(第一个边沿) | 下降沿 | 多数 SPI Flash、SD 卡 |
| Mode 1 | 0 | 1 | 低 | 下降沿(第二个边沿) | 上升沿 | 部分 ADC 芯片 |
| Mode 2 | 1 | 0 | 高 | 下降沿(第一个边沿) | 上升沿 | 某些传感器 |
| Mode 3 | 1 | 1 | 高 | 上升沿(第二个边沿) | 下降沿 | 部分 EEPROM、LCD 驱动 |
下图以波形图形式展示四种模式的时序差异:
2.4 设备树中的 SPI 模式配置
在设备树中,SPI 从设备节点的 spi-max-frequency 属性定义通信速率,而模式通过 spi-cpol 和 spi-cpha 属性指定。以下是一个典型的 SPI 从设备节点配置示例:
&spi1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi1_default>;
temperature_sensor: max31865@0 {
compatible = "maxim,max31865";
reg = <0>; /* CS 线索引,对应硬件片选 0 */
spi-max-frequency = <5000000>; /* 5 MHz */
spi-cpol; /* CPOL = 1 */
spi-cpha; /* CPHA = 1 */
/* 等效于 SPI Mode 3 */
};
};
常见错误: 如果设备树中未显式声明
spi-cpol 和 spi-cpha,Linux SPI 子系统默认使用 Mode 0(CPOL=0, CPHA=0)。若从设备手册要求其他模式,必须显式添加这两个属性,否则通信将失败。
2.5 模式匹配检查清单
在编写设备树 SPI 节点前,建议按以下步骤确认模式配置:
- 查阅从设备数据手册,找到 SPI 时序章节,确认 CPOL 和 CPHA 的推荐值。
- 确认主控制器支持:大多数 SPI 控制器支持所有四种模式,但部分老式控制器可能只支持 Mode 0 和 Mode 3。
- 在设备树中显式声明:即使默认模式匹配,也建议显式添加
spi-cpol和spi-cpha以提高代码可读性。 - 验证时序:使用逻辑分析仪或示波器抓取 SCLK 和 MOSI/MISO 波形,确认采样边沿与设备手册一致。
下图总结了 SPI 模式选择与设备树属性的对应关系:
2.6 本节要点总结
- SPI 四线制包括 SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。
- CPOL 定义时钟空闲电平,CPHA 定义数据采样发生在第一个还是第二个边沿。
- 四种模式(Mode 0~3)由 CPOL 和 CPHA 组合决定,Mode 0 是最常用的默认模式。
- 设备树中使用
spi-cpol和spi-cpha属性指定模式,缺失时默认为 Mode 0。 - 实际开发中务必核对从设备数据手册,并通过逻辑分析仪验证时序。