EDID

HDMI EDID的长度一般是256字节,分成2个Block,分别是Block0和Block1
PS:VGA和DVI接口的EDID,是只有一个Block而已,即Block0,共128字节

如果想了解更多EDID的知识,可以参考这篇文章
https://www.cnblogs.com/fire909090/p/10523604.html

Block0

EDID Block0,共128字节,该block的格式是固定的,即每个字段的摆放位置是固定的,因此代码解析起来会相对简单些
一张长图了解一下,如图中的Example Data作为例子,对照来看就明白其中各个字节代表的意思了
在这里插入图片描述

注意:上图有一个First Detailed Timing Descriptor和一个Second Detailed Timing Descriptor,所谓Detailed Timing Descriptor,这里简称DTD,是用来详细描述一个分辨率(时序)的,一个DTD占18字节

Block1

CEA Extension Header

Block1的开头4个字节,名为CEA Extension Header,格式如下

  • Byte0:CEA Extension Tag,固定是0x02
  • Byte1:Revision Number,现在一般是0x03
  • Byte2:是一个DTD的偏移,假设该值是0x50,表示从0x50位置开始就是描述DTD的了
  • Byte3:看下图的解释就明白该字节各个bit代表的意思了

在这里插入图片描述

例如下图EDID的黄色背景部分,就是Block1的头(后面会以这个EDID来举例说明)
在这里插入图片描述

Tag 分类

接下来,Block1里的各个字段(Tag)的位置是不固定的,需要解析Tag类型才知道接下来的数据属于什么Tag数据
具体有哪些Tag类型呢?
常见的EDID,一般会有以下几种Tag类型,至今还在用
一般会有Video Data Block、Audio Data Block、Speaker Allocation Data Block、Vendor Specific Data Block(VSDB)
在这里插入图片描述

具体是哪种类型,由第1个字节的bit7~bit5这3bits决定,3bits的数据就决定了它最多只有8种类型
后5bits表示紧接着该Tag的数据长度
在这里插入图片描述

后续又添加了新的Tag,发现3bits的位宽不够,新的Tag有如下这些
在这里插入图片描述

不过幸好上面3bits最后一种情况是Use Extended Tag,即使用扩展的Tag,所以就有了下图的定义
意思是如果第1个字节的bit7~bit5的值是7(Use Extended Tag),就要看第2个字节了,根据第2个字节的值才知道是什么Tag类型的
在这里插入图片描述

接下来会用一个实际的EDID来分析各个Tag,在此我用三星电视的一个HDMI 2.0 EDID来作为例子说明
只截取它的Block1来分析就好

Video Data Block

看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0x57,bit7~bit5是010,即十进制的2,2对应的Tag是Video Data Block;bit4~bit0是10111,即十进制的23,表示0x57后面还有23个字节,这23个字节都是属于Video Data Block的,即上图的黄色背景部分

接着就要看看这23个字节代表的是什么意思了
每一个字节都叫做Short Video Descriptor(SVD),SVD里包含着Video Identification Code(VIC)
如下图,有两种
第一种VIC是1~64的,bit7是表示该VIC是不是native分辨率,native有最佳分辨率的意思。最佳分辨率也可以是EDID Block0里的第一个DTD
在这里插入图片描述

第二种VIC是超过64的
在这里插入图片描述

这23个字节里的每一个字节都是独立的,VIC是HDMI里面用来表示分辨率的代号,VIC的值都是HDMI标准定义好的,如下3张图
在这里插入图片描述

4K30、4K25、4K24这几个一般会放在VSDB里,但也有放在Video Data Block里的,也有两处都放的
放在VSDB里的VIC分别是1、2、3,后续还会讲到;放在Video Data Block里的VIC分别是95、94、93
在这里插入图片描述

4K50和4K60
在这里插入图片描述

所以分析得到这23个字节分别表示三星电视支持的23种分辨率,列一下

VIC(十六进制)VIC(十进制)分辨率
0x61 97 3840x2160P@60
0x10 16 1920x1080P@60
0x1F 21 1920x1080P@50
0x04 4 1280x720P@60
0x13 19 1280x720P@50
0x05 5 1920x1080I@60
0x14 20 1920x1080I@50
0x20 32 1920x1080P@24
0x21 33 1920x1080P@25
0x22 34 1920x1080P@30
0x5D 93 3840x2160P@24
0x5E 94 3840x2160P@25
0x5F 95 3840x2160P@30
0x60 96 3840x2160P@50
0x65 101 4096x2160P@50
0x66 102 4096x2160P@60
0x62 98 4096x2160P@24
0x63 99 4096x2160P@25
0x64 100 4096x2160P@30
0x07 7 720x480I@60
0x16 22 720x576I@50
0x03 3 720x480P@60
0x12 18 720x576P@50

