天天看點

HDMI EDID詳細解析HDMI EDID詳細解析

HDMI EDID詳細解析

HDMI EDID的長度一般是256位元組,分成2個Block,分别是Block0和Block1

PS:VGA和DVI接口的EDID,是隻有一個Block而已,即Block0,共128位元組

如果想了解更多EDID的知識,可以參考這篇文章

https://www.cnblogs.com/fire909090/p/10523604.html

quantum data官網下載下傳edid解析編輯工具

https://www.quantumdata.com/support/downloads/980/release_6_30/R_atpmgr_6.30_Win32.msi

Block0

EDID Block0,共128位元組,該block的格式是固定的,即每個字段的擺放位置是固定的,是以代碼解析起來會相對簡單些

一張長圖了解一下,如圖中的Example Data作為例子,對照來看就明白其中各個位元組代表的意思了

HDMI EDID詳細解析HDMI EDID詳細解析

注意:上圖有一個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代表的意思了
HDMI EDID詳細解析HDMI EDID詳細解析

例如下圖EDID的黃色背景部分,就是Block1的頭(後面會以這個EDID來舉例說明)

HDMI EDID詳細解析HDMI EDID詳細解析

Tag 分類

接下來,Block1裡的各個字段(Tag)的位置是不固定的,需要解析Tag類型才知道接下來的資料屬于什麼Tag資料

具體有哪些Tag類型呢?

常見的EDID,一般會有以下幾種Tag類型,至今還在用

一般會有Video Data Block、Audio Data Block、Speaker Allocation Data Block、Vendor Specific Data Block(VSDB)

HDMI EDID詳細解析HDMI EDID詳細解析

具體是哪種類型,由第1個位元組的bit7~bit5這3bits決定,3bits的資料就決定了它最多隻有8種類型

後5bits表示緊接着該Tag的資料長度

HDMI EDID詳細解析HDMI EDID詳細解析

後續又添加了新的Tag,發現3bits的位寬不夠,新的Tag有如下這些

HDMI EDID詳細解析HDMI EDID詳細解析

不過幸好上面3bits最後一種情況是Use Extended Tag,即使用擴充的Tag,是以就有了下圖的定義

意思是如果第1個位元組的bit7~bit5的值是7(Use Extended Tag),就要看第2個位元組了,根據第2個位元組的值才知道是什麼Tag類型的

HDMI EDID詳細解析HDMI EDID詳細解析

接下來會用一個實際的EDID來分析各個Tag,在此我用三星電視的一個HDMI 2.0 EDID來作為例子說明

隻截取它的Block1來分析就好

Video Data Block

看下圖EDID的黃色背景部分

HDMI EDID詳細解析HDMI 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

HDMI EDID詳細解析HDMI EDID詳細解析

第二種VIC是超過64的

HDMI EDID詳細解析HDMI EDID詳細解析

這23個位元組裡的每一個位元組都是獨立的,VIC是HDMI裡面用來表示分辨率的代号,VIC的值都是HDMI标準定義好的,如下3張圖

HDMI EDID詳細解析HDMI EDID詳細解析

4K30、4K25、4K24這幾個一般會放在VSDB裡,但也有放在Video Data Block裡的,也有兩處都放的

放在VSDB裡的VIC分别是1、2、3,後續還會講到;放在Video Data Block裡的VIC分别是95、94、93

HDMI EDID詳細解析HDMI EDID詳細解析

4K50和4K60

HDMI EDID詳細解析HDMI EDID詳細解析

是以分析得到這23個位元組分别表示三星電視支援的23種分辨率,列一下

VIC(十六進制) VIC(十進制) 分辨率
0x61 97 [email protected]
0x10 16 [email protected]
0x1F 21 [email protected]
0x04 4 [email protected]
0x13 19 [email protected]
0x05 5 [email protected]
0x14 20 [email protected]
0x20 32 [email protected]
0x21 33 [email protected]
0x22 34 [email protected]
0x5D 93 [email protected]
0x5E 94 [email protected]
0x5F 95 [email protected]
0x60 96 [email protected]
0x65 101 [email protected]
0x66 102 [email protected]
0x62 98 [email protected]
0x63 99 [email protected]
0x64 100 [email protected]
0x07 7 [email protected]
0x16 22 [email protected]
0x03 3 [email protected]
0x12 18 [email protected]

Audio Data Block

接着看下圖EDID的黃色背景部分

HDMI EDID詳細解析HDMI 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組聲音相關的描述,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

Byte1的bit6~bit3表示一種音頻格式,有如下幾種格式

