第2章:Packet Loss的根本原因分析
做D-PHY调试这些年,我最怕的不是眼图闭合,而是那种间歇性、非固定的丢包。你明明看着波形还行,可数据就是少了几包。这章咱们就掰开了揉碎了,把Packet Loss的几个根因彻底捋清楚。
嗯,咱们先看一张总图,把各种原因串起来,后面再逐个细聊。
2.1 电气特性——第一个要查的
说实话,我经手的大部分丢包问题,最后都能在示波器上找到电气层面的原因。D-PHY信号幅度有严格规范:HS模式下差分幅度最低150mV,最高450mV。如果你测出来的幅度只有120mV,那基本不用想,接收端根本没法稳定判决。
那年我做一款手机摄像头模组,总是在低温-10℃下出现帧丢失。热机跑半小时又好了。我一开始觉得是温度漂移,后来查到发送端电平在低温下掉了30mV,刚好掉到接收端阈值附近。换了一颗低温特性的驱动IC,问题绝迹。
所以排查电气特性时,建议按这个顺序走:
- 幅度检查——量HS差分对,看峰峰值是否大于200mV(留余量)
- 共模漂移——测HS共模电压,是否稳定在200~400mV
- 串扰耦合——CLK和Data之间是否交叉耦合?关掉一组Data看丢包率是否变化
- 回流路径——GND平面是否完整?我曾经在FPC上看到一条走线绕了一大圈,眼图上全是毛刺
2.2 时钟链路——被忽视的罪魁祸首
很多工程师一上来就追数据通道,我反倒建议先看时钟。D-PHY的时钟是差分的,但它在LP→HS切换瞬间会产生一个瞬态共模尖峰。你想想看,如果时钟抖起来,数据采样点就跟着跳舞。
时钟链路最关键的参数是周期抖动(Cycle-to-Cycle Jitter)。规范里一般要求< 0.3 UI,但实际项目中,我建议控制在0.2 UI以内才算安全。
| 抖动类型 | 典型来源 | 对丢包的影响 |
|---|---|---|
| 随机抖动 (RJ) | 电源噪声、热噪声 | 造成偶发误码,丢包率10⁻⁹以下可忽略 |
| 确定性抖动 (DJ) | 占空比失真、码间串扰 | 产生系统性误码,丢包率可达10⁻⁶甚至更高 |
| 周期抖动 (C2C) | PLL锁定不佳、电源纹波 | 直接导致数据采样窗口缩小 |
我之前碰到过一个案例:某平板电脑的显示面板随机关屏。抓包后发现时钟通道的占空比失真到了48:52,也就是说高电平比低电平短了4%。接收端采数据时,刚好撞到边沿,导致一整行数据全错。
2.3 协议/链路层——软件也能导致丢包
嗯,这里说的软件,不一定是上层驱动,更多是D-PHY链路控制器的状态机。比如SoT(Start of Transmission)序列没被正确识别,或者EoT(End of Transmission)毛刺触发了提前复位。
我个人习惯是:先确认物理层信号干净,再抓协议分析。很多团队搞反了,先调软件,调半天发现是硬件问题。
常见的协议层丢包原因:
- SoT丢失——HS进入时序的LP-11→LP-01→LP-00 跳变太快或太慢
- CRC校验失败——接收端计算出的CRC与发送端不匹配,直接丢弃整包
- 接收端阈值偏移——特别在高温老化后,接收端比较器参考电压会飘
- EoT提前触发——毛刺被误认为HS退出序列
2.4 根因排查总表
| 怀疑方向 | 快速验证方法 | 典型改善手段 |
|---|---|---|
| 幅度不足 | 示波器测差分眼图,看幅度是否 < 200mV | 增加驱动电流、缩短走线、优化阻抗匹配 |
| 共模噪声 | 测量HS共模电压波动幅度 | 增加去耦电容、优化GND回流 |
| 时钟抖动 | 用示波器直方图测C2C抖动 | 更换低抖动PLL、加固时钟电源 |
| SoT时序 | 逻辑分析仪抓LP→HS跳变时序 | 调整发送端UI时间、加延时匹配 |
| CRC错误 | 计数器查看接收端CRC error数量 | 修改接收端阈值、增补重传机制 |
说白了,Packet Loss的根本原因很少是单一因素。你在示波器上看到幅度不足,也许同时时钟也有抖动。我建议每次排查时都填一张类似上面的表,把每个维度都打一遍勾,最后锁定1-2个最可疑的。