4. HDMI协议架构:物理层、数据链路层、应用层三层结构、EDID与DDC通道、HPD热插拔检测

HDMI这个接口,大家天天见。但你真的了解它内部是怎么工作的吗?

我个人习惯把HDMI协议拆成三层来看:物理层、数据链路层、应用层。这样理解起来特别清晰。就像盖房子,先打地基,再砌墙,最后装修。咱们一层层说。

4.1 物理层:信号传输的“高速公路”

物理层,说白了就是信号怎么从A点跑到B点。HDMI用了4对差分信号线——3对TMDS数据通道,1对TMDS时钟通道。

为什么用差分?抗干扰能力强啊。你想想看,两根线走同样的路径,外部噪声同时耦合到两根线上,接收端一相减,噪声就抵消了。我在项目中遇到过,有一次板子布线没注意差分等长,结果1080p都跑不稳,画面时不时闪雪花。后来重新走线,把等长控制在5mil以内,问题就解决了。

关键参数:

  • 差分阻抗:100Ω ± 10%
  • 对内等长:≤ 5mil
  • 对间等长:≤ 20mil
  • 单端阻抗:50Ω

TMDS(Transition Minimized Differential Signaling)是HDMI物理层的核心技术。它把8位数据编码成10位,目的是减少信号跳变次数。为什么?跳变越少,电磁辐射越小,信号质量越好。

我的经验:做HDMI layout时,TMDS线一定要远离晶振、DC-DC这些干扰源。我曾经有个项目,TMDS线离一个1.8V的DC-DC太近,结果4K分辨率下一直有横纹干扰。后来把线拉开,中间加了一排地孔,问题才解决。

4.2 数据链路层:数据怎么“打包”和“拆包”

物理层只管传比特流,但数据链路层要管这些比特流怎么组织成有意义的数据包。

HDMI的数据链路层主要处理三种数据:

  • 视频数据:RGB或YCbCr格式,每个像素24位或更高
  • 音频数据:支持最多32通道,采样率最高192kHz
  • 辅助数据:包括InfoFrames、AVI、SPD等控制信息

这里有个有意思的设计——HDMI用“数据岛”来传输音频和辅助数据。为什么叫“数据岛”?因为视频数据是连续传输的,而音频数据只在消隐期(Blanking Interval)插入。就像大海里的岛屿,视频是海,音频是岛。

我记得刚做HDMI时,有个客户反映声音断断续续。查了半天,发现是音频时钟恢复有问题。HDMI的音频时钟是从TMDS时钟恢复出来的,如果PLL设计不好,音频就会丢包。嗯,这里要注意,音频时钟的抖动必须控制在5ns以内。

4.3 应用层:EDID与DDC通道

应用层,就是HDMI设备之间怎么“握手”和“沟通”。这里面最重要的就是EDID和DDC。

4.3.1 EDID:显示器的“身份证”

EDID(Extended Display Identification Data)是一段128字节的数据,存储在显示器里。它告诉源端:我能支持什么分辨率、什么刷新率、什么色彩格式。

我建议每个做HDMI的工程师都学会读EDID。用I2C工具直接读出来,看看里面的数据对不对。我曾经遇到一个奇葩问题,显示器明明支持4K,但源端只输出1080p。一查EDID,发现厂商把4K的timing写错了,校验和也不对。重新烧录EDID后,问题解决。

EDID关键字段:

字节偏移 内容 说明
0x00-0x07 Header 固定为00 FF FF FF FF FF FF 00
0x08-0x0F 厂商ID和产品代码 标识制造商和型号
0x36-0x47 标准Timing 支持的标准分辨率列表
0x7E 校验和 所有字节之和应为0

4.3.2 DDC通道:I2C通信

DDC(Display Data Channel)就是I2C总线,用来传输EDID数据。HDMI的DDC通道使用I2C地址0xA0(写)和0xA1(读)。

这里有个坑——DDC的I2C速率只有100kHz,不能太快。我见过有人想提高速率,结果通信不稳定,EDID读不全。老老实实用100kHz,别折腾。

避坑指南:我曾经遇到DDC上拉电阻选错导致的问题。电阻太小,I2C信号上升沿太陡,产生过冲;电阻太大,上升沿太缓,时序不满足。一般选4.7kΩ比较稳妥,但要根据实际负载电容调整。

4.4 HPD热插拔检测

HPD(Hot Plug Detect)是HDMI的第19脚。它的作用很简单——告诉源端:显示器连上了,或者断开了。

HPD的工作原理是这样的:

  • 显示器未连接时,HPD为低电平(0V)
  • 显示器连接后,HPD被拉高到2.4V-5.3V
  • 源端检测到HPD高电平后,开始通过DDC读取EDID
  • 如果显示器断开,HPD变低,源端停止输出

嗯,这里要注意HPD的时序。HDMI规范要求,HPD从低到高的上升时间不能超过100ms。我遇到过一些便宜的显示器,HPD信号有毛刺,导致源端反复检测,画面一闪一闪的。解决办法是在HPD引脚上加一个10kΩ的下拉电阻和一个100nF的滤波电容。

我的习惯:做HDMI源端设计时,我会在HPD引脚上加一个施密特触发器,比如SN74LVC1G17。这样能有效滤除噪声,避免误触发。另外,HPD的电压范围是2.4V-5.3V,如果源端是3.3V系统,可以直接连接;如果是1.8V系统,需要电平转换。

4.5 三层架构的协同工作

最后,咱们把三层串起来看看整体流程:

  1. 物理层:显示器通过HPD通知源端已连接
  2. 应用层:源端通过DDC读取EDID,获取显示器能力
  3. 数据链路层:源端根据EDID信息,选择合适的视频格式和音频格式
  4. 物理层:TMDS开始传输编码后的数据
  5. 数据链路层:接收端解码数据,恢复视频和音频
  6. 应用层:显示器显示画面,音响播放声音

你看,整个过程环环相扣。哪一层出问题,都会导致显示异常。我建议做HDMI调试时,先从物理层查起——量HPD电压、看TMDS波形、测差分阻抗。物理层没问题,再查数据链路层和应用层。这样排查效率最高。

好了,HDMI协议架构就讲到这里。下一章咱们聊聊HDMI的电气特性测试,包括眼图、抖动、差分电压这些实战内容。到时候我会分享一些测试中遇到的奇葩问题,保证让你少走弯路。