ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SPI 与 QSPI 通信详解:时序、模式、速度与实际应用

SPI 与 QSPI 通信详解:时序、模式、速度与实际应用 SPI 与 QSPI 通信详解时序、模式、速度与实际应用文章目录SPI 与 QSPI 通信详解时序、模式、速度与实际应用一、SPI 基本结构二、SPI 通信时序与 CPOL、CPHA1. CPOL2. CPHA三、SPI 的数据传输方式与多设备连接多个 Slave四、SPI 通信速度与高速 SPI不同 MCU/DSP 的 SPI 速度五、SPI 高速通信时需要注意什么1. 信号完整性2. SPI 时钟不等于有效带宽3. DMA六、QSPI 与 SPI 的区别QSPI 的典型工作过程七、SPI/QSPI 实际应用与芯片举例SPI 常见应用QSPI 常见应用最后需要特别注意总结SPISerial Peripheral Interface是一种常见的同步串行通信接口具有结构简单、通信速度高、硬件开销低等特点。随着外部 Flash、ADC、传感器等设备对通信带宽的要求不断提高在传统 SPI 基础上又发展出了 Dual SPI、Quad SPIQSPI等多线传输方式。本文主要介绍 SPI 和 QSPI 的硬件结构、通信时序、工作模式、速度以及 MCU/DSP 中的实际应用。一、SPI 基本结构SPI 通常采用主从Master/Slave结构最基本的四根信号线为信号全称方向SCLKSerial ClockMaster → SlaveMOSIMaster Out Slave InMaster → SlaveMISOMaster In Slave OutSlave → MasterCS/SSChip SelectMaster → Slave典型连接SPI 最大的特点是没有统一的数据帧协议。SPI 控制器只负责产生时钟和收发数据具体的CommandAddressDataDummy CycleCRC等内容由具体芯片自行定义。因此不同 SPI 外设虽然都使用 SPI但通信协议可能完全不同。二、SPI 通信时序与 CPOL、CPHASPI 最核心的配置参数是CPOLClock Polarity和 CPHAClock Phase两者组合形成 4 种 SPI Mode。SPI ModeCPOLCPHAMode 000Mode 101Mode 210Mode 3111. CPOLCPOL 决定 SCLK 空闲时的电平。CPOL 0 SCLK 空闲状态 Low CPOL 1 SCLK 空闲状态 High2. CPHACPHA 决定数据在哪个时钟边沿采样。以 Mode 0 为例CPOL 0 CPHA 0 ┌───┐ ┌───┐ SCLK ──┘ └───┘ └── ↑ ↑ 采样 采样因此配置 SPI 时Master 和 Slave 的 CPOL/CPHA 必须匹配。例如 MCP2518FD 支持 SPI Mode 0 和 Mode 3。(Microchip)三、SPI 的数据传输方式与多设备连接SPI 通常采用全双工传输MOSIMaster → Slave MISOSlave → Master因此一个 SCLK 周期内可以同时完成Master ──1 bit──→ Slave Master ←─1 bit─── SlaveSPI 的数据位宽也不一定固定为 8 bit。常见配置包括8 bit 16 bit 32 bit具体取决于 MCU SPI 控制器和外设要求。多个 Slave多个 SPI 从设备可以共用SCLK MOSI MISO但每个设备需要独立的 CSMCU │ ┌──────────┼──────────┐ │ │ │ SCLK MOSI MISO │ │ │ ┌────┴────┐ ┌───┴────┐ ┌───┴────┐ │ │ │ │ │ │ CS0 CS1 ... ... │ │ ↓ ↓ Device0 Device1因此一个 SPI 控制器可以连接多个 SPI 外设但多个设备共享同一个 SPI 带宽。四、SPI 通信速度与高速 SPISPI 本身没有严格意义上的“高速 SPI”协议。通常所谓高速 SPI主要是指使用较高 SCLK 频率进行 SPI 数据传输。理论数据率可以简单计算理论数据率 SPI Clock × 每个时钟传输的 bit 数例如普通单线 SPISPI Clock理论数据率理论吞吐量5 MHz5 Mbps0.625 MB/s10 MHz10 Mbps1.25 MB/s20 MHz20 Mbps2.5 MB/s40 MHz40 Mbps5 MB/s80 MHz80 Mbps10 MB/s100 MHz100 Mbps12.5 MB/s注意理论吞吐量 ≠ 实际有效吞吐量。因为实际通信还存在CS Command Address Dummy Cycle Data 软件处理等开销。不同 MCU/DSP 的 SPI 速度不同 MCU 的 SPI 外设速度差别很大不能仅根据 CPU 主频判断 SPI 速度。例如TI TMS320F280049属于 C2000 实时控制 MCUCPU 主频 100 MHz具有 2 路 SPI 和 6 路 DMA。(Texas Instruments)它适合电机控制、数字电源以及实时控制系统中的 SPI 外设通信。而一些高性能 Cortex-M MCU 的 SPI 可以达到更高的时钟频率。例如 STM32H7 系列的 SPI 在特定配置和器件条件下可以达到百 MHz 级别STM32H743 的 Quad-SPI 存储接口最高可达 133 MHz。(STMicroelectronics Community)因此实际选型时应该重点查看SPI Peripheral Maximum Clock Frequency而不是只看 MCU 的 CPU Frequency。五、SPI 高速通信时需要注意什么当 SPI 从几 MHz 提升到几十甚至上百 MHz 后问题就不再只是软件配置。1. 信号完整性高速 SPI 需要关注PCB 走线长度阻抗走线间距上升/下降时间信号串扰电源完整性例如 100 MHz SPI 的时钟周期只有T 1 / 100 MHz 10 ns此时 PCB 走线已经不能简单看成“理想导线”。2. SPI 时钟不等于有效带宽例如SPI 40 MHz理论40 Mbps 5 MB/s但如果一次操作需要Command Address Dummy Data那么真正用于 Payload 的带宽会下降。因此高速 SPI 设计应该尽量减少单次访问开销并使用连续数据传输。3. DMA高速 SPI 通常需要 DMA 配合。典型结构MCU │ SPI DMA │ ┌──────┴──────┐ ↓ ↓ RAM SPIDMA 可以避免 CPU读取1字节 ↓ 写入SPI ↓ 等待 ↓ 读取下一字节而是直接RAM ↓ DMA ↓ SPI ↓ 连续发送对于高速、大数据量 SPI 通信尤其重要。六、QSPI 与 SPI 的区别QSPI 一般指Quad SPI它在传统 SPI 基础上增加数据线数量使一个时钟周期可以传输多个 bit。传统 SPIMOSI ──→ MISO ←── 1 bit / clockQuad SPIIO0 ──↔ IO1 ──↔ IO2 ──↔ IO3 ──↔ 4 bit / clock因此在相同 SCLK 下SPI 1 bit / clock Dual SPI 2 bit / clock Quad SPI 4 bit / clock例如20 MHz SPI 普通 SPI 20 Mbps Quad SPI 20 × 4 80 Mbps这也是 QSPI 能够实现更高吞吐量的核心原因。QSPI 的典型工作过程QSPI 通常不是简单地把 MOSI/MISO 变成 4 根线而是按照外部 Flash 的协议完成Command ↓ Address ↓ Dummy Cycle ↓ Data例如读取 Quad SPI FlashCS ──────────────────────────────── CLK ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ └─┘ └─┘ └─┘ └─┘ └─┘ IO0~3 Command → Address → Dummy → Data ↓↓↓↓ 4 bit/clockQSPI 最大的应用场景就是外部 NOR Flash 高速访问。很多 MCU 还支持 Memory-Mapped Mode使外部 Flash 可以映射到 MCU 地址空间MCU │ QSPI │ ↓ External Flash │ └── Memory Mapped ↓ MCU直接读取这对于大容量程序存储字库图片AI 模型GUI 资源等应用非常有用。ST 的 STM32H743 就集成了双模式 Quad-SPI 存储接口最高可达 133 MHz。(STMicroelectronics)七、SPI/QSPI 实际应用与芯片举例SPI 和 QSPI 的应用方向有所区别。SPI 常见应用芯片/系列类型SPI 应用TMS320F280049TI C2000 MCU电机控制、传感器、外部控制器STM32G4Cortex-M4 MCUADC、传感器、外部 FlashSTM32H7Cortex-M7 MCU高速外设、传感器、存储MCP2518FDCAN FD Controller通过 SPI 扩展 CAN FDAD/ADI 高速 ADCADCMCU/DSP 与 ADC 数据交换其中 MCP2518FD 的 SPI 接口最高为20 MHz并支持 SPI Mode 0 和 Mode 3。(Microchip)QSPI 常见应用QSPI 最典型的应用是MCU 外部 NOR Flash例如STM32H743 │ QSPI │ ↓ QSPI NOR Flash │ └── 程序 / 字库 / 图片 / 数据STM32H743 的 Quad-SPI 接口最高可达到133 MHz。(STMicroelectronics)此外NXP i.MX RT 系列还采用FlexSPI属于更加灵活的高速串行存储接口可用于连接 Quad/Octal SPI Flash。最后需要特别注意不是所有标有“SPI”的高速接口都能直接当作 QSPI 使用。例如MCU QSPI × MCP2518FD就不能因为 QSPI 有 4 根数据线就直接把 MCP2518FD 当成 Quad SPI 设备连接。MCP2518FD 的主机接口仍然是传统 SPI最高 20 MHz。(Microchip)因此SPI、QSPI、OSPI 虽然都属于串行接口但是否兼容必须看 Master 和 Slave 双方支持的具体协议和时序。总结SPI 是一种简单、通用的同步串行接口其性能主要取决于SCLK 频率 数据位宽 传输模式 DMA 外设协议开销。QSPI 则通过多条数据线提高单个时钟周期的数据传输量主要用于高速外部 Flash 和存储器访问。可以简单理解为SPI │ ├── 通用外设通信 ├── 传感器 ├── ADC/DAC ├── CAN Controller └── 低/中高速数据交换 QSPI │ └── 高速外部存储 ├── NOR Flash ├── 程序代码 ├── GUI资源 └── 大容量数据对于实际工程设计不能只比较 SPI/QSPI 的标称 MHz还需要综合考虑时序、数据线数量、协议开销、DMA、FIFO、PCB 信号完整性以及从设备本身的最高通信频率。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进