1. QSPI协议基础:从SPI到QSPI的进化之路

做嵌入式设计的兄弟都知道,SPI这玩意儿太常见了。但当你需要从Flash里高速加载代码或者大量数据时,传统SPI的那条数据线就不够用了。这个时候,QSPI就站了出来。

我个人习惯把QSPI看作是SPI的「四车道」升级版。它骨子里还是SPI那套主从通讯的框架,但把数据通道从一条拓宽到了四条。说白了,就是同样的时钟频率下,数据吞吐量直接翻了四倍。

1.1 SPI协议回顾:单车道是怎么跑的?

咱们先简单回顾一下SPI。标准的SPI接口有4根信号线:

  • SCLK:串行时钟,由主机产生
  • MOSI:主机输出,从机输入
  • MISO:主机输入,从机输出
  • CS / SS:片选信号,低电平有效

它是个全双工的协议。什么意思呢?就是主机在SCLK的每个时钟周期,能从MOSI发一位出去,同时从MISO读一位回来。我以前用STM32驱动一个温湿度传感器,就是这个模式,简单又可靠。

但它的短板也很明显——数据吞吐量受限于时钟频率。你想想看,假设时钟跑100MHz,那极限吞吐也就是100Mbps。这个速度跑个简单的传感器还行,但要加载几兆字节的代码或者图像数据,那就太慢了。

1.2 QSPI与SPI的核心差异:四线并行

QSPI的全称是Quad SPI,它的关键变化就在这里:

特性 标准SPI QSPI
数据线数量 2条(MOSI + MISO) 4条(IO0 ~ IO3)
全双工能力 支持 不支持(半双工)
最大理论吞吐 1 bit / clock 4 bits / clock
引脚复用 无 地址/命令阶段可用作控制

核心差异总结:QSPI牺牲了全双工,换来的是4倍的数据线宽度。对于Flash读写这种半双工操作(要么读要么写),这个交换非常划算。

我曾经在一个项目中,需要从Flash里实时加载H264的视频流。如果用传统SPI,主频必须拉到200MHz以上才能满足带宽,这在PCB布局上是个噩梦。换成QSPI之后,40MHz的时钟就搞定了,信号完整性问题一下少了很多。

1.3 四线数据优势:不止是快

四线并行的好处,最直观的就是速度。但除此之外,还有几个点值得提:

  1. 更低的时钟频率:同样的带宽需求,QSPI只需要SPI 1/4的时钟频率。低速意味着低EMI,更容易通过EMC测试。
  2. 更好的信号完整性:频率低了,传输线效应、串扰这些问题就少了。我在做一款工业相机时,用过200MHz的SPI,结果板子稍微长一点就眼图闭合。换成QSPI的50MHz,稳稳的。
  3. 引脚效率高:虽然QSPI用了4根数据线,但它复用了一部分引脚。很多QSPI Flash在命令阶段会用IO0做输入,地址阶段用IO0-IO3,真正数据传输时才变成四线模式。

个人经验:在做高速信号设计时,优先考虑降低频率而不是拼命拉高频率。QSPI给了你这个选择。我之前有个客户,非要在100MHz下用SPI读Flash,结果布完线发现过不了,最后改QSPI降到50MHz,问题全消失了。

1.4 时钟极性和相位模式:你选对了吗?

嗯,这里要注意了。无论SPI还是QSPI,时钟极性和相位(CPOL和CPHA)都决定了数据如何在时钟边沿采样。

  • CPOL:时钟极性。CPOL=0表示空闲时时钟为低电平;CPOL=1表示空闲时时钟为高电平。
  • CPHA:时钟相位。CPHA=0表示在时钟的第一个边沿采样;CPHA=1表示在时钟的第二个边沿采样。

组合起来就是4种模式:

模式 CPOL CPHA 采样边沿
Mode 0 0 0 上升沿
Mode 1 0 1 下降沿
Mode 2 1 0 下降沿
Mode 3 1 1 上升沿

市面上绝大多数QSPI Flash,包括我常用的Winbond、Macronix、ISSI,默认都是Mode 0。也就是CPOL=0、CPHA=0,空闲时时钟为低,在上升沿采样数据。

避坑指南:我曾经在一个项目中,因为没仔细看Flash的数据手册,默认用了Mode 3。结果从机一直响应错误,排查了整整一天。后来发现Flash只支持Mode 0和Mode 3,而我代码里配的是Mode 1。所以,读写Flash之前,第一件事就是检查数据手册的时序图。

为什么我要强调这个?因为QSPI的时序比SPI更敏感。SPI你配错了模式,运气好还能读出数据,只是时序窗口很紧。但QSPI因为是四线同时采样,任何一根线的时序偏差都会造成整包数据错乱。我的习惯是:用示波器抓一下CLK和IO0的波形,确认采样点在哪里,再放心往下做。

QSPI 协议知识体系 QSPI 协议基础 QSPI vs SPI 差异 四线数据优势 时钟极性与相位 数据线数量不同 全双工 vs 半双工 降低时钟频率 改善信号完整性 引脚复用效率高 CPOL 时钟极性 CPHA 时钟相位 Mode 0: (0,0) Mode 3: (1,1) 📌 说明 QSPI Flash 绝大多数默认使用 Mode 0,设计时务必核对数据手册时序图。

上图把这一章的核心知识点串了一下。从QSPI协议基础出发,左边讲与SPI的差异,中间讲四线优势,右边讲时钟模式。到最后你会发现,无论多复杂的QSPI级联设计,都离不开这些基础概念。