工作需要设计HDMI1.4/2.0 IP,支持4K视频的需求。因此,近期对HDMI的相关SPEC进行了阅读,在这里进行总结,记录个人的知识成长的过程。

        本文将从一下7个方面,讲述自己对HDMI 1.4b spec相关内容的理解。因为,工作需求是只需要支持4K视频的接受和传输,不涉及音频,所以略去了HDMI中Audio部分的内容。

1, Overview

2, Signaling and Encoding

3, Video

4, Control and Configuration

5, Compatibility with DVI

6, EDID and E-EDID

7. HDCP

1. Overview

图 1 HDMI Block Diagram

        首先,是对HDMI的整体结构的一个介绍。

        如图1所示是HDMI的Block Diagram, 主要分为5个部分。

        第一个部分是视频/音频数据,控制信息,参考时钟信息的传输。从图1可以看到,根据数据流,Video[7:0],Audio[3:0],Control[1:0]进入HDMI Transmitter,经过DC平衡重编码后,Video, Audio, Control信息分时复用3对TMDS Channel0 - TMDS Channel2的差分信号对传输给外部,在图中是直接给了HDMI Receiver, 这里要注意的是进入HDMI Transmitter的Video,Audio,Control的数据位宽是固定的,即Video位宽为8,Audio位宽为4, Control位宽为2。这里的数据位宽要注意和系统中的像素个数数据位宽(每个时钟的像素数位宽),和单像素数据深度位宽(像素深度 - Color Depth)区分。就是不论像素数据位宽如何变,Video位宽时钟为8,后续会看到,会将不同的像素数据位宽以8 bit为单位进行分组打包传输。这个点很重要的原因是,因为本人也是第一次做HDMI设计,在做系统的带宽平衡分析时,产生了困惑。 TMDS Clock Channel是将HDMI Transmitter中的Pixel clock进行了差分后输出给HDMI Receiver作为参考时钟。这里的Pixel clock的时钟和TMDS Data channel0 - TMDS Data channel2的时钟频率值不同,如果是上下沿触发就是差了5倍,如果是单沿就是差了10倍。 

        第二个部分 Display Data Channel(DDC)。该总线类型本质是IIC总线,目的是在HPD信号线,显示有HDMI Transmitter连接了HDMI Receiver后,通知HDMI Transmitter去读取HDMI Receiver中的EDID(128Byte)或者E-EDID(256 Byte),里面含有HDMI Reciver所支持的显示的分辨率,厂商等信息,以便HDMI Transmitter能够发送HDMI Reciver支持的视频编码格式,以及显示分辨率等。当然,在设计测试过程中,发现市面上的HDMI Transmitter,例如视频盒子等,并不是都会支持DDC通道,或者某些生产的HDMI Transmitter在设置输出格式后,不会理会HDMI Receiver是否支持。

        第三个部分 CEC:该通道是可以选择实现的提供高层次控制功能的。例如如果有一个显示屏和一个播放盒子,那么可能会下意识的认为需要两个遥控器来分别进行控制,但是因为有了CEC通道,便可只需要一个遥控器,就能实现两个设备的控制了。

        第四个部分 HEAC:该通道从SPEC上的介绍来看,说的是,在连接的设备和音频之间提供以太网兼容的数据网络。因为,工作需求没有涉及,所以并没有细看,这里就没有详细讲解了。

        第五个部分 HPD: 全称为Hot Plug detected,就是热插拔信号了。标识是否HDMI Transmitter和HDMI Receiver连接好了。

2, Signaling and Encoding

        关于Signaling and Encoding部分,个人认为应该算是HDMI的最核心的部分了。我将从一下4个方面进行介绍。

2.1 Overview

2.2 Control Period

2.3 Video Data Period

2.4 Data Island Period -- Vendor-Specific Info, AVI Info

2.1 Overview

