一、OverView
HDMI有多组信号线,具体如下:
1. 一组TMDS Clock差分信号线,用于传输时钟信号, TMDS clock 和 Pixel clock存在如下关系
2. 3组 TMDS Channel0/1/2用于传输Video Data/Data Island/Control等数据
3. DDC通道用于EDID/SCDC交互
4. CEC Line用于消费电子控制协议
5. Utility Line用于HEAC(HDMI Ethernet and Audio Return Channel)协议,网络及声音回采功能
6. HPD Line
二、 Pin脚
HDMI有很多中接口类型,HDMI Type A/B/C/D/E
这里列出Type A 的 Pin Assignment
三、信号编码
source编码的输入包括Video pixel/(音频、辅助数据)packets/控制数据(control data),各数据先并行编码(Encoder)为10bit, 然后串行化(Serializer)后输出
Video Data(D[7:0])输入B/G/R数据,然后进行8bit/10bit转换
Data island / Auxiliary Data(D[3:0]) 输入音频数据、source/sink交互数据等,4bit/10bit转换
Hsync/ Vsync / CTL0/1/2/3(D[1:0]) 输入控制数据,包括preamble以及hsyn/vsync等 2bit/10bit转换
四、Operate Mode
HDMI 操作mode分为三类: Video Data Period/ Data Island period/ Control Period
1. control period
主要传输HSYNC/VSYNC以及Preamble(报头),Preamble使用CTL0-CTL3来指定接下来的Data Period是Video Data还是Data Island
2.Video period
主要传输Pixel Data, video period前会有一个Video Leading Guard Band Value,值如下:
3. Data Island Period
传输Audio sample数据 以及辅助数据, Auxiliary data包括各种InfoFrames 以及其他描述当前audio/video信息的数据
Data Island Period的前后都有一个Guard Band,分别为Leading Guard Band和Trailing Guard Band
完整的时序图如下:
五、Data Island packet
Data Island Period 由32个clock期间所Auxiliary Data D[3:0]组成, 共5个BCH block
其中, BCH block4 在Channel0 D2上传输, 由4个字节组成,前3个字节用作packet header(简称HB),最后一个字节是校验位
BCH block0/1/2/3 组成Packet Body,每个block 8个字节,前7个字节用作SubPacket(简称SB),最后一个字节用作校验
5.1. Packet Type
packet类型由Packet Header的第一个字节确定
下面介绍个人比较关注的Packet
5.1.1 Audio Clock Regeneration Packet
用来传递N && CTS, 通过这两个值可以重新计算出audio的采样时钟
N 和 CTS的值在source端确定,通过ACR packet 传递给sink端, sink结合TMDS clock就可以重新计算传音频的采样率了
5.1.2 Audio Sample Packet
Audio的采样数据
5.1.3 General Control Packet
GCP packet用来传输一些通用控制信息,如果AVMUTE、Color Depth等
AVMUTE用来关闭开启sink的音频视频输出,一般在source配置时序前,Set Avmute关闭sink输出,source设置时序后哦,Clear_AVMUTE通知sink端开启输出
5.1.4 InfoFrame packet
InfoFrame packet类型有很多,如下:
具体定义在CEA-861-D中有描述
5.1.5 AVI Info Frame
Auxiliary Video information(AVI) InfoFrame 指定video相关辅助信息
其中,Byte1 用来指定数据格式RGB/YCbCr等
Byte2用来 指定Aspect Ratio(4:3/ 16:9等)
Byte3用来指定色度、量化、缩放等信息
Byte4用来指定时序mode VIC
5.1.6 Audio InfoFrame
包含音频的格式信息等
Data Byte 1 指定编码格式,如AAC/AC-3、PCM等, 以及Channel
Data Byte 2 指定采样率(48k/44.1k等),以及位宽(16bit/20bit/24bit)
HDMI比较特殊,要求CT/SS/SF等字段为0, 这些信息在audio stream header中已经包含,应该是在audio sample packet有这些信息
5.1.7 HDMI Vendor Specific InfoFrame
HDMI VSIF 携带特殊的4kx2k时序信息以及3D信息。
HDMI VIC的值如下:
H14b HDMI_VIC 和 CTA-861-G VIC的对应关系:
H14b VSIF中携带的信息必须是sink端edid CEA extension扩展块HDMI Vendor-Specific Data Block(HDMI VSDB)中指定的,否则sink端无法解析H14b VSIF的信息,比如HDMI_VIC等
HDMI VSDB数据格式如下:
5.1.8 HF VSIF
HDMI Forum Vendor Specific InfoFrame是2.1定义的区别与H14b VSIF的packet包,主要用来携带3D相关信息
HF-VSIF和H14b VSIF使用相同的PacketType(0x81),但他们的IEEE OUI不同,
HF-VSIF OUI = 0xC45DD8
H14b VSIF OUI = 0x000C03
类似HDMI VSDB,EDID中同样存在HDMI Forum Vendor Specific Data Block(HF-VSDB),
携带如下信息:
如果sink端支持SCDC, 则SCDC_Present为1
如果Sink端支持340Mcsc以下加扰,则LTE_340Mcsc_scramble为1
六、Scramble for EMI/RFI Reduction
相比与HDMI 14b , HDMI2.0 TMDS coding过程中,增加了scramble period, 加扰的目的是为了减少电磁干扰(EMI/RFI),当传输的TMDS bit rate 大于 3.4Gbps时,source应当开启加扰,
如果TMDS bit rate < 3.4Gbps, 在sink端支持scramble的情况下(HF-VSDB LTE_340Mcsc_scramble = 1),也可以开启加扰
source 基于SCDC通道读写sink的Scrambling_Enable和Scrambling_Status来使能和判断sink的scramble是否开启
source通过scdc向scrambling_enable写1来使能sink的scramble功能。
source使能sink scramble后发送加扰后的数据,这两者之间的最大时间差为100ms
sink在scrambling_enable被置1之后开始检测加扰控制码,检测到后,会将scrambling_status置1,表示加扰成功
source需要poll scrambling_status直到其值变为1,如果轮询超过200ms scrambling_status仍为0,则加扰失败
七、SCDC(Status and Control Data Channel)
source通过SCDC交互控制sink, scdc本质上仍然是利用Pin15/Pin16的I2C总线,只是sink的slave地址是0xA8/0xA9。
0x20 / 0x21 分别用来开启scramble和查询scramble状态, 其他的寄存器比如0x40/0x50等可以查询sink工作状态是否异常
八、HDR
九、HDCP
十、VRR(Variable Refresh Rate)
十一、CEC
十二、HEAC
十三、DSC(Display Stream Compression)
参考:
1. CEA-861-D/E/F/G
CEA-861标准大全下载:CEA-861标准大全下载欢迎来到CEA-861标准资源库 - GitCode
2. HDMI 1.4b
3. HDMI 2.1
HDMI协议version2.1:HDMI协议 version 2.1欢迎来到HDMI协议version 2.1的资源下载页面 - GitCode