HDMI EDID詳細解析HDMI EDID詳細解析

當Audio Format Codes是 2 ~ 8 時,Byte3的意思又有新的含義了,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

當Audio Format Codes是 9 ~ 15 時,Byte3的意思又有新的含義了,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

是以分析得到這9個位元組分别表示三星電視支援的3種音頻格式,列一下

Index Audio Format Max Channels Sample 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的黃色背景部分

HDMI EDID詳細解析HDMI 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組喇叭位置相關的描述,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

主要是看Byte1,是以分析得到三星電視隻有 FL/FR (前左和前右)兩個喇叭,這個Data Block的資料一般很少用

Video Capability Data Block

按部就班,接着看下圖EDID的黃色背景部分

HDMI EDID詳細解析HDMI 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個位元組代表的是什麼意思了

HDMI EDID詳細解析HDMI EDID詳細解析

Byte3各個Bit的意思如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

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的黃色背景部分

HDMI EDID詳細解析HDMI 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個位元組代表的是什麼意思了

HDMI EDID詳細解析HDMI EDID詳細解析

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的黃色背景部分

HDMI EDID詳細解析HDMI EDID詳細解析

第1個位元組是0x6E,bit7~bit5是011,即十進制的3,3對應的Tag是Vendor Specific Data Block(VSDB);第1個位元組的bit4~bit0是01110,即十進制的14,表示0x6E後面還有14個位元組,即上圖的黃色背景部分

接着就要看看這14個位元組代表的是什麼意思了,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

對照上圖,一個個位元組解析它即可

  • 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格式,如下圖

    HDMI EDID詳細解析HDMI EDID詳細解析

    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、[email protected]
    HDMI EDID詳細解析HDMI EDID詳細解析

到此,H14b VSDB已經分析完

HF-VSDB

接着看下圖EDID的黃色背景部分

HDMI EDID詳細解析HDMI EDID詳細解析

第1個位元組是0x67,bit7~bit5是011,即十進制的3,3對應的Tag又是Vendor Specific Data Block(VSDB);第1個位元組的bit4~bit0是00111,即十進制的7,表示0x67後面還有7個位元組,即上圖的黃色背景部分

接着就要看看這7個位元組代表的是什麼意思了,如下圖

HDMI EDID詳細解析HDMI EDID詳細解析

對照上圖,一個個位元組解析它即可

  • 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的黃色背景部分

HDMI EDID詳細解析HDMI 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個位元組代表的是什麼意思了

HDMI EDID詳細解析HDMI EDID詳細解析

主要看Byte3,Byte4,分别的含義如下兩圖

Byte3的含義

HDMI EDID詳細解析HDMI EDID詳細解析

可知該三星電視支援HDR格式的HDMI輸入,支援的格式類型是Traditional gamma SDR和SMPTE ST 2084 [2]

Byte4的含義

HDMI EDID詳細解析HDMI EDID詳細解析

可知該三星電視支援Type 1

YCbCr 4:2:0 Capability Map Data Block

接着看下圖EDID的黃色背景部分

HDMI EDID詳細解析HDMI 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個位元組代表的是什麼意思了

HDMI EDID詳細解析HDMI EDID詳細解析

在此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,即分辨率[email protected]支援YUV420

同理

bit13對應着Video Data Block裡的第14個SVD,即0x60,即分辨率[email protected]支援YUV420

bit14對應着Video Data Block裡的第15個SVD,即0x65,即分辨率[email protected]支援YUV420

bit15對應着Video Data Block裡的第16個SVD,即0x66,即分辨率[email protected]支援YUV420

DTD

接着看下圖EDID的有色背景部分

HDMI EDID詳細解析HDMI 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沒有聲明,這裡還是要介紹一下

看圖說話

HDMI EDID詳細解析HDMI EDID詳細解析

這個也是從Byte3開始看起,但跟前面的Y420CMDB不同的是,這裡是把支援YUV420的分辨率的SVD直接寫在這的,并不是bit map了,例如該三星電視only support YUV420的是[email protected]、[email protected]、[email protected]、[email protected]這4個分辨率,則放在Y420VDB的話,它十六進制應該是這樣的:E5 0E 61 60 65 66

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

HDMI信号帶寬計算方法

計算公式

HDMI EDID詳細解析HDMI EDID詳細解析

參數詳細說明

10/8:TMDS編碼8bits -> 10bits

TMDS編碼算法會将8位資料轉換成10位資料,前8位資料由原始信号經運算後獲得,第9位訓示運算的方式,第10位用來對應直流平衡

舉例說明

[email protected] 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