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

SPI(Serial Peripheral Interface)是一种常见的同步串行通信接口,具有结构简单、通信速度高、硬件开销低等特点。

随着外部 Flash、ADC、传感器等设备对通信带宽的要求不断提高,在传统 SPI 基础上又发展出了 Dual SPI、Quad SPI(QSPI)等多线传输方式。

本文主要介绍 SPI 和 QSPI 的硬件结构、通信时序、工作模式、速度以及 MCU/DSP 中的实际应用


一、SPI 基本结构

SPI 通常采用主从(Master/Slave)结构,最基本的四根信号线为:

信号全称方向
SCLKSerial ClockMaster → Slave
MOSIMaster Out Slave InMaster → Slave
MISOMaster In Slave OutSlave → Master
CS/SSChip SelectMaster → 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 ModeCPOLCPHA
Mode 000
Mode 101
Mode 210
Mode 311

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 MHz5 Mbps0.625 MB/s
10 MHz10 Mbps1.25 MB/s
20 MHz20 Mbps2.5 MB/s
40 MHz40 Mbps5 MB/s
80 MHz80 Mbps10 MB/s
100 MHz100 Mbps12.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 应用
TMS320F280049TI C2000 MCU电机控制、传感器、外部控制器
STM32G4Cortex-M4 MCUADC、传感器、外部 Flash
STM32H7Cortex-M7 MCU高速外设、传感器、存储
MCP2518FDCAN FD Controller通过 SPI 扩展 CAN FD
AD/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 信号完整性以及从设备本身的最高通信频率。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