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 示波器测量时钟沿后数据保持稳定的时长

注意:测量保持时间时,要保证示波器的探头延迟已做校准。否则测出来的值偏大或偏小,容易误判。

时序参数的核心逻辑

建立时间和保持时间,本质上是一个采样窗口的概念。窗口内数据必须稳定。频率越高,窗口越小。

我把它们的关系画成了一张结构图,你看看:

QSPI时序参数核心逻辑 SCK频率 tSU(建立时间) 数据需提前稳定 tH(保持时间) 时钟后需维持稳定 采样窗口 频率越高 → 周期越短 → 采样窗口越窄 tSU和tH的余量必须同时满足 实测时需同时测量tSU和tH,避免一方余量不足

从图里你就能看出来:SCK频率是“因”,tSU和tH是“果”。频率一旦提高,建立时间和保持时间的窗口同时变小。你不能只盯着一个看。

实际测量中的避坑指南

关于测量,我多啰嗦几句。别嫌麻烦,这些都是真金白银换来的教训。

我曾经犯过的错:用长地线探头测量高频信号,结果波形全是振铃。测出来的建立时间比实际小了1 ns多。后来换了短地线探头才正常。

  1. 探头选择:用10:1无源探头就够了,但地线要短。自带的长鳄鱼夹地线会引入电感。
  2. 触发设置:以SCK的边沿触发,观察数据线的变换。这样可以看到建立时间和保持时间。
  3. 余量判断:测出来的tSU和tH,如果比数据手册的最小值只大0.5 ns,那就很危险了。受温度影响可能直接挂掉。
  4. 眼图辅助:有条件时,看一下眼图。眼图开口大,说明时序余量充裕。

我建议:设计阶段就留够余量。比如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读数据偶尔出错,先别急着换芯片,拿示波器测一测这三个参数,问题多半就浮出来了。