Audio Data Block

接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0x29,bit7~bit5是001,即十进制的1,1对应的Tag是Audio Data Block;bit4~bit0是01001,即十进制的9,表示0x29后面还有9个字节,这9个字节都是属于Audio Data Block的,即上图的黄色背景部分

接着就要看看这9个字节代表的是什么意思了,它是3个字节成一组,所以此处有3组声音相关的描述,如下图
在这里插入图片描述

Byte1的bit6~bit3表示一种音频格式,有如下几种格式
在这里插入图片描述

当Audio Format Codes是 2 ~ 8 时,Byte3的意思又有新的含义了,如下图
在这里插入图片描述

当Audio Format Codes是 9 ~ 15 时,Byte3的意思又有新的含义了,如下图
在这里插入图片描述

所以分析得到这9个字节分别表示三星电视支持的3种音频格式,列一下

IndexAudio FormatMax ChannelsSample Rates(kHz)Max Bit Rate
ADB1 LPCM 2 32, 44.1, 48 16bit, 20bit, 24bit
ADB2 AC-3 6 32, 44.1, 48 640kHz
ADB3 DTS 6 48 1536kHz

Speaker Allocation Data Block

按部就班,接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0x83,bit7~bit5是100,即十进制的4,4对应的Tag是Speaker Allocation Data Block;bit4~bit0是00011,即十进制的3,表示0x83后面还有3个字节,这3个字节都是属于Speaker Allocation Data Block的,即上图的黄色背景部分

接着就要看看这3个字节代表的是什么意思了,它是3个字节成一组,所以此处有1组喇叭位置相关的描述,如下图
在这里插入图片描述

主要是看Byte1,所以分析得到三星电视只有 FL/FR (前左和前右)两个喇叭,这个Data Block的数据一般很少用

Video Capability Data Block

按部就班,接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0xE2,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00010,即十进制的2,表示0xE2后面还有2个字节,而第2个字节的值是0,对应的是Video Capability Data Block(VCDB),所以最后描述该Data Block的就剩下第3个字节了,即上图的黄色背景部分

接着就要看看这1个字节代表的是什么意思了
在这里插入图片描述

Byte3各个Bit的意思如下图
在这里插入图片描述

bit1~bit0:是否支持 CE video,如 480p, 480i, 576p, 576i, 240p, and 288p, 1080i, 1080p, and 720p,默认用 Limited range
bit3~bit2:是否支持 IT video,默认用 Full range
bit5~bit4:看字面意思,一般是0
bit6:QS,即 Quantization Range Selectable,RGB only. 如果该bit是1,则sink端接收到AVI info里的Q=1时用的是 Limited range,收到AVI info里的Q=2时用的是 Full range
bit7:QY,YCC only. 如果该bit是1,则sink端接收到AVI info里的YQ=0时用的是 Limited range,收到AVI info里的YQ=1时用的是 Full range

所以分析得到Byte3这1个字节分别表示三星电视支持CE mode的overscan和underscan,也支持IT mode的overscan和underscan

Colorimetry Data Block

接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是5,对应的是Colorimetry Data Block,所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

接着就要看看最后这2个字节代表的是什么意思了
在这里插入图片描述

Byte3的各个bit如果是1表示支持某种色域,Byte4的各个bit如果是1表示支持某种Metadata Profile

所以分析得到该三星电视支持的色域有:xvYCC-601、xvYCC-709、BT.2020-YCC、BT.2020-RGB,支持的Metadata有:Metadata Profile 0

支持BT.2020色域的,一般后面还会声明HDR Static Metadata Data Block,表明该电视支持HDR格式

Vendor Specific Data Block

在此要注意一下,现在HDMI 2.0的EDID,VSDB会有两种,一种是H14b VSDB,另一种是HF-VSDB。其中H14b VSDB是必须要有的,HF-VSDB则不一定

H14b VSDB

按部就班,接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0x6E,bit7~bit5是011,即十进制的3,3对应的Tag是Vendor Specific Data Block(VSDB);第1个字节的bit4~bit0是01110,即十进制的14,表示0x6E后面还有14个字节,即上图的黄色背景部分

接着就要看看这14个字节代表的是什么意思了,如下图
在这里插入图片描述

