本帖最后由 IceYer 于 2024-5-14 15:24 编辑
一、简介
最近写一个读取显示器型号的东西,了解了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。
三、下载
原文排版和下载看这里吧...
https://www.iceyer.cn/index.php/archives/183
|