1. SPI协议基础:SPI总线物理层、四线制时序与四种工作模式详解

1.1 SPI总线物理层概述

SPI(Serial Peripheral Interface,串行外设接口)是一种全双工、同步、主从架构的串行通信总线,由Motorola公司在20世纪80年代中期推出。在嵌入式Linux系统中,SPI广泛用于连接传感器、ADC/DAC、LCD控制器、闪存、RF模块等外设。

物理层采用四线制接口,所有信号线均为数字电平信号(通常为3.3V或1.8V逻辑电平):

信号线 名称 方向(主→从) 功能描述
SCLK 串行时钟 主→从 由主设备产生,决定数据传输速率和同步节拍
MOSI 主出从入 主→从 主设备发送数据到从设备
MISO 主入从出 从→主 从设备发送数据到主设备
CS 片选 主→从 低电平有效,选中特定从设备进行通信
关键概念:SPI是全双工协议——在每个时钟周期,主设备通过MOSI发送一位数据,同时从设备通过MISO返回一位数据。因此一次传输的字节数由主设备决定,从设备不能主动发起传输。

1.2 四线制时序详解

SPI的时序以SCLK边沿为基准,数据在时钟的上升沿或下降沿被采样/移出。下图展示了SPI单字节传输的典型时序关系:

SPI四线制单字节传输时序(模式0:CPOL=0, CPHA=0) SCLK ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 MOSI bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 MISO bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 CS 低电平有效:从设备被选中 数据在SCLK上升沿被主设备采样,在SCLK下降沿由从设备移出(模式0)
时序要点:
  • CS拉低:主设备将CS置为低电平,通知从设备准备接收/发送数据。
  • SCLK产生:主设备按设定频率产生时钟脉冲,每个脉冲传输1位数据。
  • 数据同步:MOSI和MISO上的数据在SCLK的特定边沿被采样(取决于CPHA)。
  • CS拉高:传输完成后CS拉高,从设备释放总线。

1.3 四种工作模式(CPOL/CPHA)详解

SPI协议通过两个参数定义时钟极性和相位,组合出四种工作模式。主设备和从设备必须使用相同的模式才能正常通信。

模式 CPOL CPHA 时钟空闲电平 数据采样边沿 数据移出边沿
模式0 0 0 低电平 上升沿 下降沿
模式1 0 1 低电平 下降沿 上升沿
模式2 1 0 高电平 下降沿 上升沿
模式3 1 1 高电平 上升沿 下降沿
常见错误:在嵌入式Linux驱动开发中,设备树中配置的spi-cpol和spi-cpha必须与从设备数据手册严格一致。模式不匹配会导致数据错位或通信完全失败,且逻辑分析仪上波形看起来“有信号”但数据全是乱码。

1.4 四种模式波形对比

下图直观对比了四种模式下SCLK与数据采样的关系:

SPI四种工作模式波形对比 模式0 (CPOL=0, CPHA=0) 空闲低,上升沿采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 ↑采样 模式1 (CPOL=0, CPHA=1) 空闲低,下降沿采样 ↓采样 ↓采样 ↓采样 ↓采样 ↓采样 ↓采样 ↓采样 模式2 (CPOL=1, CPHA=0) 空闲高,下降沿采样 ← 上一章 📖 返回目录 下一章 →