对照上图,一个个字节解析它即可

  • Byte0:上面已经解释过,tag=3,Length=14

  • Byte1~Byte3:这个IEEE规定的3个字节,固定为0x000C03,表示这是H14b VSDB

  • Byte4~Byte5:CEC物理地址,此处是1.0.0.0,可以看出这份EDID是三星电视HDMI1口的EDID

  • Byte6

    bit7:Support_AI,支持ACP、ISRC1/ISRC2包的处理
    bit6:支持deep color为48bits,即16bits。此处为0表示不支持
    bit5:支持deep color为36bits,即12bits。此处为1表示支持
    bit4:支持deep color为30bits,即10bits。此处为1表示支持
    bit3:支持YUV444的deep color mode。此处为1表示三星电视最高支持YUV444 12bits
    bit0:DVI_Dual,支持DVI dual-link。此处为0表示不支持

  • Byte7:Max_TMDS_Clock,表示支持的最大TMDS时钟速率,该字节需要乘以5MHz,此处是 0x3C * 5 = 300MHz。即最大带宽为:300MHz * 10bit(TMDS为10bit编码) * 3(3个TMDS数据通道) = 9Gbps

  • Byte8

    bit7:Latency_Fields_Present,如果此bit是1,表示接下来会有2个字节分别是指示Video_Latency和Audio_Latency的,这两个字节是告诉HDMI发送端对音视频做delay再发送出来,单位是ms,解决某些场合下音视频不同步的问题。此处是0表示不支持,则不存在这两个字节,即跳过上图中的Byte(9)、Byte(10)
    bit6:I_Latency_Fields_Present,如果此bit是1,表示接下来还会有另外2个字节分别是指示Interlaced_Video_Latency和Interlaced_Audio_Latency的,这两个字节是告诉HDMI发送端对I mode的音视频做delay再发送出来,单位是ms,解决某些场合下音视频不同步的问题。此处是0表示不支持,则不存在这两个字节,即跳过上图中的Byte(11)、Byte(12)
    bit5:HDMI_Video_present,如果此bit是1,表示接下来有多个字节,意思如上图Byte(13)、Byte(14)、Byte(15) …

    bit3~bit0:表示分别支持对Game、Cinema、Photo、Graphics图像的特殊处理。此处是0表示不支持

  • Byte9:因为Byte8的bit5 HDMI_Video_present=1,该字节包含3D_present相关的flag

    bit7:3D_present,表示是否有3D相关的描述。此处是0说明三星电视不支持3D视频输入
    bit6~bit5:3D_Multi_present:如果3D_Multi_present = 01,3D_Structure_ALL_15…0有效;如果3D_Multi_present = 10,3D_Structure_ALL_15…0和3D_MASK_15…0两个都有效。3D_Structure_ALL_15…0和3D_MASK_15…0各占2个字节
    3D_Structure_ALL_15…0各个bit的含义是支持的3D格式,如下图
    在这里插入图片描述
    3D_MASK_15…0各个bit含义其实是一个bit map,对应Video Data Block前16个VIC,某个bit=1,则对应的VIC分辨率支持3D
    bit4~bit3:Image_Size,这个跟屏幕尺寸有关,跟EDID Block0的0x15(屏幕最大水平尺寸)、0x16(屏幕最大垂直尺寸)有关系,此处是10,看三星电视的EDID Block0 0x15=>89cm,0x16=>50cm

    Image_Size具体含义
    00 无额外信息
    01 EDID Block0的0x15、0x16的值的比例是对的,尺寸不一定对
    10 EDID Block0的0x15、0x16写的尺寸是对的
    11 EDID Block0的0x15、0x16写的尺寸,要乘以5才是屏幕实际尺寸
  • Byte10:因为Byte8的bit5 HDMI_Video_present=1,该字节包含HDMI_VIC_LEN和HDMI_3D_LEN

    bit7~bit5:HDMI_VIC_LEN,表示接下来有多少个字节用以描述VIC,一个VIC占一个字节。此处是100,十进制的4,表示有4个VIC跟着在后面

    bit4~bit0:HDMI_3D_LEN,同理,如果不为0,在HDMI_VIC后面还会跟着有3D的信息。此处为0

  • Byte11~Byte14,值分别是0x01、0x02、0x03、0x04,参照下图可知是4K30、4K25、4K24、4096x2160P@24
    在这里插入图片描述

到此,H14b VSDB已经分析完

HF-VSDB

接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0x67,bit7~bit5是011,即十进制的3,3对应的Tag又是Vendor Specific Data Block(VSDB);第1个字节的bit4~bit0是00111,即十进制的7,表示0x67后面还有7个字节,即上图的黄色背景部分

接着就要看看这7个字节代表的是什么意思了,如下图
在这里插入图片描述

