第3章:SPI时序参数——时钟频率、建立时间、保持时间
聊SPI时序,绕不开三个核心参数:时钟频率、建立时间、保持时间。说白了,它们决定了数据能不能在主机和从机之间“稳稳地”传过去。我个人习惯是先看时钟频率,再看建立时间和保持时间——因为频率一高,后面两个参数就容易出问题。
下面这张图总结了三个参数在SPI总线上的位置关系。你看一眼,心里就有谱了。
3.1 时钟频率(SCLK)
时钟频率决定了SPI通信的“节奏”。你想想看,频率越高,单位时间内传的bit越多。但高了也有代价——信号容易变形,采集窗口变窄。
我在项目中遇到过这样的事:某款传感器标称支持10MHz SPI,但我用12MHz也能跑,数据没出错。可换了一根长排线之后,偶尔出现乱码。后来拿逻辑分析仪一看,SCLK的上升沿已经有明显的过冲和振铃,实际采样窗口被压缩到只有几个纳秒。这就是频率突破了物理极限。
选频建议:
- 优先参考从机数据手册的最大SCLK,留20%~30%余量。
- 超过20MHz就要考虑PCB走线阻抗、终端匹配。
- 长距离传输(>10cm)建议降到5MHz以下。
| 设备类型 | 典型频率 | 注意事项 |
|---|---|---|
| Flash存储器 | 20~80 MHz | 多支持Quad/Dual SPI |
| 传感器/MEMS | 1~10 MHz | 长线需降速 |
| ADC/DAC | 10~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),那就必须降频或者换更快的从机。逻辑分析仪就是干这个用的——不是猜,是测。