最近整理 HDMI 眼图相关问题,发现这类问题和“HDMI 能不能亮”还不是一回事:能亮只能说明链路勉强工作,眼图过不过,更多是在看高速信号质量有没有余量。这里把调试思路记一下,给后面做认证、量产或排查偶发黑屏的人参考。
HDMI 眼图测试对条件很敏感。开始前建议先确认:
输出分辨率和刷新率固定,比如 720p60 / 1080p60;
测试 pattern 是否符合要求,最好使用固定测试图或 HDMI compliance pattern;
线材、转接板、探头、夹具是否靠谱;
示波器带宽、差分探头、fixture 是否满足 HDMI 速率;
测试点是在芯片端、连接器端,还是线缆末端。
同一块板子,在芯片脚边和 HDMI 座子后面测,眼图可能完全不是一个样子。
全志平台 HDMI 眼图不理想时,常见影响因素大概有几类:
PHY drive / swing / pre-emphasis 参数
这类参数会直接影响幅度、上升沿、抖动余量。不同板子走线长度、阻抗、ESD 器件不同,默认值不一定最优。
PCB 走线阻抗和长度匹配
HDMI 是高速差分线,阻抗、等长、过孔、参考平面都会影响眼图。软件调参只能补一部分,板级问题太大时寄存器救不回来。
ESD/共模器件选型
HDMI 线上加的 ESD 如果电容太大,眼图会被明显吃掉。这个坑挺常见:功能能亮,但眼图边沿塌。
电源噪声和时钟抖动
HDMI PHY 供电、PLL、参考时钟如果噪声大,也会反映到 jitter 上。
测试模式不稳定
系统动态切分辨率、热插拔、EDID 自动选 mode 时,测试条件不固定,眼图结果也会飘。
如果硬件设计基本没问题,可以尝试从 HDMI PHY 参数入手。一般关注几类:
TX drive strength / output swing;
pre-emphasis / de-emphasis;
PLL 相关参数;
lane 参数是否一致;
不同分辨率下是否使用了不同参数表。
调试时不要一次改一堆。建议固定 1080p60,一个参数一个参数扫,记录眼高、眼宽、jitter 变化。否则很容易调到最后不知道是哪一项起作用。
HDMI 眼图不能只测一个低分辨率就放心。建议至少分几档:
720p60:基础链路;
1080p60:常用高负载;
如果项目需要 4K 或高刷新,再测对应最高规格。
如果 720p60 很漂亮,1080p60 很差,通常说明高速裕量不足;如果低分辨率都差,就先回头查硬件走线、ESD、电源、PHY 默认参数。
软件这边主要确认:
实际输出 mode 是否和测试预期一致;
HDMI clock/pixel clock 是否正确;
PHY 参数是否真的写进去;
热插拔后是否重新初始化 PHY;
U-Boot 和 Linux 阶段是否用了不同 HDMI 参数。
有些问题是 U-Boot logo 眼图一套,进 Linux 后又重新初始化成另一套。认证测试时要确认当前运行阶段到底是谁在控制 HDMI PHY。
如果软件参数怎么调都不稳定,建议查板子:
HDMI 差分线 100Ω 阻抗;
P/N 等长、lane 间等长;
过孔数量和 stub;
参考地连续性;
ESD 器件电容;
HDMI 5V 和 PHY 电源纹波;
连接器附近是否有不必要分叉。
尤其是 ESD,很多板子为了“保护”选了不适合高速 HDMI 的器件,最后眼图直接被保护没了。
我会按这个顺序来:
固定输出 1080p60,确认 mode 不乱跳;
用短好线、标准 fixture 测连接器端眼图;
如果眼图差,先换线/去掉转接因素复测;
查 ESD 和走线,再看电源噪声;
最后扫 PHY swing/pre-emphasis;
对比 U-Boot 和 Linux 下的 HDMI 参数是否一致。
简单说,HDMI 眼图是软硬件一起背锅的地方。软件能调 PHY,让边沿和幅度更合适;但如果 PCB、ESD、供电本身把高速信号搞坏了,寄存器只能救一点点。调试时先固定测试条件,再分硬件链路和 PHY 参数两条线排,会比盲目改 dts/驱动快很多。
离线