对照上图,一个个字节解析它即可

  • Byte0:上面已经解释过,tag=3,Length=7
  • Byte1~Byte3:这个也是IEEE规定的3个字节,固定为0xC45DD8,表示这是HF-VSDB
  • Byte4:Version,目前固定为0x01
  • Byte5:Max_TMDS_Character_Rate,表示支持的最大TMDS时钟速率,该字节需要乘以5MHz,此处是 0x78 * 5 = 600MHz。虽然之前的H14b VSDB声明的是300MHz,但要以现在600MHz的为准。即最大带宽为:600MHz * 10bit(TMDS为10bit编码) * 3(3个TMDS数据通道) = 18Gbps
  • Byte6:bit7,SCDC_Present,表示支持SCDC功能;其它bits参考上图即可
  • Byte7:bit2~bit0,分别是声明支持YUV420 deep color的,可知该三星电视支持YUV420的10bits和12bits

HDR Static Metadata Data Block

接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是6,对应的是HDR Static Metadata Data Block,所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

接着就要看看最后这2个字节代表的是什么意思了
在这里插入图片描述

主要看Byte3,Byte4,分别的含义如下两图

Byte3的含义
在这里插入图片描述

可知该三星电视支持HDR格式的HDMI输入,支持的格式类型是Traditional gamma SDR和SMPTE ST 2084 [2]

Byte4的含义
在这里插入图片描述

可知该三星电视支持Type 1

YCbCr 4:2:0 Capability Map Data Block

接着看下图EDID的黄色背景部分
在这里插入图片描述

第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是15,对应的是YCbCr 4:2:0 Capability Map Data Block(Y420CMDB),所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

该Data Block声明支持YUV420的分辨率有哪些,YUV420传输的好处是带宽只占YUV444的一半

接着就要看看最后这2个字节代表的是什么意思了
在这里插入图片描述

在此Byte3、Byte4的含义跟前面所介绍的Video Data Block其实是一个bit map对应关系,Byte3、Byte4两个字节所组成的16bits map,对应着Video Data Block里的SVD(分辨率),如果某bit=1,说明对应的SVD支持YUV420格式

Byte3=0x01、Byte4=0xE0,组成的16bits map就是:1110_0000_0000_0001,bit0=1、bit13=1、bit14=1、bit15=1
bit0对应着Video Data Block里的第1个SVD,即0x61,即分辨率3840x2160P@60支持YUV420
同理
bit13对应着Video Data Block里的第14个SVD,即0x60,即分辨率3840x2160P@50支持YUV420
bit14对应着Video Data Block里的第15个SVD,即0x65,即分辨率4096x2160P@50支持YUV420
bit15对应着Video Data Block里的第16个SVD,即0x66,即分辨率4096x2160P@60支持YUV420

DTD

接着看下图EDID的有色背景部分
在这里插入图片描述

这部分是继EDID Block0之后,描述的另外两个Detailed Timing,因为在EDID Block0里已经描述了两个Detailed Timing了

怎么知道这是描述DTD的,因为在前面CEA Extension Header章节,那里的Byte2=0x50,这是个偏移量,即从EDID Block1的0地址开始偏移0x50之后,就是开始描述DTD了。DTD各个字节的含义可参考Block0章节的长图

DTD之后的数据是0,因为后面没有用到的字节规定是要填充0的,最后一个为检验和

YCbCr 4:2:0 Video Data Block

到此,三星电视的EDID就分析完了,但是实际上还有另外一种有关YUV420的Data Block,那便是YCbCr 4:2:0 Video Data Block(Y420VDB),该Data Block是把only support YUV420的分辨率列出来。虽然该三星电视EDID没有声明,这里还是要介绍一下

看图说话
在这里插入图片描述

这个也是从Byte3开始看起,但跟前面的Y420CMDB不同的是,这里是把支持YUV420的分辨率的SVD直接写在这的,并不是bit map了,例如该三星电视only support YUV420的是3840x2160P@60、3840x2160P@50、4096x2160P@50、4096x2160P@60这4个分辨率,则放在Y420VDB的话,它十六进制应该是这样的:E5 0E 61 60 65 66

到此,常用的EDID Data Block就介绍完了

HDMI信号带宽计算方法

计算公式
在这里插入图片描述

参数详细说明
10/8:TMDS编码8bits -> 10bits
TMDS编码算法会将8位数据转换成10位数据,前8位数据由原始信号经运算后获得,第9位指示运算的方式,第10位用来对应直流平衡

举例说明
3840x2160@60Hz YUV444 8bit的速率是多少?
查表得,HTotal = 4400,VTotal = 2250,计算单通道带宽为:
4400 * 2250 * 60 * 1 * 8bit * 10/8 = 5.94Gbits/s
HDMI TMDS传输有3个数据通道,所以共需要约18Gbits的带宽
这也就是HDMI 2.0宣称它支持带宽为18Gbps的理论依据

参考资料

CEA-861-F
CEA-861.3
HDMI_Specification1_4b
HDMI_Specification2_0b

转自:https://blog.csdn.net/cfl927096306/article/details/108017501

原文地址:https://www.cnblogs.com/huang-y-x/p/13522519.html