一、简介
最近写一个读取显示器型号的东西,了解了EDID这个数据结构。EDID的全称是Extended Display Identification Data(扩展显示标识数据),VGA、DVI的EDID由主块128字节组成,HDMI的EDID增加扩展块(128字节),扩展块的内容主要是和音频属性相关的,DVI和VGA没有音频,HDMI自带音频,扩展块数据规范按照CEA-861x标准定义,未来可能增加到512或256的整数倍。
其中包含有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串等等。形象地说,EDID就是显示器的身份证、户口本、技能证书等证件的集合,目的就是告诉别人我是谁,我从哪来,我能干什么。
参考资料:EDID的简介和解析 - 花生红枣眼泪和小米 - 博客园 (cnblogs.com)
二、解析
1.注册表信息
在Windows中连接过的显示器会被记录在注册表中 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\DISPLAY\CMN15F4\4&39f8f762&0&UID265988\Device Parameters
,其中 CMN15F4\4&39f8f762&0&UID265988
根据显示器型号代码而定。在这个项目下包含一个EDID的二进制数据。
2.软件解析
这里我们可以用Monitor Asset Manager这款软件解析EDID文件。
为了更加方便转换,最好再配合WinHex这款软件,主要用到数据解释器。
3.主要关注内容
偏移地址 | 数值 | 解释 |
---|---|---|
0x08-0x09 | 0D AE | 制造商名称 |
0x0A-0x0B | F4 15 | 产品代码 |
0x0C-0x0F | 00 00 00 00 | 产品序列号 |
0x10 | 06 | 生产周 |
0x11 | 1B | 生产年份 |
0x15 | 22 | 最大水平图像尺寸,单位CM |
0x16 | 13 | 最大垂直图像尺寸,单位CM |
0x36-0x37 | 59 6F | 像素时钟/10000 |
0x38 | 80 | 水平活动像素数 |
0x39 | A0 | 水平blanking |
0x3A | 70 | 高四位:水平活动像素数,高4位与0x38组合 低四位:水平blanking,高4位与0x39组合 |
0x3B | 38 | 垂直活动像素数 |
0x3C | 3E | 垂直blanking |
0x3D | 40 | 高四位:垂直活动像素数,高4位与0x3B组合 低四位:垂直blanking,高4位与0x3C组合 |
- 制造商名称:3个字母组成,基于压缩的ASCII码,例如
00001=A
… …11010=Z
,这里0x08-0x09
一共16位(0-15),其中第0
位代表符号,1-5
位表示第一个字母以此类推,共三个字母。将0x08-0x09
中的0D AE
转换后为CMN
。 - 产品代码:固定为
4
位16进制数,即两个字节。将0x0A-0x0B
中的F4 15
转换后为15F4
。 - 产品序列号:即产品的流水号(数值型),直接转成16进制或以ASCII格式转换。序列号也可用字符型,在后面DTD部分定义。我这个显示器没记录此序列号。
- 生产周:即在当年中的生产周,范围
1\~52
,注意0
为无效值。06
为第6
周。 - 生产年份:规定1990开始计算,即
1990
年为0
,然后递增计算。1B
为2017
年。 - 像素时钟:将
0x36-0x37
中的59 6F
转换十进制28505
,即为285MHz
。 - 水平活动像素数:将
0x3A
拆分前4位
,与0x38
拼接后得到07 80
,转换十进制1920
。 - 垂直活动像素数:将
0x3D
拆分前4位
,与0x3B
拼接后得到0438,转换十进制1080
。 - 水平blanking:将
0x3A
拆分后4位
,与0x39
拼接后得到00 A0
,转换十进制160
。 - 垂直blanking:将
0x3D
拆分后4位
,与0x3C
拼接后得到00 3E
,转换十进制62
。 - 刷新率:像素时钟×10000÷[(水平活动像素数+水平blanking)×(垂直活动像素数+垂直blanking)]=28505×10000÷[(1920+160)×(1080+62)]≈120Hz。
三、下载
这是本次测试用的注册表文件: