1. SPI基础:协议概述与四线制全双工通信

SPI(Serial Peripheral Interface,串行外设接口)由 Motorola 公司于 20 世纪 80 年代提出,是一种高速、全双工、同步的串行通信总线。在车载嵌入式系统中,SPI 广泛用于 MCU 与传感器(加速度计、陀螺仪)、ADC/DAC、数字电位器、CAN 控制器、外部 Flash 以及显示驱动芯片之间的短距离板级通信。

1.1 四线制信号定义与功能

标准 SPI 总线使用四条信号线完成主从设备之间的数据交换,每条线在通信过程中承担唯一且不可替代的角色:

信号线 全称 方向(主→从) 核心功能
SCLK Serial Clock 主→从 由主机产生,决定每一位数据的采样与切换时刻
MOSI Master Out Slave In 主→从 主机输出数据线,从机在该线上接收数据
MISO Master In Slave Out 从→主 从机输出数据线,主机在该线上接收数据
CS Chip Select 主→从 片选信号,低电平有效,选中特定从机开始通信
车载设计要点: 在车规级应用中,CS 信号通常需要额外的上拉电阻(4.7kΩ–10kΩ)以确保在 MCU 复位或未初始化期间从机不被误选。同时,SCLK 与 MOSI/MISO 之间的走线长度差应控制在 5mm 以内,以减少信号偏移(Skew)对高速时序的影响。

1.2 全双工通信原理

SPI 的全双工特性源于其独特的 移位寄存器对 架构。主机和从机内部各有一个相同位宽的移位寄存器(通常为 8 位或 16 位),通过 MOSI 和 MISO 两条独立的数据线连接成一个环形移位路径。

通信过程可分解为以下四个步骤:

  1. 片选激活: 主机将 CS 信号拉低,从机检测到片选有效后进入通信就绪状态。
  2. 时钟启动: 主机在 SCLK 线上产生连续的时钟脉冲,每个时钟周期完成一次数据交换。
  3. 数据移位: 在 SCLK 的每个有效边沿(上升沿或下降沿,由 CPOL/CPHA 决定),主机通过 MOSI 移出当前最高位,同时从机通过 MISO 移出自身寄存器的最高位。经过 8 个时钟周期后,主机的数据完全移入从机,从机的数据完全移入主机。
  4. 片选释放: 主机将 CS 拉高,结束本次通信事务。
关键理解: 全双工意味着“发送”与“接收”在同一个时钟周期内同时完成。主机发送一个字节的同时必然接收到一个字节——即使从机没有有效数据要返回,MISO 线上也会收到一个默认值(通常为 0x00 或 0xFF)。因此,SPI 的每次传输本质上是一次“交换”,而非单纯的“发送”或“接收”。
SPI 四线制全双工通信架构图 SPI 四线制全双工通信架构 SPI 主机 (MCU) 移位寄存器 [7:0] 发送/接收 SPI 从机 (外设) 移位寄存器 [7:0] 接收/发送 SCLK MOSI (主→从) MISO (从→主) CS (片选,低有效) 通信流程: ① 主机拉低 CS → 从机就绪 ② 主机产生 SCLK 脉冲 → 每个时钟周期同时交换 1 bit ③ 8 个时钟后完成 1 字节交换 → 主机拉高 CS 结束事务

1.3 数据交换的微观时序

为了更精确地理解全双工的数据流动,下面以一次 8 位传输为例,展示 SCLK、MOSI 和 MISO 在时间轴上的对应关系。假设 SPI 模式 0(CPOL=0, CPHA=0),即 SCLK 空闲为低,数据在上升沿采样。

SPI 8 位传输时序图(模式 0) SPI 8 位传输时序图(模式 0:CPOL=0, CPHA=0) SCLK 1 2 3 4 5 6 7 8 MOSI bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 MISO bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 ↑ 上升沿采样(模式 0)
车载时序风险提示: 在高速 SPI(≥10 MHz)下,MOSI 数据必须在 SCLK 采样沿之前至少满足 tsu(建立时间)并保持 th(保持时间)。车规 MCU 通常要求 tsu ≥ 5 ns、th ≥ 2 ns。若 PCB 走线过长或阻抗不匹配,可能导致采样错误,引发传感器数据跳变或 Flash 写入失败。

1.4 SPI 与 I2C 的初步对比

作为本课程的开篇,有必要将 SPI 与另一常见总线 I2C 进行横向对比,帮助学员建立选型直觉:

特性 SPI I2C
信号线数量 4 线(SCLK, MOSI, MISO, CS) 2 线(SCL, SDA)
通信模式 全双工 半双工
从机选择 独立 CS 线(硬件片选) 地址寻址(7 位或 10 位)
典型速率 1–50 MHz 100 kHz–1 MHz(标准/快速模式)
总线仲裁 不支持(一主多从需独立 CS) 支持多主机仲裁
车载典型应用 ADC、DAC、Flash、传感器、显示驱动 温度传感器、EEPROM、PMIC 配置
选型建议: 在车载项目中,若外设需要高速连续数据流(如加速度计以 10 kHz 输出 16 位数据),优先选择 SPI;若仅需低速、间歇性配置寄存器(如 PMIC 电压设置),I2C 可节省 GPIO 引脚并简化布线。