转载本博客文章,请注明出处
【HDMI原理】HDMI之EDID信息解读
1、EDID功能及用途
? EDID全称为Extended Display Identification Data,是由VESA协会制定的显示器标准信息格式。具体来说,EDID其实就像是显示器的身分证,其内容会包含显示器的相关信息,如显示器名称、产品序号、支持分辨率、声音格式等等。目的是为告诉输出端显示器支持的能力,确保计算机或是机顶盒等影音输出装置,在连接上显示器后,能根据信息输出正确的影音格式,因此可以避免无法显示或显示比例不正常等状况发生,带给用户更好的体验。
? 目前此项技术已广泛应用于影音显示接口如 DisplayPort、HDMI。在实际设计上,为了要容纳先前提到的EDID信息于显示器中,一般会使用储存装置如 ROM 来进行储存,并且在HDMI接口会利用I2C的接口来进行双向的数据传输。
? 图1:EDID传输架构
以HDMI接口为例,EDID的沟通过程:
? 1)一般情况下,当信号源成功连接到显示器时,显示器会将HPD电压拉高,表示连接成功。HPD电压的变化可以触发显示器的自动配置,以适应所连接的信号源的分辨率和其他显示设置。这样,显示器可以正确地显示信号源的内容,并与其进行正常的通信。
? 2)在连接成功后,输出端可以通过SDA(Serial Data Line)和SCL(Serial Clock Line)两条数据线与显示器进行通信,以请求读取显示器的EDID(Extended Display Identification Data)信息。根据HDMI规范,输出端可以通过硬件设计,在显示器关机时通过提供的5V电源将HPD电压拉高。这意味着即使显示器处于关机状态,输出端仍然可以读取显示器的EDID信息。这样可以提供更好的兼容性和功能支持,使输出端能够在任何时候获取到显示器的正确信息。
? 3)当输出端能够正确读取显示器的EDID格式时,可以根据双方的能力进行预设的影音输出设置。这通常包括选择适当的分辨率、刷新率和色彩空间等参数,以确保最佳的显示效果。然而,如果显示器的EDID格式有误或者显示适配器无法正确理解EDID信息,可能会导致一些问题。根据不同的显示适配器厂商的设计方式,计算机可能会将屏幕识别为非即插即用(Non-PNP)设备,并输出大部分显示器所支持的最基本分辨率,例如HDMI的最低要求640x480p@60Hz。在其他情况下,显示适配器可能会显示为"Inactive"(不活动)并呈现反灰,表示没有任何画面输出。这可能是因为显示适配器无法正确读取或解析显示器的EDID信息,无法确定适合的配置。
2、EDID历史版本更新
? EDID相关标准在不断更新,从下表可以看到EDID的版本由EDID1.0演进至E-EDID1.4,再到最新的Display ID 2.0格式。EDID从原先只能容纳单一个128Byte的Block的EDID1.0版本,到目前发展到能利用Extension Block格式在EDID内放置多个Block,最多可放置256个Block的E-EDID1.4版本。而在现今 HDMI 接口中,并非使用最新的Display ID格式,因协会为确保与旧有产品间的兼容性,目前仍采用 E-EDID1.3架构。
3、Extension Blocks简介
? 对于EDID信息的解读,首先需要了解EDID的基本结构。EDID是由多个块(Blocks)组成的,其中最基本的块被称为Block0或Base Block。Block0是EDID的第一个块,它包含了一些基本的显示器信息。Block0的大小为128个字节(Byte),每个字节使用16进制格式进行数据填写。每个字节(Byte)都包含了特定的信息,如显示器的制造商ID、产品序号、制造日期、支持的分辨率和刷新率等。这些信息被以特定的格式编码,并按照规定的顺序填写在Block0中的相应位置。除了Block0之外,EDID还可以包含其他块,如扩展块(Extension Blocks),用于提供更多的显示器信息和功能支持。这些块的数量和内容可以根据具体的显示器和EDID版本而有所变化。
EDID Block0
? 图2: EDID Block0
? Block0前20Byte称为Header,前8个Byte为固定格式需填写00FFFFFFFFFFFF00,接下来的10个Byte则须填写制造厂商相关信息,如厂商名称以及生产日期等等。最后2个Byte填写使用的EDID版本,如前文提及,HDMI目前采用E-EDID1.3架构,因此字段只能填写0103,若填写0104或更高的版本皆会无法通过HDMI1.4b的Compliance测试。
? 在EDID Block0中,前20个字节被称为Header,其中前8个字节的固定格式需填写为00FFFFFFFFFFFF00。这个固定的Header标识了EDID的开始和结束。接下来的10个字节用于填写制造厂商相关的信息,包括厂商名称、产品序号、制造日期等等。这些信息使用ASCII字符编码,并按照规定的格式填写在相应的字节位置上。最后的2个字节用于填写使用的EDID版本,如前文提及,HDMI目前采用E-EDID1.3架构,那么这个字段应该填写为0103,这表示EDID的版本为1.3。如果填写了0104或更高版本的EDID,可能会导致无法通过HDMI1.4b的Compliance测试。
? 图3: EDID Header 架构
? 在EDID Block0中,14h至18h这5个字节用于描述显示器支持的影像输入格式、显示器尺寸以及Gamma值设定。具体来说,这些字节的含义如下:
-
14h:如果最高比特位为1,则表示显示器支持相应的模拟输入格式。不同的比特位表示不同的模拟输入信号类型,如VGA、Composite等。如果最高比特位为1,则表示显示器支持相应的数字输入格式。低4位表示一种数字输入格式,不同的比特位表示不同的数字输入信号类型,如DVI、HDMI等。
-
15h和16h:描述显示器的尺寸。这两个字节组成一个16位的无符号整数,表示显示器的宽度和高度。尺寸的单位通常是毫米(mm),可以通过这两个字节计算得到显示器的实际尺寸。
-
17h:描述显示器的Gamma值设定。这个字节表示显示器的Gamma值,用于调整显示器的色彩响应曲线。Gamma取值范围1~3.54,Gamma可通过存储值计算得到Stored Value = (GAMMA x 100) –100。例如,一个Gamma值为2.2的显示器,对应的字节值为78h。
-
18h:功能特性支持,bit[7,6,5]:Display Power Management(电源管理)
Standby Mode : 待机模式
Suspend Mode:暂停模式
Active Off:休眠/唤醒模式(低功耗模式)
如果在EDID 地址为14H中表明输入的为模拟信号时则:bit[4,3]:Display Color Type
如果在EDID 地址为14H中表明输入的为数字信号时则:bit[4,3]:Supported Color Encoding Format/s
最后三位表示bit[2,1,0]:Other Feature Support Flags,sRGB Standard : RGB是由Microsoft影像巨擎共同开发的一种彩色语言协议,微软联合爱普生、HP惠普等提供一种标准方法来定义色彩,让显示、打印和扫描等各种计算机外部设备与应用软件对于色彩有一个共通的语言。
? 图4: 显示器影像输入格式
? 在EDID Block0中,19h至22h这10个字节用于描述显示器支持的色域范围。
? 图5: 显示器色域范围设定
? 23h至25h为Established timing,填写显示器支持的分辨率,每个bit都对应到一个特定格式,格式均为早期显示器支持的分辨率,主要提供给VSEA、IBM、APPLE等Source使用。由于在HDMI接口中,显示器必须支持640x480p60Hz (VGA)格式,因此建议可在Established timing I 中支持该分辨率。
? 图6: Established timing I & II
? 26h至35h为Standard timing,填写显示器支持的分辨率,最多可以填写8个分辨率,会用2个byte描述支持分辨率的宽像素值、画面长宽比例、屏幕更新率。如果在此不需要填写支持分辨率,可将剩余的byte value设置为01h。
? 图7: Standard timing
? 36h至7Dh合计72个Byte,可被分为四组18byte的descriptors,其目的是对显示器的功能进一步补充。首先第一组descriptor根据HDMI规范必须为Detailed timing descriptor,用来填写支持分辨率,但是相较于前面提到的established timing和standard timing,它使用较多的影像参数来描述:如影像的时钟频率、长宽像素、空白区长宽等等,也因为这样的特性,这组descriptor可用来填写一些特殊、并非列在CEA-861文件的分辨率。剩余的三组descriptors,根据HDMI规范,需要至少包含一组Monitor range descriptor 和 Monitor name descriptor,分别描述显示器支持的垂直、水平更新率以及产品名称。
? 图8: Detailed Timing Blocks Descriptors
? Block0最后的2个byte,7E代表除了Block0以外的extension block数量,7F则为校验值。
? 图9: Extension Blocks Descriptors
Block Map Extension
? 图10: Block Map Extension
EDID Block1
? Block0已对显示器的功能进行基本的描述,像是产品信息和支持的分辨率等等,但如果显示器要额外支持一些HDMI进阶功能:如色深、音讯格式、3D,此时就需要使用Extension block 来描述。Extension block的格式总共有下列几种,但由于在HDMI规范中必须至少使用一个CEA-EXT,下文将只针对其进行介绍,其余格式不在本文讨论范围。
? 图11: EDID Block1
? 图12: EDID Extension Block 格式
? 在Block0后置入的第一个CEA-EXT称为Block1,前2个Byte分别代表这是CEA-EXT以及使用的CEA版本,使用版本如果晚于CEA-861B均填写03。第三个Byte代表的是DTD offset,描述在Block1何处开始列出DTD,以图为例51即是DTD起始的位置。第四个Byte中填写显示器是否支持基本音讯输出、以及Ycbcr色彩格式。
? 图13: CTA Extension Version 3
? 在header之后,CEA-EXT采用多个Data block的方式来描述支持的能力,根据CEA-861G文件的规范,仅有下列的Data block能使用:
- Audio Data Block (ADB): 用于描述显示器支持的音频格式和功能,例如支持的音频采样率、声道数等。
- Video Data Block (VDB): 用于描述显示器支持的视频格式和功能,例如支持的分辨率、刷新率、色深等。
- Vendor-Specific Data Block (VSDB): 用于描述特定厂商的扩展功能和信息,这些功能和信息可能与特定的视频源设备或显示器厂商相关。
- Speaker Allocation Data Block (SADB): 用于描述显示器支持的扬声器配置,包括扬声器的位置和布局。
? 数据块的首部由一个字节组成(见图13),其中3bit用于标记代码,标记数据类型,5个比特位用于表示块的长度。标签编码列表如表55所示。长度不包括标签。一般的标签格式如表54所示。前三位是区域标签代码。这个标记代码指定了接下来字节的格式。最后5个比特位是一个长度字段,指定了数据块中与该标记相关的字节数。字节数不包括标签。对于视频数据块或音频数据块,该数据块由许多短视频描述符组成。对于其他数据块,格式可能不同(例如,说话人分配数据块)。但是,长度总是标签后面的字节数。
? 图14: Data Block Header Byte
? 图15: CTA Data Block Tag Codes
? 如果Tag Code=7(Use Extended Tag),则数据块的第二个字节为扩展标记代码,该代码表示数据块的实际类型。为了向后兼容,第一个字节的Length字段包含第二个字节,第二个字节包含扩展标记代码。注意,标签码为1到6的数据块最多只能包含31个有用字节,而扩展标签码的数据块最多只能包含30个有用字节。
? 任何扩展标记在0到15范围内的数据块都严格表示显示的视频相关特性,16到31范围内的数据块都严格表示显示的音频相关特性。任何中继器设备在不修改音视频定时、音视频数据或音视频相关信息帧的情况下,将视频流从Source重传到Sink时,也应将每一个这样的数据块向上传递,即中继器应将数据块的内容从下游Sink的EDID复制到中继器自己的上游EDID。
? 另外Data block未提及的HDMI功能,均定义于Extended tag格式中,以下仅对常见的Data block进行介绍Extended Tag。
? 图16: CTA Data Block Tag Codes
Video Data Block
? 使用VIC code描述显示器支持的分辨率,如果DTD中有列出CEA的分辨率,在Video data block中也需同步列出。
? 图17: Short Video Descriptor (for codes 1 through 64)
? 图18: Short Video Descriptor (for codes 65 through 127 and 193 through 255)
Audio Data Block
? 每个短音频描述符都有3字节长。在Tag code之后可以有多达31字节,因此在音频数据块(ADB)中可以有多达10个短音频描述符。
? 图19: CTA Short Audio Descriptor for Audio Format Code = 1 (L-PCM)
Speaker Allocation Data Block
? 根据Data Block结构,首字节的bit7~5为Speaker Allocation Data Block = 4,bit4~0为Speaker Allocation Data Block长度(固定为3),后面跟的3字节,结构如下:
? 图20: Speaker Allocation Data Block Payload
? 其中F为前置,L为左置,R为右置,C为中置,Fxx=0表示预留位。如果显示器支持声道数目大于二,就必须使用此格式来描述多声道的支持配置。
Vendor-Specific Data Block
? 提供给各影像协会使用,内容会因使用的影像接口不同而异。像是HDMI协会自定义HDMI VSDB以及HDMI HF-VSDB两种格式,来描述专属于HDMI的相关功能。
? 图21: Vendor-Specific Video Data Block
? 如果显示器支持HDMI1.4b,则必须含有HDMI VSDB,格式如下:Byte1至Byte3为IEEE提供给HDMI的数值,代表显示器为HDMI 装置,若产品没有HDMI VSDB则会被输出端判定为DVI装置。Byte4至Byte5代表显示器输入端的物理地址,一般会由1.0.0.0开始,若显示器具有多个输入端,为了进行区别,不同输入端对应的地址需分别填写为2.0.0.0, 3.0.0.0….以此类推,以上为HDMI VSDB最少要填写的内容,总长为5个Bytes。Byte6开始为额外内容,如果待测物有支持不同色深、3D、4K分辨率才需要进行填写。
? 图22: HDMI-LLC Vendor-Specific Video Data Block
? 若显示器支持最新的HDMI2.1,除了HDMI VSDB也必须含有HDMI HF-VSDB,格式如下:Byte1至Byte3同样为IEEE提供给HDMI的数值,Byte5之后可填写显示器支持的2.1 TMDS/FRL功能:如DSC、VRR、ALLM等等。
? 图23: HDMI Forum Vendor-Specific Video Data Block
4、EDID常见问题整理
1、我的显示器产品只支持TMDS模式,且支持传输速率最高至 6Gps,为甚么在EDID中不能支持YCbCr420色彩格式的4K120/4K100,即使该分辨率所需的传输速率不到6Gps?
? 根据 HDMI 2.1 Spec Erratum No.E3 文件, 若 Sink 要支持 4K120 影像格式,则必须同时支持以下其中一种格式:1. 未压缩的 YCbCr420 4K120 10 bit 分辨率 2. 压缩的 YCbCr444 4K120 10bit 分辨率。由于以上两种分辨率速率均大于 6Gps,已经超出 HDMI2.1 TMDS 模式的速率上限,因此代表产品需支持更高速的 HDMI 2.1 FRL 模式才能支持4K120输入,同理4K100也有相同的规定。
2、EDID中的 VRR 相关信息要如何填写?
? VRRmin 以及 VRRmax 需以产品能力去做填写,但注意 VRRmax 需要与 EDID 内写入的分辨率的最大更新率一致。例如在DTD 内写入 3840x2160p120Hz,VRRmax 则不能填写大于 120 的数值。
3、什么是HF-SCDB, 与常见的HF-VSDB 格式有何差异?
? HF-SCDB是HF-VSDB的一种替代写法,两者内容大致上相同,Byte4后均放置SCDS,用来描述Sink支持的HDMI2.1功能。唯一差异只在于前四个Byte,HF-SCDB使用Extension tag,而HF-VSDB则使用Vendor specific data block格式填写。
4、HF-EEODB这种新格式的Data Block内容为何?
? HF-EEODB这种新的Data block格式,通常放置于Block1的Byte4至Byte6,内容用来表示EDID的EXT-Block 数量,是一种Block map的替代写法。其格式总共由3个Byte组成,Byte1至Byte2为固定参数,代表此为HF-EEODB,Byte3则填写在此EDID中的EXT-Block数量。HF-EEODB写法相较于Block map有两点差异,一是容量差异,HF-EEODB只使用三个Byte,而Block map 则需使用一整个Block来描述 (128byte),因此在ROM容量有限时,建议优先使用HF-EEODB。二是内容差异,HF-EEODB只能描述EXT-Block的数量,但Block map则除了数量以外,也能同时描述使用的EXT-Block种类。
参考资料
1.https://www.graniteriverlabs.com.cn/technical-blog/edid-overview/
2.EDID v1.4
3.CTA-861-G