4、HDMI协议架构:物理层、数据链路层、应用层三层结构、数据包类型概览

好,咱们今天聊聊HDMI的协议架构。很多工程师一上来就盯着电气参数测,其实我觉得,先把协议分层搞明白,后面调试才能事半功倍。

HDMI协议,说白了就是三层:物理层、数据链路层、应用层。嗯,跟OSI七层模型比,它精简了不少。但每一层都有它的脾气,咱们一层一层剥开看。

4.1 物理层:信号能跑多快,全看它

物理层是HDMI的基石。它负责把0和1变成电信号,在TMDS通道上飞。我个人习惯,先看物理层,因为它决定了你的设计能不能过EMI测试。

物理层主要管三件事:

  • TMDS差分信号:四对差分线,三对数据,一对时钟。电压摆幅在400mV到600mV之间。
  • 预加重与去加重:高频信号衰减严重,发射端加预加重,接收端做均衡。我在项目中遇到过,预加重设太大,反而把低频信号压没了,眼图直接闭了。
  • 阻抗匹配:单端50Ω,差分100Ω。这个必须准,否则反射会让你怀疑人生。

核心参数速查表

参数HDMI 1.4HDMI 2.0HDMI 2.1
最大速率3.4 Gbps/通道6.0 Gbps/通道12 Gbps/通道
时钟频率340 MHz600 MHz1200 MHz
编码方式TMDS 8b/10bTMDS 8b/10bFRL 16b/18b

你想想看,HDMI 2.1的速率到了12Gbps,信号上升沿已经快到皮秒级了。PCB走线稍微拐个直角,反射就够你喝一壶的。我曾经因为一个过孔没处理好,导致4K@60Hz死活上不去,最后发现是过孔残桩太长。

4.2 数据链路层:数据怎么打包,怎么纠错

数据链路层,负责把物理层的比特流组织成有意义的数据包。它定义了数据包的格式、同步机制和错误检测。

这里有几个关键概念:

  • 数据岛周期:传输音频和辅助数据。它发生在消隐区,不影响视频。
  • 视频数据周期:传输像素数据。每个像素被编码成10位TMDS字符。
  • 控制周期:传输控制信号,比如HSYNC、VSYNC。

数据链路层还负责BCH纠错码。HDMI 2.1引入了FEC(前向纠错),这在长距离传输时特别有用。我记得有一次调试一个15米的HDMI线,画面偶尔闪一下,打开FEC后,问题就消失了。

调试小技巧:用示波器抓TMDS时钟通道,看时钟是否连续。如果时钟有毛刺或抖动过大,大概率是物理层的问题,别急着查数据链路层。

4.3 应用层:EDID、HDCP、CEC,这些你都得懂

应用层是离用户最近的一层。它定义了设备之间怎么握手、怎么协商、怎么保护内容。

应用层主要包含:

  • EDID:显示器告诉源端,我能支持什么分辨率、什么色深。我建议,调试时先读EDID,很多兼容性问题都是EDID写错了。
  • HDCP:内容保护协议。HDCP 2.2和2.3的握手流程不一样,2.3多了个RSA认证。我曾经遇到一个机顶盒,HDCP 2.2能过,2.3就过不了,最后发现是接收端的密钥存储有问题。
  • CEC:消费电子控制。一个遥控器控制所有设备。CEC的调试很烦,因为它走的是低速单线总线,干扰多。

应用层还有一个容易被忽略的东西——InfoFrame。它携带了视频格式、色彩空间、动态范围等信息。如果画面颜色不对,先查AVI InfoFrame里的色彩空间字段。

4.4 数据包类型概览:你看到的每一帧,都是包

HDMI的数据传输,本质上就是各种数据包的组合。我整理了一下,主要的数据包类型有这些:

包类型用途传输周期
视频数据包传输像素数据视频数据周期
音频数据包传输音频样本数据岛周期
InfoFrame包传输元数据数据岛周期
控制包传输HSYNC/VSYNC控制周期
辅助数据包传输厂商自定义数据数据岛周期

每个数据包都有固定的包头和包体。包头里包含了包类型和版本号。接收端根据包头决定怎么解析后面的数据。

注意:HDMI 2.1的FRL模式下,数据包结构变了。它不再用TMDS字符,而是用16b/18b编码。如果你还在用老方法解析,肯定出问题。

4.5 三层架构的关系:一张图看懂

说了这么多,咱们用一张图把三层架构串起来。这张图是我自己画的,你一看就明白。

应用层 (Application Layer) EDID / HDCP / CEC / InfoFrame 定义设备握手、内容保护、控制命令 数据包:AVI InfoFrame, Audio InfoFrame, SPD InfoFrame 数据链路层 (Data Link Layer) 数据包封装 / BCH纠错 / 同步 定义数据岛周期、视频数据周期、控制周期 数据包:视频包、音频包、辅助包、控制包 物理层 (Physical Layer) TMDS差分信号 / 预加重 / 阻抗匹配 定义电气特性、信号速率、编码方式 HDMI 1.4/2.0: TMDS 8b/10b | HDMI 2.1: FRL 16b/18b 上层 下层 数据流向

这张图很直观。应用层生成数据,交给数据链路层打包,最后物理层发出去。接收端反过来,物理层收信号,数据链路层解包,应用层解析。

嗯,这里要注意。三层之间不是完全独立的。比如HDCP的握手,既涉及应用层的密钥交换,也涉及数据链路层的包封装。调试时,如果HDCP过不去,别只盯着应用层,数据链路层的包格式也可能有问题。

4.6 避坑指南:我踩过的那些坑

最后,分享几个我实际项目中遇到的坑,希望能帮你少走弯路。

  • EDID读取失败:我曾经遇到一个显示器,EDID的校验和算错了。源端读不到正确EDID,直接输出640x480。解决办法:用I2C工具手动读EDID,重新计算校验和。
  • HDCP 2.2握手超时:接收端回复太慢,源端等不及就放弃了。我建议,在HDCP握手期间,不要做其他I2C操作,避免总线冲突。
  • CEC干扰:CEC线跟其他信号线走得太近,导致误触发。解决办法:CEC线单独走,加一个上拉电阻到3.3V。
  • TMDS时钟抖动:电源纹波太大,导致PLL锁不住。我建议,给HDMI芯片单独供电,加LC滤波。

总结一下:HDMI协议三层架构,物理层管信号,数据链路层管包,应用层管内容。调试时,从物理层开始,一层一层往上查。别跳层,否则你会绕很多弯路。


可可精品资料库