第3章:SPI时序参数——时钟频率、建立时间、保持时间

聊SPI时序,绕不开三个核心参数:时钟频率、建立时间、保持时间。说白了,它们决定了数据能不能在主机和从机之间“稳稳地”传过去。我个人习惯是先看时钟频率,再看建立时间和保持时间——因为频率一高,后面两个参数就容易出问题。

下面这张图总结了三个参数在SPI总线上的位置关系。你看一眼,心里就有谱了。

SPI时序参数核心关系 SCLK (时钟信号) tSCK周期 MOSI 数据采样沿(假设CPOL=0, CPHA=0:上升沿采样) tSU tHD 图例: 🔴 时钟周期 tSCK = 1 / fSCK 🟣 建立时间 tSU:数据必须在采样沿之前稳定 🟠 保持时间 tHD:采样沿之后数据必须保持稳定

3.1 时钟频率(SCLK)

时钟频率决定了SPI通信的“节奏”。你想想看,频率越高,单位时间内传的bit越多。但高了也有代价——信号容易变形,采集窗口变窄。

我在项目中遇到过这样的事:某款传感器标称支持10MHz SPI,但我用12MHz也能跑,数据没出错。可换了一根长排线之后,偶尔出现乱码。后来拿逻辑分析仪一看,SCLK的上升沿已经有明显的过冲和振铃,实际采样窗口被压缩到只有几个纳秒。这就是频率突破了物理极限。

选频建议:

  • 优先参考从机数据手册的最大SCLK,留20%~30%余量。
  • 超过20MHz就要考虑PCB走线阻抗、终端匹配。
  • 长距离传输(>10cm)建议降到5MHz以下。
常见SPI设备时钟频率参考
设备类型典型频率注意事项
Flash存储器20~80 MHz多支持Quad/Dual SPI
传感器/MEMS1~10 MHz长线需降速
ADC/DAC10~50 MHz取决于采样率
显示屏驱动10~40 MHz线缆屏蔽很重要

3.2 建立时间(Setup Time, tSU)

建立时间指的是:在采样时钟沿(比如上升沿)到来之前,数据线上的信号必须保持稳定的最短时间。说白了,就是给数据“站稳”的时间。

为什么要有这个时间?你想想看,从机内部的采样电路不是瞬间完成的,它需要把数据线上的电平读入触发器。如果数据在采样沿来临时还在跳变,那读到的值可能是0也可能是1——这就叫“亚稳态”。

测量技巧:用逻辑分析仪抓取SCLK和MOSI/MISO,在采样沿处仔细展开,看数据从最后一个跳变点到采样沿之间的时间。这个值必须 > 从机datasheet里标明的tSU(min)。

我曾经调一个国产SPI蓝牙模组,总是间歇性丢包。用逻辑分析仪测出来tSU只有2ns,而datasheet要求至少5ns。我就调整了主机(MCU)SPI的相位,从CPHA=0改成CPHA=1,相当于把采样沿从上升沿移到下降沿,tSU一下子就变成10ns,问题解决。嗯,这就是经验的用处。

3.3 保持时间(Hold Time, tHD)

保持时间正好和建立时间相反:采样沿之后,数据还需要保持稳定的一段时间。同样是为了让从机的采样电路有足够的时间“锁住”数据。

保持时间在低速下几乎不是问题,但随着频率升高,时钟抖动、传输线延迟都会引起保持时间不足。我遇到过一次极端情况:一个SPI屏幕在10MHz下工作正常,换成20MHz后屏幕左侧出现一列花点。抓波形发现保持时间只有负的0.5ns——也就是说数据在采样沿还没结束就开始变了。后来在MOSI线上串了一个22Ω电阻,稍微增加下降时间,保持时间回升到1.2ns,画面就正常了。

注意:保持时间不足有时比建立时间不足更隐蔽。因为建立时间不足往往会导致完全通信失败,而保持时间不足的结果可能是“大多数时候对,偶尔错”——这类bug最难定位。

3.4 三个参数之间的关系

它们不是孤立的。时钟周期tSCK必须大于等于tSU + tHD + 数据跳变时间。对于SPI来说,数据跳变时间取决于带载、走线长度、驱动能力。

你可以用下面这个简单的公式估算最大可用频率:

tSCK(min) = tSU(max) + tHD(max) + tRISE/FALL
fSCK(max) = 1 / tSCK(min)

实际项目中,我习惯用逻辑分析仪把关键波形抓出来,然后用光标测量工具直接量tSU和tHD。对比datasheet的要求,余量不够就降频或调整极性。

我的避坑经验:

  • 不要只看datasheet的典型值,要看最差值(min/max)。
  • 样机测试时要换批次芯片、换线缆、换温度环境重复验证。
  • 逻辑分析仪的采样率至少是SPI时钟的4倍,推荐10倍以上。

3.5 总结:用逻辑分析仪快速验证

拿一个实际例子说。你手头有一个SPI Flash,datasheet标fSCK=50MHz,tSU=2ns,tHD=1ns。你用25MHz跑,逻辑分析仪抓到的波形如下:

  • SCLK周期 = 40ns,高电平20ns,低电平20ns。
  • 数据在采样沿之前稳定了15ns(tSU实测),远大于2ns。
  • 采样沿之后数据保持稳定8ns(tHD实测),也远大于1ns。
  • OK,余量非常足,升级到50MHz试试?

如果50MHz下tSU实测只有1.5ns(datasheet要求2ns),那就必须降频或者换更快的从机。逻辑分析仪就是干这个用的——不是猜,是测。