图 2 Signaling and Encoding Diagram

        HDMI Transmitter在进行数据编码的结构如图2的左侧所示。Pixel component(B,G,R)对应就是Video[7:0]; HSYNC,VSYNC,CTL0,CTL1,CTL2,CTL3对应的就是Control[1:0], Auxiliary Data对应的就是Audio[3:0],但是该通道不仅传递Audio,还是传递和视频信息相关的其他数据包,Audio数据包只是其中一种,因此,在图1中的Audio[3:0],更准确的说是Auxiliary[3:0]。在这里可以看到,在传递Auxiliary Data数据包时,3个编码模块,一个模块用于编码Packet Header的传输,另外两个模块用于编码Packet Body的传输。后续会详细进行说明。

        我们知道,HDMI TMDS Link只有3对TMDS数据差分对,因此Pixel Data, Auxiliary Data, Control Data,这三种数据的传输是采用了分时传输的模式。如图2所示中的时序图,是一个720x480的时序,浅灰色的是传输Control Data的阶段,称为Control Period,深蓝色的是传输Auxiliary Data的阶段,称为Data Island Period, 深灰色的是传输有效Pixel data的阶段,称为Data Period。因此,这里我们知道了HDMI传输一帧数据,由三个period组成,分为Control Period, Data Island Period, Data Period。这里从图中也可以看出,在两个非Control Period中一定有一个Control Period.

        从图2的最右边的表格,我们可以看到,对于Video Data Period,传输的数据有两种,一种是Video Pixels,也就是实际像素数据,DC编码方式采用Video Data Coding,将 8bits 数据转换成10bits数据。另一种就是Guard Band,保护带数据,用于同步的,采用固定的10 bit patterm。对于Data Island Period,传输的数据有两种,一种是Packet Data(Auxiliary Data和HSYNC,VSYNC),这里的HSYNC,VSYNC其实就是Control Period中的HSYNC,VSYNC。采用TERC 4 Coding, 将4 bits数据转换成10bits数据传输,也是做一个DC平衡。另一种是Guard Band,同样是Fixed 10 bit patterm,和Video Data Period中的Guard值是不同的。Control Period传输的数据就是Control data(Preamble,HSYNC,VSYNC),Preamble就是前导码,用来表示该Control Period后跟着的是Video Data Period还是Data Island Period,也是一种同步码。

2.2 Control Period

图 3 Control Period Info

        如图3所示,是Control Period关于Data Period Type的Preambles编码,各TMDS Channel对应的CTLx输入 以及Control Period Encoding值。{CTL0,CTL1,CTL2,CTL3} = 4'b1000时,Preambles为Video Data period的;{CTL0,CTL1,CTL2,CTL3}=4'b1010时,Preambles为Data Island Period的。这里有个注意点是Control Period会发送连续8个字符长的Preambles。

        这里要注意的时,我们要知道,0-1或者1-0的转换次数被HDMI Receiver的decoder用来进行边界同步。在Video Data Period和Data Island Period中编码传输的数据的0-1或1-0的转换次数是小于等于5次的,而在Control Period中的转换次数则是大于等于7次的。依靠跳变次数,HDMI Receiver便能区分Control Period什么时候结束,后续的Video Data Period和Data Island Period什么时候开始。同时,之前我们说过了,在两个非Control Period中间,一定会有一个Control Period的规定,这个规定就要求了不会出现Video Data Period和Data Island Period连续出现的情况了。

2.3 Video Data Period

图4 Video Data Period Info 

        图4 显示的是Video Data Period的编码方式,解码方式以及在Video Data Period中的Leading Guard编码值。首线,当一个Control Period结束后,后续的如果是Video Data Period,那么HDMI Transmitter会先用如图4中的Video Leading Guard Band Encoding,传输2个字符长度的Leading Guard Band,然后再开始传输Pixel Data编码数据,DC编码使用如图4左侧的编码方式进行8bits 到10bits的DC平衡后,在TMDS上串行传输。图4右侧的解码方式则是与图4左侧的编码方式相对应即可。

2.4 Data Island Period

