4. 信号完整性:SCLK/SDA/CS信号质量对时序的影响
信号完整性,说白了就是看波形干不干净。很多工程师调AFE时序,上来就盯着寄存器配置,改来改去没效果。其实问题往往出在示波器探头底下——SCLK、SDA、CS这三根线的波形早就变形了。
我做过一个项目,AFE读回来的电压值总是跳变,幅度不大但频率很高。排查了三天,最后发现是CS信号的下降沿有毛刺,导致AFE误判了一次片选。从那以后,我调试任何SPI接口,第一件事就是看波形质量。
4.1 信号质量的三要素
判断一根数字信号好不好,主要看三个指标:
| 指标 | 定义 | 对时序的影响 |
|---|---|---|
| 上升/下降时间 | 信号从10%到90%电平的时间 | 过慢会模糊采样点位置,过快会引起过冲 |
| 过冲/下冲 | 信号超过VOH或低于VOL的尖峰 | 可能触发寄生逻辑翻转,导致误采样 |
| 振铃 | 信号在跳变后的衰减振荡 | 在采样窗口内引入不确定电平,破坏建立/保持时间 |
你想想看,如果SCLK的上升沿有振铃,AFE在第一个过零点就采样了,但主控认为采样发生在第二个过零点。这一错,数据位就全偏了。
4.2 SCLK:时钟信号的常见问题
SCLK是SPI通信的基准。它出问题,整个通信都会乱套。
4.2.1 时钟过冲
过冲通常是因为驱动能力太强,或者走线阻抗不匹配。我见过一块板子,SCLK过冲达到了3.8V(供电是3.3V)。AFE内部ESD保护管直接导通,把时钟沿给钳位了,结果时钟周期被拉长,时序完全对不上。
4.2.2 时钟占空比失真
SPI协议对时钟占空比有要求,一般是45%~55%。如果驱动器的上升和下降时间不对称,或者线路负载不平衡,占空比就会偏移。
我曾经调试一个项目,AFE在低温下频繁通信失败。抓波形发现,SCLK的占空比在-20°C时变成了40%/60%。原因是主控的IO驱动在低温下上升变慢,但下降没变。调整了驱动强度后问题解决。
4.3 SDA:数据线的信号完整性问题
SDA的问题比SCLK更隐蔽,因为它只在特定时刻被采样。
4.3.1 数据保持时间不足
SPI协议要求数据在SCLK采样沿之后保持一段时间(tH)。如果SDA线上有容性负载,数据跳变会变慢。当SCLK采样沿到来时,数据还没稳定到有效电平。
4.3.2 串扰
SDA走线如果和SCLK靠得太近,SCLK跳变会通过寄生电容耦合到SDA上。我在一个四层板项目里遇到过,SDA上叠加了明显的时钟噪声,幅度有0.4V。AFE在采样时读到的数据经常错位。
解决办法很简单:把SDA和SCLK之间加地线隔离,或者拉开间距到3倍线宽以上。
4.4 CS:片选信号的陷阱
CS信号看似简单,但坑最多。
4.4.1 CS毛刺
CS在空闲时是高电平。如果走线耦合了噪声,产生一个窄的低脉冲,AFE会误认为一次新的片选开始。这会导致当前通信中断,AFE状态机复位。
我记得有个现场问题,AFE每隔几分钟就丢一次数据。抓了一整天的波形,才发现是电机驱动产生的强电磁干扰,在CS线上感应出了纳秒级的毛刺。
4.4.2 CS上升沿斜率过缓
CS上升沿如果太慢,AFE内部逻辑可能把上升沿识别成多个跳变。有些AFE要求CS上升时间小于100ns。如果主控驱动能力弱,或者线上电容大,这个指标很容易超标。
4.5 信号完整性问题的排查流程
遇到时序异常,我一般按这个顺序排查:
- 看波形形状——先看SCLK、SDA、CS的整体波形,有没有明显变形、毛刺、振铃。
- 测关键参数——用示波器的测量功能,读上升时间、下降时间、过冲幅度、占空比。
- 对比规格书——把测到的参数和AFE数据手册里的时序要求对比。重点关注tSU、tH、tCSH等。
- 定位根因——如果参数超标,判断是驱动问题、走线问题还是干扰问题。
- 验证修复——调整后重新抓波形,确认参数回到规格范围内。
4.6 改善信号完整性的实用方法
根据我的经验,以下几个方法最有效:
- 串联电阻——在SCLK和SDA靠近主控端串联22Ω~33Ω电阻,可以抑制过冲。阻值根据驱动强度和走线长度调整。
- 调整驱动强度——很多主控的IO可以配置驱动能力。如果过冲大,降低驱动强度;如果上升沿太慢,提高驱动强度。
- 加电容——在CS线上对地加一个100pF电容,可以滤除高频毛刺。但注意不要加太大,否则CS上升时间会超标。
- 走线优化——SCLK、SDA、CS走线尽量短,远离电源、电机驱动等噪声源。同一组信号走同一层,避免过孔。