HDMI相关

简单记录相关知识点。

PIN

HDMI引脚定义如图:
HDMI引脚定义.jpg
HDMI端子.jpg

其中

  • 1-9是TMDS数据传输实际上用到的引脚,一共3组
  • 10-12为TMDS时钟信号
  • 13为CEC控制引脚
  • 14为保留引脚
  • 15-16是I2C引脚,用于DDC传输,DDC通道除了用作EDID信息的传输,还用来做HDCP的验证,其对应I2C写地址一般是0x74。EDID的I2C写地址0xA0
  • 17接地
  • 18为5V供电
  • 19为Hotplug引脚

Hotplug

热插拔,当接上接口时就可以判断设备是否存在,以进行后续工作。

当计算机通过HDMI接口与显示器相连接时,主机通过HDMI的18脚向显示器供电,显示器接收到+5V电压后,通过内部电路使HDMI接口第19脚HPD转变为高电平,主机检测到HPD为高电平后,认为主机与显示器已经连接上,于是通过I2C读取显示器的EDID,满足条件后(比如显示器支持主机当前设置的分辨率),做HDCP交互认证,然后TMDS发送电路开始工作,输出图像和声音。

其中有两种Hotplug相关的情况会导致HDMI被识别为DVI:

  • Hotplug为High,不过EDID并没有准备好,那么信号源设备会由于无法读到EDID而认为接收设备为DVI,这样会导致HDMI有图像无声的问题。
  • Hotplug为Low,也会导致信号源无法读到EDID而认为接收设备为DVI,从而导致HDMI有图无声。

在TV这种有多个HDMI通道的情况下,有时会在多个HDMI通道进行切换,切换后HDMI通道应当先初始化,即先把Hotplug拉低,通知HDMI source device之前所用的EDID已经改变,需要重新读取,那么source device在Hotplug被拉高的时候会去读取新的EDID,但是拉低这个过程至少需要100ms,否则source device有可能不会去读取新的EDID,从而输出DVI信号。

EDID

相当于一个身份证,告诉主机,此显示器的参数、支持的特征。包括基本EDID和扩展EDID。存在于程序,由系统初始化,或存在与EEPROM。

  • EDID中有一块数据是VSDB(Vendor-Specific Data Block),如果包含IEEE分配给HDMI的固定数值,则认为是HDMI,否则被认为是DVI。
    HDMI1.4b 的 VSDB (H14b VSDB): 第一个Byte,Length至少是5,最多31;接下来3个Byte是IEEE分配给HDMI的固定数值:030C00h;随后2个Byte是物理地址。以上是至少包含的信息,后续内容为Extension Field。
    vsdb1.4.png
    HDMI2.0 的 VSDB (HF-VSDB): 第1个Byte,Length至少是5,最多31;接下来3个Byte是IEEE分配给HDMI的固定数值:D85DC4h;随后1个Byte是物理地址。以上是至少包含的信息,后续内容为Extension Field。
    vsdb2.0.png
    注意HF—VSDB不能与H14b VSDB相混淆、即使接收端支持HDMI2.0版本,也必须包含H14b VSDB(由HDMI H1.4b)定义,在E-EDID中是否包含是可选的。
    vsdb.png

  • EDID中有一块数据描述了CEC物理地址。

CEC

允许用户控制HDMI接口上所连接的设备。

在HDMI CEC最小系统里,所有通过HDMI连接在一起的设备(包括电视、DVD、机顶盒等)在物理连接上,各自的CEC是全部连接在一起,可以看做,在一条CEC线(标准HDMI接口的第13引脚)上挂着所有的设备。

Youtube上的一堂CEC课,讲得很不错。

Handshake

当一个带CEC功能的设备得到一个新的物理地址时,它将进行如下处理:

  1. 主动申请分配与之设备类型相应的逻辑地址;
  2. 通过广播来报告它的物理地址与逻辑地址的绑定。

CEC Physical Address.png
CEC Physical Address Discovery.png
Physical Address: Root display(TV) is always 0.0.0.0
Logical Address: Root display(TV) is always 0
CEC addressing.png

CEC设备的逻辑地址也是动态分配的,其分配方式如下:

  1. 根节点(通常是TV)直接设逻辑地址:0;
  2. 当设备A插入后,该设备的类型是已知的,因此可以为该设备A预设一个逻辑地址(如DVD,其预设地址为DVD1,即是4),并通过广播此地址;
  3. 当该逻辑地址已经被占用时,对应的占用设备会应答确认信息。设备A收到确认后,重设其他逻辑地址(如:DVD1->DVD2),并广播
  4. 当检测到没有确认时,此逻辑地址可用,因此设备A占用此逻辑地址;
  5. 占用后,发送广播,其中包含了其物理地址和逻辑地址,声明对地址的占用。若询问一圈后,逻辑地址均被占用,则设备A的逻辑地址为15。

Message

总线保持高电平是闲态(IDLE);
要发送消息,看总线是否空闲?如果是,则拉低总线电平,发送,否则,延迟发送;
一条CEC具体传输的指令:起始信号(一个3.7ms低电平+一个0.8ms高电平)+头部数据(起始设备的逻辑地址+接收设备的逻辑地址)+操作码+操作数。

因为,所有设备的CEC都挂在一条线上,所以,大家都能看到所有指令。如果头部数据里的接收逻辑地址是和自己相关的,此设备就会对操作码进行响应,如果头部数据里的接收逻辑地址和自己无关,此设备就忽略这个指令。

CEC通信信息结构模块包括:Header引导块和Data数据块。所有的Header块和Data块都是10bit大小。

Header = 源逻辑地址(source) + 目的逻辑地址(destination) + 信息结束位(EOM) + 应答位(ACK)
Data = 操作码(opcode)/操作数(operand) + EOM(End of Message) + ACK(Acknowledge)
EOM: 0表示还有一个或更多的数据块,1表示消息已完整
CEC Message Structure.png
CEC Protocol.png

例子:Standby指令:起始信号+00FF+0x36;其中,00表示电视的逻辑地址,FF表示广播地址,这里表示所有接收设备的集合,36表示Standby待机操作。此条指令可以翻译为:电视告诉所有设备,大家都进入待机状态。

HDCP

HDCP用于保护版权视频,通过DDC传输。

参考

干货知识:一篇文看懂HDMI1.0到HDMI2.1的规格变化
HDMI介绍与流程
HDMI之HPD
HDMI EDID 处理过程