QSPI时序参数详解:SCK频率、数据建立/保持时间
说到QSPI时序,我最常被问到的就是:“到底能跑多快?”以及“数据怎么保证采对?”这里我得先跟各位说清楚,时序参数不是孤立存在的。你调整了一个,必然影响另一个。我做过一个项目,芯片数据手册写着“最大SCK频率50 MHz”,结果板子一跑,读了十次有八次错。为啥?因为建立时间和保持时间没顾上。
SCK频率:能跑多快?
SCK频率,说白了就是时钟快慢。越快,数据传输越快。但快也有代价。
QSPI的SCK频率由两个因素决定:
- 主控端的能力:你的MCU或FPGA的QSPI控制器最高支持多少。
- 从设备的要求:Flash或外设数据手册上写的最大频率。
实际频率要取两者中的最小值。我个人习惯是先看从设备的限制,因为主控往往留有余量。
还有一个点很容易被忽略——PCB走线。我遇到过,明明芯片支持80 MHz,板子一测眼图直接闭了。后来发现是走线太长,信号反射严重。所以高频下(尤其是50 MHz以上),你还得考虑信号完整性。
关键公式:实际SCK频率 ≤ min(F_max_master, F_max_slave)
要留20%~30%的余量。我一般直接降一档用。
数据建立时间(tSU):数据要提前到位
建立时间,就是时钟沿来之前,数据必须稳定存在的时间。你可以理解为:时钟沿要采数据了,数据得提前坐好等着。
QSPI是四线并行,IO0~IO3四条数据线,每条线都有自己的tSU要求。我在项目中调试过一次,发现其中一根线数据总是不对,用示波器一抓,原来是走线长了,数据比其他三根线晚到了一点。
这就是典型的建立时间违例。
我的经验:调试时,不要只看单根线的时序。四根线一起抓,看它们的数据是否同时稳定。特别是DDR模式下,数据是在上升沿和下降沿都采,建立时间窗口直接减半。
你想想看,如果SCK频率高,一个周期短,建立时间的余量就小。所以频率和tSU是相互制约的。
数据保持时间(tH):数据还要待一会儿
保持时间,就是时钟沿过去之后,数据还得保持稳定一阵。说白了,时钟采完数据后,数据不能立刻变。要等一会才能释放。
保持时间为什么重要?因为数据变化有延时,时钟也有延时。两个延时不一致,就可能出问题。我曾经遇到一种情况:数据在时钟沿之后飞快变了,结果从设备采到的是一片乱码。
怎么解决?看下面的对比:
| 参数 | 方向 | 典型值(50 MHz时) | 测量方法 |
|---|---|---|---|
| tSU(建立时间) | 数据→时钟沿 | 2~5 ns | 示波器测量数据稳定点与时钟沿的时间差 |
| tH(保持时间) | 时钟沿→数据 | 1~3 ns | 示波器测量时钟沿后数据保持稳定的时长 |
注意:测量保持时间时,要保证示波器的探头延迟已做校准。否则测出来的值偏大或偏小,容易误判。
时序参数的核心逻辑
建立时间和保持时间,本质上是一个采样窗口的概念。窗口内数据必须稳定。频率越高,窗口越小。
我把它们的关系画成了一张结构图,你看看:
从图里你就能看出来:SCK频率是“因”,tSU和tH是“果”。频率一旦提高,建立时间和保持时间的窗口同时变小。你不能只盯着一个看。
实际测量中的避坑指南
关于测量,我多啰嗦几句。别嫌麻烦,这些都是真金白银换来的教训。
我曾经犯过的错:用长地线探头测量高频信号,结果波形全是振铃。测出来的建立时间比实际小了1 ns多。后来换了短地线探头才正常。
- 探头选择:用10:1无源探头就够了,但地线要短。自带的长鳄鱼夹地线会引入电感。
- 触发设置:以SCK的边沿触发,观察数据线的变换。这样可以看到建立时间和保持时间。
- 余量判断:测出来的tSU和tH,如果比数据手册的最小值只大0.5 ns,那就很危险了。受温度影响可能直接挂掉。
- 眼图辅助:有条件时,看一下眼图。眼图开口大,说明时序余量充裕。
我建议:设计阶段就留够余量。比如tSU要求2 ns,你最少让数据提前4 ns到达。这样板子量产时,即便工艺偏差也不容易出问题。
不同SPI模式的时序差异
QSPI通常工作在模式0(CPOL=0, CPHA=0)或模式3(CPOL=1, CPHA=1)。两种模式下的采样边沿不同,实际tSU和tH的测量位置也不同。
| 模式 | CPOL(时钟极性) | CPHA(时钟相位) | 采样边沿 | tSU测量参考点 |
|---|---|---|---|---|
| 模式0 | 0(空闲低) | 0(第一个边沿) | 上升沿 | 上升沿前 |
| 模式3 | 1(空闲高) | 1(第二个边沿) | 上升沿 | 上升沿前 |
嗯,这个表告诉你一个事实:不管模式0还是模式3,采样都在上升沿。但空闲电平不同,导致数据线上的信号可能有一个“过渡态”。我调模式3时遇到过,空闲时数据线电平刚好反转,建立时间一下子就崩了。
一句话总结:SCK频率越高,你越要小心tSU和tH。测量时,同时看四根数据线。留够余量,别卡在边界上。
好了,就这些。下次你遇到QSPI读数据偶尔出错,先别急着换芯片,拿示波器测一测这三个参数,问题多半就浮出来了。