一、QSPI 协议简介与信号特点
QSPI,全称是 Quad SPI,说白了就是 SPI 的升级版。标准 SPI 只有一根数据输出线(MOSI)和一根数据输入线(MISO),一次只能传 1 bit。QSPI 把这个通道翻了三倍——多了两根数据线,总共 4 根数据线,一次能传 4 bit。你想想看,同样一个时钟周期,吞吐量直接变成原来的 4 倍。
我最早接触 QSPI 是在一个高速数据采集项目里,Flash 读取速度总卡在 50 MHz 上不去。换成 QSPI 之后,同样的 PCB 走线,读速直接飙到 200 Mbps。嗯,这才真正体会到高速接口的威力。
1.1 接口定义与信号线功能
QSPI 接口一共 6 根主要信号线,算上片选才 7 根。别看线少,每根都有自己的脾气。
| 信号名 | 方向 | 功能描述 |
|---|---|---|
| SCLK | 主→从 | 时钟,数据采样沿(CPOL/CPHA 决定) |
| CS# | 主→从 | 片选,低有效,选中设备 |
| IO0 (MOSI) | 双向 | 标准 SPI 的 MOSI,QSPI 模式下双向数据线 0 |
| IO1 (MISO) | 双向 | 标准 SPI 的 MISO,QSPI 模式下双向数据线 1 |
| IO2 (WP#) | 双向 | 写保护(标准 SPI),QSPI 模式下数据线 2 |
| IO3 (HOLD#) | 双向 | 保持(标准 SPI),QSPI 模式下数据线 3 |
注意 IO2 和 IO3 在标准 SPI 模式下其实是控制信号,切换到 QSPI 模式后才变成数据线。这一点很多新手栽过跟头,我曾经见过一块板子 IO2 被外部上拉到高电平,结果 QSPI 四线读取时这个引脚怎么也拉不下来,排查了半天。
还有一个容易被忽略的细节:QSPI 的时钟极性(CPOL)和相位(CPHA)一般默认是模式 0,也就是空闲时时钟低电平,第一个边沿采样。但不同厂商的 Flash 可能有差异,务必读 datasheet 确认。
1.2 高速特点与信号完整性挑战
QSPI 的工作频率现在普遍在 80 MHz~166 MHz,甚至有些器件能跑到 200 MHz。这个频率在 PCB 上已经算是高速信号了。为什么?因为信号上升时间通常在 1~2 ns 左右,对应带宽接近 300 MHz。按照经验法则,走线长度超过信号上升沿对应电长度的 1/6 就要考虑传输线效应。
我个人的习惯是:一旦 QSPI 时钟超过 50 MHz,就必须按传输线来设计。否则你会看到波形上出现回沟、过冲、振铃,甚至数据完全读不对。
- 反射:阻抗不匹配导致信号在源端和负载端来回弹跳。典型表现是时钟边沿出现台阶,数据采样点刚好撞在台阶上。
- 串扰:相邻信号线之间的电磁耦合。QSPI 的四根数据线一般平行走线,串扰尤其严重。
- 同步开关噪声(SSN):数据线同时翻转时,芯片内部电源轨道瞬间压降。你可能会发现 SCLK 上莫名出现毛刺。
- 地弹:多个输出同时切换时,地参考电位抖动。这对于双向数据线(IO0~IO3)是致命伤。
1.3 为什么 QSPI 对毛刺特别敏感?
原因有三点,我总结为「三快」:边沿快、速率快、翻转快。
- 边沿快——QSPI 驱动器的输出阻抗一般只有十几欧姆,上升时间很短,高频分量丰富。这些高频成分很容易通过寄生电容耦合到相邻信号线上。
- 速率快——时钟频率高,一个 bit 窗口只有几纳秒。毛刺只要宽过几百皮秒,就可能落在采样点上。
- 翻转快——四根数据线可以同时从 0→1 或 1→0,同步开关噪声和地弹效应叠加,产生幅度可观的毛刺。
我遇到过最极端的一个案例,是在 100 MHz 的 QSPI Flash 读取过程中,CS# 下降沿后会出现一个 300 mV 的负毛刺,直接导致 Flash 误判片选信号,重新开始命令序列。最后发现是 SCLK 和 CS# 在 PCB 上平行走了 3 英寸,串扰所致。把 CS# 走线包地之后,毛刺消失。
1.4 协议操作模式与信号流
QSPI 协议支持三种操作模式:标准 SPI 模式、双线模式(Dual SPI)、四线模式(Quad SPI)。在实际调试时,你需要根据主控和 Flash 的兼容性来选择。
| 模式 | 数据线数 | 单时钟周期传输位数 | 典型应用 |
|---|---|---|---|
| 标准 SPI | 2(MOSI + MISO) | 1 bit | 配置寄存器、慢速参数读取 |
| Dual SPI | 2(IO0 + IO1) | 2 bit | 中等速度块读取 |
| Quad SPI | 4(IO0~IO3) | 4 bit | 高速数据块传输、代码映射 |
以最常见的 Quad Read 命令(0xEB)为例,流程是这样的:
- 主设备拉低 CS#,启动传输
- 主设备通过 IO0 输出命令字节(8 位)
- 主设备输出 24 位地址(3 字节),仍然通过 IO0 串行发送
- 主设备发送 8 个 dummy 周期(不关心 IO 状态)
- 从设备切换为 Quad 输出,IO0~IO3 同时输出数据
- 主设备在 SCLK 的每个上升沿采样 4 bit
- 直到主设备拉高 CS#,结束传输
这个流程中,最关键的是 dummy 周期之后,四根数据线的方向会瞬间翻转(由主设备驱动变为从设备驱动)。这个转瞬间如果主设备没有释放总线,就会和从设备产生驱动冲突,产生毛刺。我记得有颗国产 Flash 芯片,在 dummy 周期后需要额外 2 个时钟周期等待内部 PLL 锁定,如果不等,IO 线上会出现一个 2 ns 的毛刺。你的主控如果正好在那时候采样,数据就错了。
1.5 知识体系全景图
下面这张图把 QSPI 协议的核心知识点串了起来。你可以用它快速回顾本章内容。
这张图你可以截下来贴到笔记本第一页。后面每一章的定位都可以用它做参照。