记录一次显示器EDID文件解析
本帖最后由 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就是显示器的身份证、户口本、技能证书等证件的集合,目的就是告诉别人我是谁,我从哪来,我能干什么。
参考资料:(https://www.cnblogs.com/beyond-rxl/p/9266997.html)
### 二、解析
#### 1.注册表信息
在Windows中连接过的显示器会被记录在注册表中 `计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\DISPLAY\CMN15F4\4&39f8f762&0&UID265988\Device Parameters`,其中 `CMN15F4\4&39f8f762&0&UID265988`根据显示器型号代码而定。在这个项目下包含一个EDID的二进制数据。
![注册表信息](https://www4.iceyer.cn:444/usr/uploads/2023/10/292859825.png)
#### 2.软件解析
这里我们可以用(https://www4.iceyer.cn:444/usr/uploads/2023/10/3447500159.zip)这款软件解析EDID文件。
!(https://www4.iceyer.cn:444/usr/uploads/2023/10/576639419.png)
为了更加方便转换,最好再配合(https://www4.iceyer.cn:444/usr/uploads/2023/10/1482702866.zip)这款软件,主要用到数据解释器。
!(https://www4.iceyer.cn:444/usr/uploads/2023/10/3576086409.png)
#### 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组合 |
1. **制造商名称**:3个字母组成,基于压缩的ASCII码,例如 `00001=A`… …`11010=Z`,这里 `0x08-0x09`一共16位(0-15),其中第 `0`位代表符号,`1-5`位表示第一个字母以此类推,共三个字母。将 `0x08-0x09`中的 `0D AE`转换后为 `CMN`。
2. **产品代码**:固定为 `4`位16进制数,即两个字节。将 `0x0A-0x0B`中的 `F4 15`转换后为 `15F4`。
3. **产品序列号**:即产品的流水号(数值型),直接转成16进制或以ASCII格式转换。序列号也可用字符型,在后面DTD部分定义。我这个显示器没记录此序列号。
4. **生产周**:即在当年中的生产周,范围 `1\~52`,注意 `0`为无效值。`06`为第 `6`周。
5. **生产年份**:规定1990开始计算,即 `1990`年为 `0`,然后递增计算。`1B`为 `2017`年。
6. **像素时钟**:将 `0x36-0x37`中的 `59 6F`转换十进制 `28505`,即为 `285MHz`。
7. **水平活动像素数**:将 `0x3A`拆分 `前4位`,与 `0x38`拼接后得到 `07 80`,转换十进制 `1920`。
8. **垂直活动像素数**:将 `0x3D`拆分 `前4位`,与 `0x3B`拼接后得到0438,转换十进制 `1080`。
9. **水平blanking**:将 `0x3A`拆分 `后4位`,与 `0x39`拼接后得到 `00 A0`,转换十进制 `160`。
10. **垂直blanking**:将 `0x3D`拆分 `后4位`,与 `0x3C`拼接后得到 `00 3E`,转换十进制 `62`。
11. **刷新率**:像素时钟×10000÷[(水平活动像素数+水平blanking)×(垂直活动像素数+垂直blanking)]=28505×10000÷[(1920+160)×(1080+62)]≈120Hz。
### 三、下载
原文排版和下载看这里吧...
https://www.iceyer.cn/index.php/archives/183
页:
[1]