2. HDMI物理层基础
大家好,欢迎来到第二章。这一章我们聊点硬核的——物理层。说白了,就是信号从芯片出来,到显示器屏幕上亮起来之间,到底经历了什么。我个人习惯是,不把底层摸透,调试起来就像瞎猫碰死耗子。好了,我们直接开干。
2.1 TMDS 编码原理
TMDS,全程 Transition Minimized Differential Signaling,也就是“最小化传输差分信号”。名字很长,其实核心就两个事儿:8b/10b 编码和DC 平衡。
为什么需要编码?你想想看,如果直接把 8 位数据 0/1 怼到线上,可能会出现连续 5 个低电平,或者 7 个高电平。接收端的 PLL 会锁不住时钟,直接就花屏了。
TMDS 的工作原理是这样的:
- 编码阶段:把每 8 位数据转换成 10 位,减少信号翻转次数。
- 串行化阶段:10 位数据以 10 倍像素时钟的速率逐位发送。
- 差分传输阶段:每个 bit 用一对差分线传输。
编码具体怎么做?我截取一段简单的逻辑示例:
// TMDS 8b/10b 编码伪代码(数据通道)
if (ones > 4 || (ones == 4 && data[0] == 0)) {
// 反转数据,使翻转次数最少
q_out = ~data;
invert = 1;
} else {
q_out = data;
invert = 0;
}
// 最后根据 DC 平衡状态,决定是否反转整体信号
这里有个关键点要注意:不是所有的 10b 编码都是合法的。TMDS 标准定义了一些特殊的控制信号编码周期,比如数据使能(DE)和行/场同步信号的编码。我曾经在协议分析仪上见过一个非法的编码序列,查了半天发现是芯片内部 10b 转 8b 的逻辑有个竞争冒险。嗯,这类问题特别隐蔽。
2.2 差分信号特性
TMDS 用的是差分信号,一对线走两个相反的电压,在接收端做减法还原。好处是抗共模噪声能力强。我这里说说实际项目中要注意的几个电气特性。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 差模电压摆幅 | 400 ~ 600 mV | 通常在 500 mV 左右 |
| 共模电压 | 3.3 V 或 1.8 V | HDMI 1.4b 以前多为 3.3V,2.0 以后用 1.8V 较多 |
| 上升/下降时间 | 75 ~ 150 ps | 太慢导致眼图闭合,太快产生 EMI |
| 抖动(峰峰值) | < 0.25 UI | UI 即单位间隔,1/bitrate |
为什么特别强调共模电压?我记得有一次在产线上,同一批次 PCB,有的板子能过认证,有的就不行。最后定位到是电源供电层的 DC 阻抗不匹配,导致共模电压漂了 100 mV 以上。差分对其实对共模变化很敏感,一偏,接收端共模抑制比就不够了。
还有眼图。说白了,眼图就是高速信号的“心电图”。闭合的眼睛说明抖动大、噪声高,这种信号到了显示器那边就是雪花点。
2.3 时钟通道与数据通道
HDMI 的标准配置是:3 条数据通道 + 1 条时钟通道。每条通道物理上都是一对差分线。
- 时钟通道:传输像素时钟。所有数据通道都以此时钟为基准做源同步。
- 数据通道 0:传输蓝色分量 + 行/场同步信号(嵌入在控制周期里)。
- 数据通道 1:传输绿色分量。
- 数据通道 2:传输红色分量。
具体来说,数据流量可以细分为三种周期:
- 视频数据周期:传输有效像素数据(R/G/B)。
- 控制周期:传输行/场同步、辅助数据(如 AVI InfoFrame)。
- 前导周期(Preamble):控制周期开始前的一组固定序列,用于接收端检测状态切换。
这里有一个很隐蔽的坑:时钟通道与数据通道之间的时序偏斜(Skew)必须控制在一定范围内。HDMI 1.4b 要求所有通道相对于时钟的 skew 小于 0.2 Tbit(一个 bit 周期的 20%)。也就是说,在 3.4 Gbps 的速率下,一个 bit 周期只有 294 ps,0.2 Tbit 就是约 59 ps。你得确保 PCB 布线时,4 对差分线的长度差控制在 0.5 英寸以内。我曾经就因为一根线长了 0.7 英寸,整块板子怎么调都过不了眼图模板。
最后说说我个人的一个习惯:测试 TMDS 信号时,永远先看时钟通道的幅值和抖动。时钟干净,数据再乱也有线索可查。时钟本身有严重抖动或幅值偏低,后续的分析全是徒劳。你想想看,一个抖动的时钟,所有数据通道以它为基准,那数据采集自然也是抖的。这个思路在做信号完整性分析时非常关键。