2. SPI 协议基础:四线制、工作模式与全双工原理
SPI(Serial Peripheral Interface,串行外设接口)是一种同步、全双工、主从式的串行通信总线。在全志 T113 的 SPI 控制器驱动开发中,理解 SPI 协议的底层信号机制是正确配置中断触发条件、优化读写吞吐量的前提。本节从物理层信号、时钟极性/相位配置、以及全双工数据流三个维度展开。
2.1 SPI 四线制信号定义
标准 SPI 总线使用四条信号线完成主从设备之间的数据交换。下表列出了每条信号线的名称、方向与功能描述:
| 信号线 | 全称 | 方向(主→从) | 功能描述 |
|---|---|---|---|
| SCLK | Serial Clock | 主→从 | 由主设备产生的同步时钟,决定数据采样与跳变时刻 |
| MOSI | Master Out Slave In | 主→从 | 主设备发送数据、从设备接收数据 |
| MISO | Master In Slave Out | 从→主 | 从设备发送数据、主设备接收数据 |
| CS | Chip Select | 主→从 | 片选信号,低电平有效,选中目标从设备 |
驱动提示: 在全志 T113 的 SPI 控制器寄存器中,SCLK 频率由
SPI_CLK_CTL 寄存器中的分频系数决定。CS 信号的极性(高有效或低有效)可通过 SPI_CS_CTL 配置,务必与从设备数据手册匹配,否则通信将完全失败。
2.2 工作模式:CPOL 与 CPHA
SPI 协议通过时钟极性(CPOL)和时钟相位(CPHA)的组合定义四种工作模式。CPOL 决定 SCLK 空闲时的电平,CPHA 决定数据采样发生在 SCLK 的第一个还是第二个边沿。
| 模式 | CPOL | CPHA | 空闲时钟电平 | 数据采样边沿 | 数据输出边沿 |
|---|---|---|---|---|---|
| 模式 0 | 0 | 0 | 低电平 | 上升沿 | 下降沿 |
| 模式 1 | 0 | 1 | 低电平 | 下降沿 | 上升沿 |
| 模式 2 | 1 | 0 | 高电平 | 下降沿 | 上升沿 |
| 模式 3 | 1 | 1 | 高电平 | 上升沿 | 下降沿 |
常见错误: 全志 T113 的 SPI 控制器默认工作在模式 0。如果外接的 SPI Flash 或 ADC 芯片要求模式 3,必须在驱动初始化阶段通过
SPI_MODE_CTL 寄存器设置 CPOL=1、CPHA=1。模式不匹配会导致数据错位或 CRC 校验失败。
2.3 全双工通信原理
SPI 的全双工特性意味着主设备在发送数据的同时也在接收数据。每个时钟周期内,主设备通过 MOSI 线移出一位数据,同时从设备通过 MISO 线移入一位数据。这种对称结构使得 SPI 的读写操作在硬件层面是“成对”发生的。
性能关键点: 在全志 T113 的 SPI 驱动中,如果只需要读取从设备的数据(例如读取 Flash ID),主设备仍然必须通过 MOSI 发送“哑字节”(dummy byte)来产生时钟。驱动中通常使用
spi_write_then_read() 或直接操作 FIFO 完成这一过程。忽略哑字节会导致时钟缺失,从设备无法输出数据。
全双工通信的典型时序流程如下:
- 片选拉低: 主设备将 CS 信号置为低电平,通知从设备准备通信。
- 时钟启动: 主设备开始输出 SCLK 时钟信号,频率由 SPI 控制器分频配置决定。
- 数据移位: 每个 SCLK 周期,主设备移位寄存器将 MOSI 上的数据移出,同时从设备移位寄存器将 MISO 上的数据移入主设备接收缓冲区。
- 传输完成: 发送完指定字节数后,主设备停止 SCLK,并将 CS 拉高,结束本次传输。
2.4 驱动开发中的协议配置要点
在全志 T113 的 SPI 驱动中,协议相关的配置集中在以下几个寄存器或接口参数中:
- 时钟频率: 通过
SPI_CLK_CTL设置分频系数,典型值 12 MHz ~ 48 MHz,需根据从设备上限频率调整。 - 数据位宽: 支持 8 位、16 位、32 位模式,通过
SPI_MODE_CTL中的DATA_WIDTH字段配置。 - CS 控制: 支持硬件自动 CS 和软件手动 CS,中断驱动中通常使用硬件自动 CS 以减少 CPU 干预。
- FIFO 阈值: 触发中断的 FIFO 深度阈值,直接影响中断频率和吞吐量。