图5 Data Island Period Info

         图5是Data Island Period中的,Leading and Trailing Guard Band的编码以及TERC4数据编码.

        与Video Data Period不同的是,Data Island Period中,既有Leading Guard Band也有Trailing Guard Band,相同是,在发送Guard Band的时,都会发送连续2个字符长度。这里要注意的是,对于TMDS Channel0的Leading and Trailing Guard Band,是对0xC,0xD,0xE,0xF,进行如图5右侧所示的TERC4编码后的数据。

图6 Data Island Period Structure 

                图6所示是,Data Island Period中,Auxiliary Data是怎么组成一个Packet的,一个Packet分成了4 Bytes 的Header和32 Bytes的Body。如图6左侧所示,我们知道3个channel0-2,输入的Auxiliary Data位宽都为4。对于Channel0,其最低两位是HSYNC,VSYNC,第三位用于独立传输packet header数据,就是32 bits(4 Bytes),第四位则没有任何作用,对于Channel1和Channel2,则是按如图所示的方式进行交替组合,形成4个block,组成32 Bytes 的Packet Body,每个block都有一个Byte的parity bits,因此Packet Body的有效数据为28个Bytes。对于Packet Header,其格式如图6右上角所示,一个Byte表示Type,两个Byte为Paket-specific data,和Type相关。对于Packet Body,其格式与Packet Header中的Type相关。在设计过中,我在图中标记出的General Control, Vendor-Specific InfoFrame, AVI InfoFrame,我认为是很关键的,General Control主要和3D 视频格式相关,里面会传递3D Structure相关的信息,而Vendor-Specific InfoFrame和AVI InfoFrame则有着更丰富的附加视频格式信息,后面会进行详细介绍。

图7 TMDS Periods and Encoding 

        图7所示为TMDS channels传输各Periods的时序图,该图以Control Period -> Data Island Period -> Control Period -> Video Data Period顺序传输。从图可以看到,首先,传递Control Period结束时,会连续传输8个字符长的Preamble,指明后续的Period为Data Island Period;然后,在Data Island Period传输实际有效数据是,会先传输连续2个字符长的Leading Guard Band,接着传输32个字符长的Packet,这里要注意一个Packet大小统一为32字符长,在一个Data Island Period可以传输多个Packet,但是是有上限的。上限的大小我忘了,具体值,可以参考HDMI 1.4b SPEC。紧接着,在Data Island Period结束时,将连续传输2个字符长的Trailing Guard Band用于同步。之后,Control Period开始,在该Control Period结束时,将连续传输8个字符长的Preamble,表示后续Period是Video Data Period,在Video Data Period开始时,将连续传输2个字符长的Leading Guard Band,然后传输Active Video Pixels。

4, Control and Configuration

关于HDMI 的Control and Configuration,主要是关于在Control Period中发送的各种类型的Packet。具体的可以参考HDMI 1.4b SPEC。

5, Compatibility with DVI

我们知道HDMI是DVI的发展,因此,HDMI是需要兼容DVI 1.0的。因此,对于涉及的HDMI Transmitter和HDMI Receiver有着对DVI 1.0的要求。

5.1  Requirements

        对于HDMI Transmiter(1)Video pixel要用RGB编码 (2)在Video Data Period中没有Video Guard Bands的传输 (3) 不传输Data Islands。

        对于HDMI Receiver (1) 只使用RGB编码模式进行解码 (2) 在Video Data Period中没有Video Guard Bands的传输 (3) 没有Data Islands传输。

        因为对DVI的兼容,因此,HDMI设备在启动时,首先会以兼容DVI的视频格式进行传输,在读取EDID/E-EDID后,传输满足HDMI传输格式的视频格式。再一次注意,市面上不是所有的HDMI Transmitter都会读取EDID/E-EDID,发送符合HDMI Receiver的视频格式。这是一个小坑。对于EDID/E-EDID,HDCP的介绍将分成另外的独立篇章来介绍。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