3. SPI协议基础:SPI总线物理层、MOSI/MISO/SCLK/CS信号、四种工作模式(CPOL/CPHA)

3.1 SPI总线物理层结构

SPI(Serial Peripheral Interface,串行外设接口)是一种全双工、同步、主从架构的串行通信总线。物理层由四条基本信号线构成,所有设备共享时钟与数据线,通过片选信号实现设备寻址。

核心特征: 全双工通信、主设备产生时钟、无设备地址(通过硬件片选)、传输速率可达数十MHz。
SPI总线物理层连接结构 主设备 (Master) SCLK 输出 MOSI 输出 MISO 输入 CS 输出 从设备 1 (Slave 1) SCLK 输入 MOSI 输入 MISO 输出 CS1 输入 从设备 2 CS2 输入 SCLK MOSI MISO CS1 CS2 信号线说明 • SCLK:时钟线,主设备驱动 • MOSI:主出从入数据线 • MISO:主入从出数据线 • CS:片选线,低电平有效

3.2 四线信号详解

信号名称 全称 方向 功能描述
SCLK Serial Clock 主→从 由主设备产生,决定数据传输速率。每个时钟周期传输1位数据。
MOSI Master Out Slave In 主→从 主设备发送数据至从设备的数据线。
MISO Master In Slave Out 从→主 从设备发送数据至主设备的数据线。
CS Chip Select 主→从 片选信号,低电平有效。主设备通过拉低目标从设备的CS引脚来选中该设备。
设计要点: 在S32K3平台上,CS信号通常由硬件自动控制(SPI外设的PCS引脚),也可配置为GPIO软件控制。硬件控制可减少CPU开销,但软件控制提供更大的灵活性,适用于多从设备动态切换场景。

3.3 SPI四种工作模式(CPOL/CPHA)

SPI协议通过时钟极性(CPOL)和时钟相位(CPHA)的组合定义四种工作模式。CPOL决定时钟空闲电平,CPHA决定数据采样时刻。

模式 CPOL CPHA 空闲时钟电平 数据采样边沿 数据输出边沿
模式0 0 0 低电平 上升沿 下降沿
模式1 0 1 低电平 下降沿 上升沿
模式2 1 0 高电平 下降沿 上升沿
模式3 1 1 高电平 上升沿 下降沿
SPI四种工作模式时序对比 模式0 (CPOL=0, CPHA=0) SCLK ↑采样 ↑采样 ↑采样 模式1 (CPOL=0, CPHA=1) SCLK ↓采样 ↓采样 ↓采样 模式2 (CPOL=1, CPHA=0) SCLK ↓采样 ↓采样 ↓采样 模式3 (CPOL=1, CPHA=1) SCLK ↑采样 ↑采样 ↑采样 图例 ↑ 上升沿采样/输出 ↓ 下降沿采样/输出 空闲电平:模式0/1为低,模式2/3为高

3.4 模式选择与S32K3配置

在S32K3平台上,SPI模式通过寄存器CTARn(Clock and Transfer Attributes Register)中的CPOL和CPHA位进行配置。主设备与从设备必须使用相同的模式才能正常通信。

常见错误: 主从设备模式不匹配是SPI通信失败的首要原因。调试时务必使用示波器或逻辑分析仪确认SCLK空闲电平与数据采样边沿是否符合预期。

S32K3 SPI模式配置示例(LPSPI外设)

/* S32K3 LPSPI模式配置代码片段 */
#include "lpspi_driver.h"

lpspi_user_config_t spiConfig;

/* 配置为模式0:CPOL=0, CPHA=0 */
spiConfig.clockPolarity  = LPSPI_CLOCK_POLARITY_ACTIVE_HIGH;  /* CPOL=0 */
spiConfig.clockPhase     = LPSPI_CLOCK_PHASE_FIRST_EDGE;      /* CPHA=0 */
spiConfig.dataWidth      = LPSPI_DATA_WIDTH_8_BIT;
spiConfig.baudRate       = 1000000;  /* 1 MHz */

/* 初始化LPSPI外设 */
LPSPI_DRV_MasterInit(INST_LPSPI1, &spiConfig, NULL);

3.5 SPI通信流程

  1. 片选阶段:主设备将目标从设备的CS引脚拉低,选中该从设备。
  2. 时钟启动:主设备开始产生SCLK时钟信号,频率由CTAR寄存器配置。
  3. 数据移位:每个时钟周期,主设备通过MOSI发送1位数据,同时从设备通过MISO发送1位数据,实现全双工传输。
  4. 传输完成:主设备停止SCLK时钟,将CS引脚拉高,释放从设备。
SPI单次传输流程 CS拉低 产生SCLK 数据移位 CS拉高 注意:CS拉低与拉高之间为一次完整传输,可包含多个字节(连续时钟) 全双工特性:每个时钟周期同时完成1位发送和1位接收

3.6 SPI与I2C物理层对比

对比项 SPI I2C
信号线数量 4线(SCLK, MOSI, MISO, CS) 2线(SCL, SDA)
通信方式 全双工 半双工
设备寻址 硬件片选(CS) 软件地址(7位/10位)
最大速率 数十MHz(S32K3可达20MHz+) 标准100kHz/快速400kHz/高速3.4MHz
从设备数量 受限于主设备CS引脚数量 理论上最多127个(7位地址)
总线冲突检测 无(需软件处理) 内置仲裁与冲突检测
选型建议: 在S32K3平台中,若外设需要高速、全双工通信(如ADC、DAC、显示驱动),优先选择SPI;若需要多设备挂载、线束简单、支持多主通信(如传感器网络、EEPROM),优先选择I2C。