SPI 与 QSPI 通信详解:时序、模式、速度与实际应用
SPI 与 QSPI 通信详解:时序、模式、速度与实际应用
文章目录
SPI(Serial Peripheral Interface)是一种常见的同步串行通信接口,具有结构简单、通信速度高、硬件开销低等特点。
随着外部 Flash、ADC、传感器等设备对通信带宽的要求不断提高,在传统 SPI 基础上又发展出了 Dual SPI、Quad SPI(QSPI)等多线传输方式。
本文主要介绍 SPI 和 QSPI 的硬件结构、通信时序、工作模式、速度以及 MCU/DSP 中的实际应用。
一、SPI 基本结构
SPI 通常采用主从(Master/Slave)结构,最基本的四根信号线为:
| 信号 | 全称 | 方向 |
|---|---|---|
| SCLK | Serial Clock | Master → Slave |
| MOSI | Master Out Slave In | Master → Slave |
| MISO | Master In Slave Out | Slave → Master |
| CS/SS | Chip Select | Master → Slave |
典型连接:

SPI 最大的特点是没有统一的数据帧协议。
SPI 控制器只负责产生时钟和收发数据,具体的:
- Command
- Address
- Data
- Dummy Cycle
- CRC
等内容由具体芯片自行定义。
因此不同 SPI 外设虽然都使用 SPI,但通信协议可能完全不同。
二、SPI 通信时序与 CPOL、CPHA
SPI 最核心的配置参数是:
CPOL(Clock Polarity)和 CPHA(Clock Phase)
两者组合形成 4 种 SPI Mode。
| SPI Mode | CPOL | CPHA |
|---|---|---|
| Mode 0 | 0 | 0 |
| Mode 1 | 0 | 1 |
| Mode 2 | 1 | 0 |
| Mode 3 | 1 | 1 |
1. CPOL
CPOL 决定 SCLK 空闲时的电平。
CPOL = 0
SCLK 空闲状态 = Low
CPOL = 1
SCLK 空闲状态 = High
2. CPHA
CPHA 决定数据在哪个时钟边沿采样。
以 Mode 0 为例:
CPOL = 0
CPHA = 0
┌───┐ ┌───┐
SCLK ──┘ └───┘ └──
↑ ↑
采样 采样
因此配置 SPI 时,Master 和 Slave 的 CPOL/CPHA 必须匹配。
例如 MCP2518FD 支持 SPI Mode 0 和 Mode 3。(Microchip)
三、SPI 的数据传输方式与多设备连接
SPI 通常采用全双工传输:
MOSI:Master → Slave
MISO:Slave → Master
因此一个 SCLK 周期内,可以同时完成:
Master ──1 bit──→ Slave
Master ←─1 bit─── Slave
SPI 的数据位宽也不一定固定为 8 bit。
常见配置包括:
8 bit
16 bit
32 bit
具体取决于 MCU SPI 控制器和外设要求。
多个 Slave
多个 SPI 从设备可以共用:
SCLK
MOSI
MISO
但每个设备需要独立的 CS:
MCU
│
┌──────────┼──────────┐
│ │ │
SCLK MOSI MISO
│ │ │
┌────┴────┐ ┌───┴────┐ ┌───┴────┐
│ │ │ │ │ │
CS0 CS1 ... ...
│ │
↓ ↓
Device0 Device1
因此:
一个 SPI 控制器可以连接多个 SPI 外设,但多个设备共享同一个 SPI 带宽。
四、SPI 通信速度与高速 SPI
SPI 本身没有严格意义上的“高速 SPI”协议。
通常所谓高速 SPI,主要是指:
使用较高 SCLK 频率进行 SPI 数据传输。
理论数据率可以简单计算:
理论数据率 = SPI Clock × 每个时钟传输的 bit 数
例如普通单线 SPI:
| SPI Clock | 理论数据率 | 理论吞吐量 |
|---|---|---|
| 5 MHz | 5 Mbps | 0.625 MB/s |
| 10 MHz | 10 Mbps | 1.25 MB/s |
| 20 MHz | 20 Mbps | 2.5 MB/s |
| 40 MHz | 40 Mbps | 5 MB/s |
| 80 MHz | 80 Mbps | 10 MB/s |
| 100 MHz | 100 Mbps | 12.5 MB/s |
注意:
理论吞吐量 ≠ 实际有效吞吐量。
因为实际通信还存在:
CS
Command
Address
Dummy Cycle
Data
软件处理
等开销。
不同 MCU/DSP 的 SPI 速度
不同 MCU 的 SPI 外设速度差别很大,不能仅根据 CPU 主频判断 SPI 速度。
例如:
TI TMS320F280049
属于 C2000 实时控制 MCU,CPU 主频 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 SPI
DMA 可以避免 CPU:
读取1字节
↓
写入SPI
↓
等待
↓
读取下一字节
而是直接:
RAM
↓
DMA
↓
SPI
↓
连续发送
对于高速、大数据量 SPI 通信尤其重要。
六、QSPI 与 SPI 的区别
QSPI 一般指:
Quad SPI
它在传统 SPI 基础上增加数据线数量,使一个时钟周期可以传输多个 bit。
传统 SPI:
MOSI ──→
MISO ←──
1 bit / clock
Quad SPI:
IO0 ──↔
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 Flash:
CS ────────────────────────────────
CLK ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
└─┘ └─┘ └─┘ └─┘ └─┘
IO0~3
Command → Address → Dummy → Data
↓↓↓↓
4 bit/clock
QSPI 最大的应用场景就是:
外部 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 应用 |
|---|---|---|
| TMS320F280049 | TI C2000 MCU | 电机控制、传感器、外部控制器 |
| STM32G4 | Cortex-M4 MCU | ADC、传感器、外部 Flash |
| STM32H7 | Cortex-M7 MCU | 高速外设、传感器、存储 |
| MCP2518FD | CAN FD Controller | 通过 SPI 扩展 CAN FD |
| AD/ADI 高速 ADC | ADC | MCU/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 信号完整性以及从设备本身的最高通信频率。
更多推荐

所有评论(0)