1 Instruction
EDID: Extended Display Identification Data(扩展显示标识数据)是一种VESA (Video Electronics Standards Association)标准数据格式,其中包含有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串(摘自百度百科“EDID”词条)。Host Device通过读取Display中的EDID数据来“知道”Display的一些属性。简而言之,EDID就是Display的一个铭牌。EDID数据通常是由DDC通道来传输。
2 Overview
一份EDID数据是由128个字节的基本数据块(Block 0)和拓展数据块(Block 1)组成,Block 0是必须要有的,而Block 1是可选的。每一个字节都代表Display的相关信息,下面就详细讲一下里面数据的含义。
3 Block 0
上图是Block 0中的相关信息,最左边一列是数据的地址。
3.1 Header:8 Bytes(00H - 07H)
这8个字节中的值是固定的,不能做任何更改,内容如下图所示:
3.2 Vendor & Product ID:10 Bytes(08H-11H)
这10个字节中包含一些厂商和产品的一些信息,由分为几个代表不同信息的部分,如下图所示:
3.2.1 ID Manufacturer Name:2 Bytes(08H-09H)
这两个字节表示的是厂商ID,由微软注册管理,共有16bit,代表三个字母,这16bit是采用6+5+5的方式来划分的。例如, 【0x36, 0x74】表示的内容是:0011 0110 0111 0100.即 001101 + 10011 + 10100 = “M” + “S” + “T”. 即表示MSTAR公司。其中“00001”表示字母A,“00010”表示字母B,“00011”表示字母C,依次类推,“11010”表示Z。
3.2.2 ID Product Code:2 Bytes(0AH-0BH)
这两个字节表示产品ID,由厂商分配。
3.2.3 ID Serial Number:4 Bytes(0CH-0FH)
这两个字节表示产品序列号,有厂商分配。
3.2.4 ID Manufacturer Name:2 Bytes(10H-11H)
产品的制造日期,第一个字节表示一年中的第几周,第二个字节表示年份,这个年份是相对于1990年来说的。比如里面的数据为
0AH,16H,十进制为10和22,则表示1990+22=2012年的第10周。
3.3 EDID Structure Version & Revision:2 Bytes(12H-13H)
这两个字节表示EDID的版本,比如其中值为01H,03H就表示version1.3。目前EDID最高版本为1.4,下图是不同版本之间的区别。
3.4 Basic Display Parameter and Features:5Bytes(14H-18H)
这5个字节中包含了显示器的一些基本参数。
3.4.1 Video Input Definition:1Byte(14H)
这一个字节包含输入视频的一些基本参数。这个字节的最高位如果为0则表示输入的为模拟视频信号,其具体定义如下表:
如果最高位为1表示输入的是数字视频信号,其具体定义如下表:
3.4.2 Horizontal and Vertical Screen Size or Aspect Ratio: 2 Bytes(15H-16H)
这两个字节用来表示显示器的物理尺寸或者是宽高比。当15H(水平长度)和16H(垂直长度)中的值都不为0是就表示显示器的物理尺寸,单位为cm。 例如 ,该内容为0x73, 0x41,十进制为115, 65。表示该显示器尺寸为115cm x 65cm。如果其中一个字节中的值为零,另一个字节的值不为零,则表示宽高比。宽高比的技术公式如下:
Landscape Orientation mode(横屏模式):
Aspect Ratio = (Stored Value + 99) ÷ 100
Portrait Orientation mode(竖屏模式)
Aspect Ratio = 100 ÷ (Stored Value + 99)
3.4.3 Display Transfer Characteristics (GAMMA): 1 Byte(17H)
显示器伽马在不同的上下文环境中,有不同的含义,一个意思是指显示器的输出图像对输入信号的失真,另一个意思是指这种失真的具体数值。由于显示器伽马和文件伽马是固定不变的,伽马校正过程是校正计算机的系统伽马!,使得显示器伽马、系统伽马、文件伽马三个变换的叠加为1.0,从而使最终显示器的图像和原始场景一样,不存在失真。(摘自百度百科“伽马值”词条)
Stored Value = (GAMMA x 100) – 100
要的到gamma 值,通过存储的值反向计算就可得到。
3.4.4 Feature Support: 1 Byte: 1 Byte(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(standard Red Green Blue)是由Microsoft影像巨擎共同开发的一种彩色语言协议,微软联合爱普生、HP惠普等提供一种标准方法来定义色彩,让显示、打印和扫描等各种计算机外部设备与应用软件对于色彩有一个共通的语言。(摘自百度百科sRGB词条)
3.5 Display x, y Chromaticity Coordinates: 10 Bytes(19H-22H)
这10个字节是用来表示显示器支持的色彩范围,没一个值是采用10bit来表示的,其中低位的2个bit为19H和1AH中的值,高位的8个bit为1BH-22H中的值。10bytes总共表示8个参数,这8个参数为四个点坐标,其中三个用来表示色彩范围坐标,另一个是白色点的坐标。如下图所示:
3.6 Established Timings I & II: 3 bytes(23H-25H)
相应位置置1,表示支持这个Timing。这个时序块中定义的时序是EDID标准出现还早的一些时序。
3.9 Standard Timing:16Bytes(26H-35H)
这里面定义了从Standard Timing 1- Standard Timing 8总共8个Standard Timing,每个Timing用两个字节来描述,Timing的格式参照表中Standard Timing 1。里面包括宽高像素值,宽高比,刷新率等参数。如果不是用,则将第一个字节设置为01H第二个为0。
3.10 Detailed Timing Blocks - 72 Bytes(36H-7DH)
这72个字节分为4组,每18个字节用来描述一个Timing。第一个18Bytes block必须用来表示详细时序(Detailed Timing),第二到第四个除了可以表示Detailed Timing之外,还可以用来表示显示器描述符(Display Description)。
3.10.1 Detailed Timing Descriptor-18Bytes
这18个被分成两个Part,Part 1里面包括了视频时序的一些非常详细的参数,每一个参数的含义参考下列视频时序图:
里面的参数如下表所示:
Part 2中有一些与音视频相关的设置,内容如下表:
3.10.2 Display Descriptor Definitions-18Bytes
在3.10节中讲到,第一个block(36H-47H)必须是detailed timing descriptor,而第二到第四个(48H-7DH)block可以是detailed timing descriptor也可以是display descriptor definition。Display Descriptor Definition中的内容如下表:
前3个字节(Byte 0-Byte 2)都为0,表示着是一个Display Descriptor Definition 而不是Detailed Timing Descriptor;第4个字节(Byte 3)为要描述的参数的代号(Tag),比如为FFH,则表示这18个Bytes是用来描述Display Product Serial Number。第5个字节为00H,从第6个字节到第18个字节则是第4个字节表示的参数的具体值。Tag表示的含义如下表:
下面就每个参数的含义做详细说明
3.10.2.1 Display Product Serial Number
产品序列号,采用ASCII码存储,比如:S/N:A0123456789,则后13个字节为:41h 30h 31h 32h 33h 34h 35h 36h 37h 38h 39h 0Ah 20h,不够13个字节的在后面加一个0AH(换行),后面填充20H(空格)。
3.10.2.2 Alphanumeric Data String Descriptor Definitionr
这里面存的是一个用ASCII码表示的字符串,具体用来干啥的我还不是很懂。
3.10.2.3 Display Range Limits & Additional Timing Descriptor Definition
这里面有一些显示器频率范围限制
3.10.2.4 Display Product Name (ASCII) String Descriptor Definition
这里面是表示产品名称字符串的ASCII码。
下面的内容由于我不常用到,所以就不讲了,有兴趣的读者可以自行查阅EDID标准文档。
3.10.2.5 Color Point Descriptor Definition
3.10.2.6 Standard Timing Identifier Definition
3.10.2.7 Color Management Data Definition
3.10.2.8 CVT 3 Byte Code Descriptor Definition
3.10.2.9 Established Timings III Descriptor Definition
3.10.2.10 Unused – Reserved Data Tag Numbe
3.10.2.11 Dummy Descriptor Definition
3.10.2.12 Manufacturer Specified Data Tag Numbers
3.11 Timing Information Priority Order
在EDID中定义了四种Timing,分别是Established Timing、Standard Timing、Preferred Timing还有一些额外的Timing,比如GTF和CVT Timing。对于显示器来说,支持的这些Timing有一个优先级,如下图:
优先级:Preferred Timing > Detailed Timing > Extension Block中的Detailed Timing>CVT > Standard Timing > Established Timing
3.12 Extension Block Count N - 1 Bytes(7EH)
这一个字节表示除了Block 0之外还有多少个拓展的Block,一般为1,即还存在Block 1
3.13 Checksum - 1 Bytes(7F)
校验和
4 Block 1(这一部分属于CEA-861标准的内容)
拓展部分由三个版本的格式分别为Version 1、Version 2和Version 3
4.1 CEA Extension Version 1
CEA对Version 1是不推荐使用的,它已经被Version 3替代了。
Version 2 也被弃用了,所以,目前常见的EDID extension block 采用的是version 1.3,其数据结构如下图所示:
Byte0和Byte1是拓展数据块的版本号;
Byte2是偏移量d,当d=4时,表示没有数据,d=0是表示没有详细时序;
Byte3;
Byte4-Byte(d-1)是CEA Data Block Collection,里面的内容如下图所示:
在这一个数据块中,第一个Byte的高3bit用来表示Tag Code,不同的Tag Code表示不同的参数,其具体定义如下表:
当Tag Code为7时,表示后面还有拓展的Tag。后面紧跟着的一个字节则用来表拓展的Tag Code,如下图:
由于表示的Block太多,在这就不一一讲解了,每一个Block的具体信息请查阅CEA-861标准文档。
后面没有用到的字节填充0,最后一个为检验和。