第2章:Packet Loss的根本原因分析

做D-PHY调试这些年,我最怕的不是眼图闭合,而是那种间歇性、非固定的丢包。你明明看着波形还行,可数据就是少了几包。这章咱们就掰开了揉碎了,把Packet Loss的几个根因彻底捋清楚。

嗯,咱们先看一张总图,把各种原因串起来,后面再逐个细聊。

Packet Loss 根本原因分类图 Packet Loss 电气特性问题 信号幅度不足 共模噪声过大 线间串扰 时钟链路异常 周期抖过大 占空比失真 LP→HS跳变毛刺 协议/链路层 SoT/EoT 丢失 CRC校验失败 接收端阈值漂移 很多方案丢包,都不是单一原因——往往是电气+时钟+协议三个环节叠加 建议从最左侧(电气特性)开始排查,性价比最高

2.1 电气特性——第一个要查的

说实话,我经手的大部分丢包问题,最后都能在示波器上找到电气层面的原因。D-PHY信号幅度有严格规范:HS模式下差分幅度最低150mV,最高450mV。如果你测出来的幅度只有120mV,那基本不用想,接收端根本没法稳定判决。

关键指标:HS差分电压范围 150mV ~ 450mV;共模电压 200mV ~ 400mV(1.2V电源下)

那年我做一款手机摄像头模组,总是在低温-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%。接收端采数据时,刚好撞到边沿,导致一整行数据全错。

注意:占空比矫正不是万能的。有些接收端只做50%阈值判决,遇上大幅度占空比偏移就会不停报CRC error。

2.3 协议/链路层——软件也能导致丢包

嗯,这里说的软件,不一定是上层驱动,更多是D-PHY链路控制器的状态机。比如SoT(Start of Transmission)序列没被正确识别,或者EoT(End of Transmission)毛刺触发了提前复位。

我个人习惯是:先确认物理层信号干净,再抓协议分析。很多团队搞反了,先调软件,调半天发现是硬件问题。

常见的协议层丢包原因:

  1. SoT丢失——HS进入时序的LP-11→LP-01→LP-00 跳变太快或太慢
  2. CRC校验失败——接收端计算出的CRC与发送端不匹配,直接丢弃整包
  3. 接收端阈值偏移——特别在高温老化后,接收端比较器参考电压会飘
  4. EoT提前触发——毛刺被误认为HS退出序列
一条经验:如果丢包模式是“固定在某几行/某几帧”,大概率是协议层问题。如果是“全随机、无规律”,先怀疑电气特性。

2.4 根因排查总表

怀疑方向快速验证方法典型改善手段
幅度不足示波器测差分眼图,看幅度是否 < 200mV增加驱动电流、缩短走线、优化阻抗匹配
共模噪声测量HS共模电压波动幅度增加去耦电容、优化GND回流
时钟抖动用示波器直方图测C2C抖动更换低抖动PLL、加固时钟电源
SoT时序逻辑分析仪抓LP→HS跳变时序调整发送端UI时间、加延时匹配
CRC错误计数器查看接收端CRC error数量修改接收端阈值、增补重传机制

说白了,Packet Loss的根本原因很少是单一因素。你在示波器上看到幅度不足,也许同时时钟也有抖动。我建议每次排查时都填一张类似上面的表,把每个维度都打一遍勾,最后锁定1-2个最可疑的。