全志T113 SPI Flash驱动适配与读写性能调优 - 第3节
3.1 SPI 总线四线制信号定义
SPI(Serial Peripheral Interface,串行外设接口)是一种同步、全双工、主从式的串行通信总线。在物理层上,标准 SPI 总线由 四根信号线 构成,这也是嵌入式开发中最常见的接口形态。理解这四根线的功能与连接关系,是后续驱动开发和性能调优的基础。
3.1.1 四线功能与连接拓扑
| 信号线名称 | 缩写 | 方向(主→从) | 功能描述 |
|---|---|---|---|
| 串行时钟 | SCK | 主→从 | 由主设备产生,决定数据传输的速率和时序 |
| 主出从入 | MOSI | 主→从 | 主设备发送数据给从设备 |
| 主入从出 | MISO | 从→主 | 从设备发送数据给主设备 |
| 片选 | CS | 主→从 | 低电平有效,主设备选中特定的从设备进行通信 |
在典型的 SPI 总线拓扑中,主设备(如全志 T113 的 SPI 控制器)的 SCK、MOSI、CS 引脚连接到所有从设备的对应引脚,而每个从设备的 MISO 引脚则通过三态输出或独立引脚连接到主设备的 MISO 上。当 CS 为高电平时,从设备的 MISO 输出呈高阻态,避免总线冲突。
3.2 时钟极性(CPOL)与时钟相位(CPHA)
SPI 协议没有固定的数据采样标准,而是通过 CPOL 和 CPHA 两个参数来定义时钟空闲状态和数据采样时刻。这两个参数共同决定了 SPI 的四种工作模式(Mode 0 ~ Mode 3)。在全志 T113 的 SPI 控制器中,通过寄存器 SPI_CTL 的 CPOL 和 CPHA 位进行配置。
3.2.1 CPOL:时钟极性
CPOL 定义了 SCK 在空闲状态(即 CS 为高电平、无数据传输时)的电平。
- CPOL = 0:空闲时 SCK 为低电平(0)。
- CPOL = 1:空闲时 SCK 为高电平(1)。
3.2.2 CPHA:时钟相位
CPHA 定义了数据采样和切换发生在 SCK 的哪个时钟边沿。
- CPHA = 0:在 SCK 的第一个边沿(上升沿或下降沿,取决于 CPOL)采样数据,在第二个边沿切换数据。
- CPHA = 1:在 SCK 的第二个边沿采样数据,在第一个边沿切换数据。
3.2.3 四种工作模式对照表
| 模式 | CPOL | CPHA | 空闲 SCK 电平 | 数据采样边沿 | 数据切换边沿 |
|---|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低电平 | 上升沿 | 下降沿 |
| Mode 1 | 0 | 1 | 低电平 | 下降沿 | 上升沿 |
| Mode 2 | 1 | 0 | 高电平 | 下降沿 | 上升沿 |
| Mode 3 | 1 | 1 | 高电平 | 上升沿 | 下降沿 |
在全志 T113 平台上,SPI Flash 通常默认工作在 Mode 0 或 Mode 3。驱动开发时需要查阅 Flash 数据手册确认支持的 SPI 模式,并在控制器初始化时正确配置。
3.3 全双工通信模式
SPI 最显著的特性之一是 全双工(Full-Duplex)通信。在一个完整的 SPI 时钟周期内,主设备通过 MOSI 发送数据的同时,从设备通过 MISO 发送数据。这意味着每次数据传输都包含一次双向交换。
3.3.1 全双工通信机制
在 SPI 总线中,数据以 移位寄存器 的方式工作。主设备和从设备内部各有一个 8 位(或更多位)的移位寄存器。当 SCK 产生 8 个时钟脉冲后,主设备移位寄存器中的 8 位数据通过 MOSI 移入从设备,同时从设备移位寄存器中的 8 位数据通过 MISO 移入主设备。因此,一次完整的 SPI 传输总是同时完成发送和接收。
3.3.2 全双工与半双工对比
| 特性 | SPI(全双工) | I²C(半双工) | UART(全双工) |
|---|---|---|---|
| 数据方向 | 同时双向 | 分时双向 | 同时双向 |
| 时钟源 | 主设备提供 | 主设备提供 | 双方独立时钟 |
| 线数 | 4 线(标准) | 2 线(SDA+SCL) | 2 线(TX+RX) |
| 传输效率 | 高(无总线仲裁) | 中(需应答位) | 高(异步) |
| 典型速率 | 数十 MHz | 数百 KHz ~ 数 MHz | 数 Mbps |
3.3.3 全双工模式下的数据流
下图展示了 SPI 全双工通信中一个字节的传输过程。主设备将 tx_buf[0] 通过 MOSI 发出,同时从设备将 rx_buf[0] 通过 MISO 返回。8 个 SCK 时钟周期后,主设备收到从设备的数据,从设备收到主设备的数据。
3.4 本章小结与驱动开发要点
- 四线制信号:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。CS 低电平有效,MISO 通过高阻态避免总线冲突。
- CPOL/CPHA 配置:决定了 SPI 的工作模式。全志 T113 的 SPI 控制器通过
SPI_CTL寄存器配置。SPI Flash 通常使用 Mode 0 或 Mode 3。 - 全双工特性:每次传输同时完成发送和接收。驱动中 tx 和 rx 缓冲区必须成对存在,即使不需要接收数据也要提供虚拟缓冲区。
- 性能影响:SPI 模式的选择会影响信号建立时间和保持时间,进而影响最高稳定时钟频率。在后续性能调优章节中,我们会通过调整 CPOL/CPHA 和时钟分频来优化读写吞吐量。