QSPI协议基础:信号线定义与四种工作模式
要讲清楚QSPI Flash的启动时序,咱们得先把最底层的通信协议掰扯明白。QSPI全称是Quad SPI,说白了就是传统SPI的升级版——多加了4条数据线,吞吐量直接翻了四倍。我刚开始接触这个协议时,光看芯片手册上的时序图就头晕,后来亲手调了几块板子,才发现其实核心概念就那几样东西。
信号线定义
一个标准的QSPI接口,最少需要5根信号线。但实际用起来,通常会扩展到8根左右。我整理了一张表格,方便你对照理解。
| 信号名称 | 方向 | 功能说明 |
|---|---|---|
| SCLK | 主→从 | 串行时钟,由主控端产生。频率决定了传输速率 |
| CS# | 主→从 | 片选信号,低电平有效。拉低表示选中从设备 |
| MOSI / IO0 | 主→从 | 主出从入,也是双向数据线IO0 |
| MISO / IO1 | 从→主 | 主入从出,也是双向数据线IO1 |
| IO2 | 双向 | QSPI模式下扩展数据线,标准SPI不用 |
| IO3 | 双向 | QSPI模式下扩展数据线,标准SPI不用 |
这里有个细节要特别注意——CS#上的波形必须干净。我在一个项目中遇到过Flash启动偶尔失败,查了三天发现是CS#线上有个毛刺,导致Flash误判了一次片选结束。嗯,这类问题在高速时钟下特别容易出现。
避坑指南:我曾经用过一款国产FPGA驱动Winbond的QSPI Flash,结果发现IO2和IO3默认是输入方向,得在初始化时额外配置。如果不配,数据根本读不回来。不同厂商的Flash,IO引脚的上电状态可能不一样,一定要看手册。
四种工作模式
QSPI的四种模式,区别其实就两点:时钟极性(CPOL) 和 时钟相位(CPHA)。CPOL决定空闲时时钟是高还是低,CPHA决定数据采样发生在时钟的哪个边沿。你想想看,这两个参数排列组合,正好是四种情况。
模式定义速查表
| 模式 | CPOL | CPHA | 空闲时钟电平 | 数据采样边沿 |
|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低电平 | 第一个跳变沿(上升沿) |
| Mode 1 | 0 | 1 | 低电平 | 第二个跳变沿(下降沿) |
| Mode 2 | 1 | 0 | 高电平 | 第一个跳变沿(下降沿) |
| Mode 3 | 1 | 1 | 高电平 | 第二个跳变沿(上升沿) |
我个人的习惯是,遇到新芯片先看看它默认支持哪个模式。绝大多数QSPI Flash默认工作在Mode 0或Mode 3。为什么?因为这两个模式都在上升沿采样数据,对于主控端来说时序更容易满足。
小技巧:如果你的主控端时钟频率很高(比如超过50MHz),尽量选Mode 3。两个时钟边沿都在中间位置,留给数据建立和保持的时间窗口更大。我调过一款400Mbps的QSPI,用Mode 3比Mode 0更容易收敛时序。
各模式时序特点
咱们详细看看每种模式的波形特点。为了方便理解,我画了一张对比图。
为什么会有两个时钟边沿的延迟时序?说白了,这是为了给数据总线留出切换方向的时间。我记得第一次写QSPI驱动时,没搞懂这个细节,代码里用错CPHA,结果所有数据都偏移了一个时钟周期,怎么读都是乱码。
核心结论:主控端和从设备必须工作在同一模式下,否则数据根本对不上。Boot ROM里一般默认用Mode 0,但有些厂商为了降低EMI,会推荐用Mode 3。你选哪个?我的建议是:先看Boot ROM的要求,再看Flash手册的推荐。
模式不匹配的后果
我碰到过最典型的一次问题:客户用了一款新出的国产Flash,手册上写支持Mode 0/3,但实际测试发现Mode 0的时序窗口特别窄。我仔细一看,那款Flash内部用了边沿触发器,上升沿采样时对数据的建立时间要求很苛刻。换成Mode 3后,问题立刻消失了。
你想想看,如果主控端配了Mode 0,Flash却工作在Mode 2,会发生什么?数据会在下降沿被采样,但主控端以为在上升沿采样——结果就是每个字节都错位。这类bug非常隐蔽,用示波器看波形也看不出明显异常,只有用逻辑分析仪抓数据时才能发现规律性错位。
经验之谈:我自己的习惯是,在初始化QSPI之前,先发一个读取ID的命令(0x9F)。如果读回来的ID和手册上的一致,说明模式匹配上了。这个方法比查手册更靠谱,因为它直接验证了物理层的通信是否正常。
四种模式在实际项目中的选择
最后总结一下各模式的应用场景:
- Mode 0——兼容性最好,几乎所有Flash都支持。Bootstrap阶段最安全的选择。
- Mode 1——相对少见,时钟边沿在下降沿采样。如果主控端时钟占空比有偏差,这个模式会更敏感。
- Mode 2——与Mode 1对称,空闲时钟为高。很少在QSPI Flash中见到。
- Mode 3——高频场景首选。因为两个边沿都远离数据变化时刻,建立时间和保持时间最宽松。
我个人建议,如果你的目标频率低于40MHz,直接用Mode 0,省心。如果超过40MHz,试试Mode 3。这两个模式覆盖了市面上99%的QSPI Flash。至于Mode 1和Mode 2,嗯……我做了十年嵌入式,只用过一次,还是因为某款ASIC的SPI控制器只支持这两个模式。
好了,信号线和工作模式这部分就说这么多。你把Mode 0和Mode 3的核心时序记牢,后面讲启动流程时,还会反复用到这些概念。