HDMI系统架构被定义为源和接收器。 给定的设备可以具有一个或多个HDMI输入和一个或多个HDMI输出。 这些设备上的每个HDMI输入都应遵循HDMI Sink的所有规则,每个HDMI输出都将遵循HDMI Source的所有规则。
如图3-1所示,HDMI电缆和连接器携带组成TMDS数据和时钟通道的四个差分对。 这些通道用于承载视频,音频和辅助数据。 此外,HDMI还携带VESA DDC频道。 DDC用于单个源和单个接收器之间的配置和状态交换。 可选的CEC协议在用户环境中提供所有各种视听产品之间的高级控制功能。
音频,视频和辅助数据在三个TMDS数据通道中传输。 通常以视频像素速率运行的TMDS时钟在TMDS时钟通道上传输,并被接收机用作三个TMDS数据通道上数据恢复的频率参考。 在源中,TMDS编码将每个TMDS数据信道的8位转换为10位直流平衡,转换最小化序列,然后以10位每个TMDS时钟周期的速率串行传输。
视频数据可以具有24,30,36或48位的像素大小。 默认的24位颜色深度的视频以等于像素时钟速率的TMDS时钟速率进行。 使用相应更高的TMDS时钟速率承载较高的色深。 可以使用像素重复方案来传输TMDS速率低于25MHz的视频格式(例如,480i / NTSC为13.5MHz)。 视频像素可以以RGB,YC BCR 4:4:4或YCBCR 4:2:2格式编码。
为了在TMDS通道之间传输音频和辅助数据,HDMI使用数据包结构。 为了获得音频和控制数据所需的更高的可靠性,该数据用BCH纠错码进行保护,并使用专门的减少误差编码进行编码,以产生发送的10位字。
基本音频功能由单个IEC 60958 L-PCM音频流组成,采样速率为32kHz,44.1kHz或48kHz。 这可以适应任何正常的立体声流。 可选地,HDMI可以以高达192KHz的采样率和3至8个音频通道携带这样的音频。 HDMI还可以承载高达24.576Mbps的比特率的IEC 61937压缩(例如环绕声)音频流。 HDMI还可以携带2至8个通道的一位音频和一个称为DST的一位音频的压缩形式.DODC由源使用以读取Sink的增强型扩展显示标识数据(E-EDID),以便发现 Sink的配置和/或功能。
如图5-1所示,HDMI链路包括三个TMDS数据通道和一个TMDS时钟通道。 TMDS时钟信道以与传输视频的像素速率成比例的速率不断运行。 在TMDS时钟通道的每个周期期间,三个TMDS数据通道中的每一个发送10位字符。 该10位字使用几种不同编码技术之一进行编码。
传输到源编码逻辑的输入流将包含视频像素,数据包和控制数据。 分组数据由音频和辅助数据以及相关的纠错码组成。 这些数据项以各种方式处理,并作为2位控制数据,4位分组数据或每TMDS通道8位视频数据提供给TMDS编码器。 源编码这些数据类型之一,或在任何给定的时钟周期编码一个保护带字符。
HDMI链接以三种模式之一运行:视频数据周期,数据岛周期和控制周期。 在视频数据周期期间,传输有效视频线的有源像素。 在数据岛期间,使用一系列数据包发送音频和辅助数据。 当不需要传输视频,音频或辅助数据时,使用控制周期。 任何两个不是控制周期的周期之间需要一个控制周期。
下图显示了每个周期布局的示例。
视频数据周期使用转换最小化编码来对每个通道8位或每像素总共24位进行编码。
视频数据传输期,HDMI数据线上传送视频像素信号,视频信号经过编码,生成3路(即3个TMDS数据信息通道,每路8位RGB)共24位的视频数据流,输入到HDMI发射器中。24位像素的视频信号通过TMDS通道传输,将每通道8位的信号编码转换为10位,在每个10位像素时钟周期传送一个最小化的信号序列,视频信号被调制为TMDS数据信号传送出去,最后到接受器中接收。
数据包传输期,TMDS通道上将出现音频数据和辅助数据,这些数据每4位被一组,构成一个上面提到的4位数据包,数据包和视频数据一样,被调制为10位一组的的TMDS信号后发出。视频数据传输期和数据包传输期均开始于一个Guard Band保护频带,Guard Band由2个特殊的字符组成,这样设计的目的在于在明确限定控制数据传输期之后的跳转是视频数据传输期。
控制数据传输期,在上面任意两个数据传输周期之间,每一个TMDS通道包含2位的控制数据,这一共6位的控制数据分别为HSYNC(行同步)、VSYNC(场同步)、CTL0、CTL1、CTL2和CTL3。每个TMDS通道包含2位的控制数据,采用从2位到10位的的编码方法,在每个控制周期最后的阶段,CTL0、CTL1、CTL2和CTL3组成的文件头,说明下一个周期是视频数据传输期还是数据包传输期。
下表显示了在每种操作模式下使用的编码类型和传输的数据。
Period | Data Transmitted | Encoding Type |
---|---|---|
Video Data<1> | Video Pixel | Video Data Coding (8bits converted to 10bits) |
Video Data <2> | Guard Band | Fixed 10 bit pattem |
Data Island<1> | Packet Data Audo Samples infoFrame |
TERC4 Coding (4bits converted to 10bits) |
Data Island<2> | Guard Band | Fixed 10 bit pattem |
Control | Control - Preamble HSYNC,VSYNC |
Control Period Coding (2bits converted to 10bits) |
控制周期用于传输前导码。 控制周期也由接受端用于字符同步。 HDCP指定的增强型加密状态信令ENC_EN代码(CTL0:3 =
1001)不得被使用,除非在HDCP指定的机会窗口中作为正确的ENC_EN。
在每个视频数据周期或数据岛周期之前就是前导码(控制周期)。
这是八个相同控制字符的序列,表示即将到来的数据周期是视频数据周期还是数据岛。 CTL0,CTL1,CTL2和CTL3的值表示以下数据周期的类型。
剩余的控制信号,HSYNC和VSYNC可能会在此序列期间变化。
只有两个合法的序言字符:
CTL0 | CTL1 | CTL2 | CTL3 | Data Period Type |
---|---|---|---|---|
1 | 0 | 0 | 0 | Video Data Period |
1 | 0 | 1 | 0 | Data Island Period |
视频数据周期类型表示以下数据周期包含视频数据,从视频保护频带开始。
Data Island类型表示以下数据周期是一个符合HDMI标准的Data Island,从Data Island Guard Band开始。
数据岛前导码控制码(CTL0:3 = 1010)不得发送,除非在前导码期间正确使用。
TMDS接收器需要确定串行数据流中字符边界的位置。 一旦在所有数据通道上建立了字符边界,则将Sink(接受端)定义为与串行流同步,并可从数据通道恢复TMDS字符进行解码。 TMDS数据流提供用于解码器同步的周期性线索
在视频数据周期和数据岛期间使用的TMDS字符包含五个或更少的转换,而在控制周期期间使用的TMDS字符包含七个或更多个转换。 在控制周期期间发送的字符的高转换内容构成了解码器处的字符边界同步的基础。 虽然这些字符在串行数据流中不是单独唯一的,但是它们足够相似,以致于解码器可以在发送过程中唯一地检测到它们的连续存在
同步间隔。 此检测的确切算法是超出本文档范围的实现细节,但定义了Sink同步的最小条件。
在任何控制周期期间,要求Sink建立与数据流的同步,其长度大于或等于tS,min(12)个字符
根据表5-4,源也需要偶尔传输扩展控制周期。
参数 | 描述 | 值 | 单位 |
---|---|---|---|
t(s)(min) | 最短持续时间控制期 | 12 | T(PIXEL) |
t(EXTS)(max_delay) | 延长的控制周期之间的最长时间 | 50 | msec |
t(EXTS)(min) | 延长的控制周期最短持续时间 | 32 | T(PIXEL) |
视频数据周期用于承载有效视频行的像素。
每个视频数据周期前面都有一个前导码,如上所述。
在序言之后,视频数据周期以两个字符的视频前导保护带开始。 视频数据周期没有追尾保卫带。
在有效视频期间,在每个TMDS时钟周期期间使用TMDS转换最小化编码对24位像素数据进行编码
//视频数据前导保护带值
case (TMDS Channel Number):
0: q_out[9:0] = 0b1011001100;
1: q_out[9:0] = 0b0100110011;
2: q_out[9:0] = 0b1011001100;
endcase
Data Island用于携带音频采样数据和辅助数据。 该辅助数据包括InfoFrames和描述活动音频或视频流或描述源的其他数据。
每个数据岛前面都有一个前导码,如上所述。
在前导码之后,每个Data Island都以一个保护频带为主导。 然后Data Island的第一个数据包紧随其后。
在Data Island的每个TMDS时钟周期(包括保护频带)期间,TMDS通道0的0和1位传输HSYNC和VSYNC的编码形式。
TMDS通道0的位2用于传输数据包头。 TMDS通道1和2的所有4位用于分组数据,如图5-3所示。 每个数据包长32像素,由BCH ECC保护,用于纠错和检测。
在数据岛期间,三个TMDS通道中的每一个传输使用TMDS误差减少编码(TERC4)从4位输入字编码的一系列10位字符。 TERC4通过选择仅具有高内在错误避免的10位代码,显着降低链路上的错误率。
跟随最后一个数据包的,Data Island的最后两个字符是追踪保护带。
在Data Island之后,所有三个通道恢复为发送控制字符。
源(发送端)需要确定数据岛相对于视频信号的水平和垂直消隐周期和同步信号的时间位置和持续时间。
应按照下列规则进行。
数据岛内的前两个数据字符是前导保护带。 数据岛内的最后两个数据字符是结尾保护带。
在数据岛保护带期间,通道0被编码为四个TERC4值之一。 根据HSYNC和VSYNC的值,这些TERC4值(D [3:0])为0xC,0xD,0xE和0xF。
//数据岛前导和结尾保卫带值
case (TMDS Channel Number):
0:q_out[9:0] = n.a.;
1:q_out[9:0] = 0b0100110011;
2:q_out[9:0] = 0b0100110011;
endcase
Data Island内的所有数据都包含在32个时钟数据包中。 分组包括分组报头,分组主体(由四个子分组组成)和相关联的纠错位。
每个子分组包括56位数据,并由另外8位BCH ECC奇偶校验位保护。
分组0加上相应的奇偶校验位构成BCH块0.该块被映射到通道1和通道2的位0上。以这种方式,BCH块0的64位在32个像素的过程中传送。 类似地,BCH块1(子分组1加奇偶校验)映射到通道1和2的位1。
在下表中,头字节表示为HB0,HB1和HB2,Subpacket字节表示为SB0〜SB6。
为了提高数据的可靠性和改进不良数据的检测,每个数据包都添加了纠错码(ECC)奇偶校验。 BCH(64,56)和BCH(32,24)由图5-5所示的多项式G(x)生成。
G(x)= 1 + x6 + x7 + x8(127计数重复周期)。
分组报头包含24个数据位,另外8位BCH(32,24)ECC奇偶校验。 这些奇偶校验位通过数据包头的24位计算。
分组报头包括8比特分组类型和16比特的分组特定数据。 接受端应能够接收HDMI1.0规范中定义的任何数据包,无任何不利影响,包括CEA-861-D中定义的InfoFrame类型的任何InfoFrame数据包。
Table 5-7 Packet Header
Byte\Bit# | [7 : 0] |
---|---|
HB0 | Packet Type |
HB1 | packet-specific data |
HB2 | packet-specific data |
Table 5-8 shows the available packet types.
Source可以随时使用Null数据包。 Null数据包的所有字节未定义,只能包含零值。 HDMI 接受端将忽略Null Packet Header的字节HB1和HB2以及Null Packet Body的所有字节。
Table 5-9 Null Packet Header
(由于暂时不涉及音频,这部分先省略)
CEA-861-D中定义的所有InfoFrames可以使用HDMI InfoFrame数据包跨HDMI连接。 CEA-861-D或本规范中未定义的InfoFrames不得传输。
每个HDMI InfoFrame数据包都带有一个CEA InfoFrame,如下所示。 请注意,HDMI为CEA-861-D未涵盖的几个InfoFrames添加额外要求。 有关这些附加的细节和限制,请参见第8.2节。
由编码器产生的TMDS字符串被串行化以在TMDS数据信道上传输。 在下面的讨论中,每个字符的最低有效位(q_out [0])是要发送的第一个位,最高有效位(q_out [9])是最后一位。
每个TMDS通道具有两个控制信号,它们在控制周期内被编码为10位。 对于三个通道中的每一个,这些信号如表5-34所示。
Table 5-34 Control-signal Assignment
TMDS Channel | D0 | D1 |
---|---|---|
0 | HSYNC | VSYNC |
1 | CTL0 | CTL1 |
2 | CTL2 | CTL3 |
三个TMDS通道中的每一个的两个控制信号被编码如下:
case (D1,D0):
0,0: q_out[9:0]=0b1101010100;
0,1: q_out[9:0]=0b0010101011;
1,0: q_out[9:0]=0b0101010100;
1,1: q_out[9:0]=0b1010101011;
endcase;
在数据岛周期期间使用TMDS差错缩减编码(TERC4),将每个通道的4位编码为串行化和发送的10位。
case (D3, D2, D1, D0):
0000: q_out[9:0] = 0b1010011100;
0001: q_out[9:0] = 0b1001100011;
0010: q_out[9:0] = 0b1011100100;
0011: q_out[9:0] = 0b1011100010;
0100: q_out[9:0] = 0b0101110001;
0101: q_out[9:0] = 0b0100011110;
0110: q_out[9:0] = 0b0110001110;
0111: q_out[9:0] = 0b0100111100;
1000: q_out[9:0] = 0b1011001100;
1001: q_out[9:0] = 0b0100111001;
1010: q_out[9:0] = 0b0110011100;
1011: q_out[9:0] = 0b1011000110;
1100: q_out[9:0] = 0b1010001110;
1101: q_out[9:0] = 0b1001110001;
1110: q_out[9:0] = 0b0101100011;
1111: q_out[9:0] = 0b1011000011;
endcase;
以下是在视频数据传输期间使用的编码算法的描述。 给出了编码器的详细描述。 其他实现是可能的,并且是允许的,但是给定相同的输入字符序列,它们需要产生由所述编码器生成的相同的输出(10位)字符序列。
在每个10位字符表示8位像素数据的视频数据期间,编码字符提供近似的直流平衡以及数据流中的转换次数的减少。 有效数据周期的编码过程可以分两个阶段来看待。 第一级从输入8位产生转换最小化的9位代码字。 第二阶段产生一个10位代码字,即完成的TMDS字符,用于管理发送的字符流的整体直流平衡。
由编码器的第一级产生的9位代码字由输入8位中发现的转换的8位表示加上一位标志,以指示两种方法中的哪一种用于描述过渡。 在这两种情况下,输出的LSb与输入的LSb匹配。 在建立起始值时,输出字的剩余7位从具有先前导出的位的输入的每个位的顺序异或(XOR)或异或(XNOR)函数导出。 使得XOR和XNOR逻辑之间的选择使得编码值包含尽可能少的转换,并且代码字的第九位用于指示是否使用XOR或XNOR函数来导出输出代码字。 9位代码字只是将XOR或XNOR门应用于代码的相邻位,LSb从解码器输入传送到解码器输出不变。
编码器的第二级通过选择性地反转由第一级产生的9位代码字的8个数据位来对所发送的流执行近似的直流平衡。向代码字添加第十位,以指示何时进行反转。编码器根据其在发送流中跟踪的1和0之间的运行差异以及当前码字中发现的1和0的数量确定何时反转下一个字符。如果传输太多,并且输入包含比零更多的一个,则代码字被反转。基于TMDS字符的第十位,通过输入码字的条件反转,在源处简化了对源的动态编码判定。 TMDS代码映射由图5-7指定,表5-35的定义。编码器产生460个唯一的10位字符之一。编码器在视频数据周期期间不得生成任何其他10位字符。
在输入视频数据周期时,编码器将数据流视差(cnt)视为零。
Table 5-35 Encoding Algorithm Definitions
标识 | 描述 |
---|---|
D | 编码器输入数据组。 D是8位像素数据 |
cnt | 这是一个用于跟踪数据流差异的寄存器。 正值表示已发送的超过“1”的数字。 负值表示已发送的超出“0”的数字。 表达式cnt {t-1}表示前一组输入数据的差异的先前值。表达式cnt(t)表示当前输入数据组的新视差设置。 |
q_m | 中间值 |
q_out | 这10位是编码的输出值。 |
N1{x} | 该运算符返回参数“x”中“1”的个数 |
N0{x} | 该运算符返回参数“x”中“0”的个数 |
TMDS解码映射如图5-8所示。 可选的实施方式是可能的,但是,在给定相同的输入数据流的情况下,它们需要生成与所述解码器算法相同的输出数据流。