3、QSPI协议速览:四线SPI的物理层、时钟极性与相位、DQ0~DQ3数据线功能
讲QSPI之前,得先聊聊SPI。传统SPI大家都熟——一根时钟线、一根片选线、两根数据线(MOSI和MISO)。但如果你想要更快的传输速率,比如驱动高刷屏或者高速ADC,SPI就有点力不从心了。我记得刚开始做嵌入式那会儿,用SPI刷一块320×240的LCD,帧率惨不忍睹。后来换成QSPI,速度直接翻了三倍多。说白了,QSPI就是SPI的"四车道"版本,把数据线从两根扩到了四根。
这一章咱们快速过一遍QSPI的核心概念。你不需要死记硬背,关键是理解它"怎么连"、"怎么跑"、"每根线干嘛用"。后面用逻辑分析仪抓波形的时候,这些知识会反复用到。
3.1 从SPI到QSPI:多出来的两根线到底干了什么?
传统SPI是双线半双工(或者全双工),一条MOSI、一条MISO。QSPI保留了CLK和CS,把数据线扩展为DQ0~DQ3共四根。你想想看,四根线同时传数据,同样的时钟频率下,吞吐量是SPI的四倍。而且QSPI兼容SPI模式——你把DQ2和DQ3不接,它就退化成标准SPI。很多Flash芯片就是这样设计的,上电默认SPI模式,发一个命令再切到QSPI。
我建议你画板子的时候,把DQ0~DQ3这四根线等长布线,尤其是高速场合。我在一个项目里吃过亏:两根线差了2cm,跑50MHz的时候数据就时不时出错。嗯,高频信号对时序就是很敏感。
QSPI核心优势:四根数据线并行传输,同一时钟频率下带宽是标准SPI的4倍。硬件上兼容SPI模式,可平滑升级。
3.2 物理层:四线SPI的硬件连接
QSPI的物理层其实很简单,六根线搞定:一根时钟(CLK)、一根片选(CS)、四根数据线(DQ0~DQ3)。我们逐个看:
- CLK(时钟线)——由主设备驱动,所有数据传输都跟着这个时钟沿走。频率一般从几MHz到上百MHz。
- CS(片选线)——低电平有效。主设备拉低CS,表示"我要跟你通信了"。拉高则结束传输。我个人习惯把CS连到GPIO,而不是硬件自动控制,灵活性更高。
- DQ0~DQ3(数据线)——四根双向数据线。QSPI模式下,它们都是双向的;SPI兼容模式下,DQ0=MOSI,DQ1=MISO,DQ2和DQ3不用。
硬件连接没什么玄学,主设备的QSPI控制器对应引脚连到从设备就行。需要注意的是,如果从设备只支持SPI,那DQ2和DQ3就悬空或者接地。我见过有人把所有四根线都接了,结果从设备不认——因为从设备压根不支持QSPI模式。
小提示:布线时DQ0~DQ3尽量等长,误差控制在5mm以内。差分线不是必须的,但组内等长能减少信号偏移。
3.3 时钟极性(CPOL)与相位(CPHA)
这两个参数决定了数据在时钟的哪个沿被采样。很多初学者在这里犯晕,我教你一个笨办法——直接看波形图,比记文字描述管用十倍。
CPOL(时钟极性):决定时钟空闲时的电平。
CPOL=0 → 空闲低电平,CPOL=1 → 空闲高电平。
CPHA(时钟相位):决定数据采样发生在第几个沿。
CPHA=0 → 第一个时钟沿采样,CPHA=1 → 第二个时钟沿采样。
组合起来就是四种模式。我习惯用模式0和模式3,因为这两种模式下,数据在上升沿被采样,逻辑分析仪抓出来波形比较"整齐"。
| 模式 | CPOL | CPHA | 空闲时钟电平 | 数据采样沿 |
|---|---|---|---|---|
| 模式0 | 0 | 0 | 低电平 | 上升沿(第一个沿) |
| 模式1 | 0 | 1 | 低电平 | 下降沿(第二个沿) |
| 模式2 | 1 | 0 | 高电平 | 下降沿(第一个沿) |
| 模式3 | 1 | 1 | 高电平 | 上升沿(第二个沿) |
曾经踩过的坑:有一次我用逻辑分析仪抓一个Flash芯片的QSPI波形,发现数据全是错的。查了半天,发现是CPHA设反了——从设备要求模式3,我配置成了模式0。两个模式看起来波形差不多,但采样沿差了一个时钟周期。从那以后,我每次调QSPI第一件事就是确认CPOL和CPHA。
为什么会有四种模式?其实是为了兼容不同厂家的从设备。有些Flash在上升沿采样,有些在下降沿。你只要保证主设备和从设备设置一致就行。我个人建议:如果从设备没有特殊要求,优先用模式0,通用性最好。
3.4 DQ0~DQ3数据线功能详解
这四根线是QSPI的精髓。它们在不同模式下扮演不同角色:
- DQ0——在SPI模式下是MOSI(主出从入),在QSPI模式下是双向数据线0。一般也是命令/地址发送的主要通道。
- DQ1——在SPI模式下是MISO(主入从出),在QSPI模式下是双向数据线1。读数据时它最忙。
- DQ2——仅在QSPI模式下使用,双向数据线2。写操作时和DQ0、DQ1一起传数据。
- DQ3——仅在QSPI模式下使用,双向数据线3。读操作时和DQ1一起返回数据。
实际项目中,QSPI Flash芯片最常用。比如华邦的W25Q64系列,读操作发一个「0xEB」命令,然后把DQ0~DQ3全部切为输入,从设备四根线同时往外吐数据。我建议你记住一个规律:命令阶段用DQ0单线发,地址阶段用DQ0~DQ3四线发,数据阶段四线全开。
数据线复用逻辑:QSPI控制器内部有方向控制寄存器,需要根据操作阶段切换DQ0~DQ3的方向。硬件上通常用双向I/O缓冲器实现,软件配置一下方向位即可。
3.5 QSPI协议知识体系速览
下面这张图把QSPI的核心知识点串在了一起。你可以把它当成本章的地图,后面每节课都会回到这张图上。