hdmi edid 分辨率设置

以下说明截图基于 R_980mgr_4.16.39.13141_Win.msi 工具(以下简称 980),最好先安装这个工具,然后对着说明进行操作。
关于 edid 的各字段这里不再作解析,请网上查阅资料。可以参考以下文章:

https://www.cnblogs.com/beyond-rxl/archive/2018/07/05/9266997.html
https://blog.csdn.net/Gplusplus/article/details/52597033

本文只解析说明如何修改 edid 以支持目标分辨率。设置推荐分辨率。

1. 导入 edid

打开 980, 切换到 EDID/DPCD 标签页,右键 EDID - USER 菜单,选择 import 菜单。然后选择需要编辑的 EDID 文件即可。
edid-import

980 的界面菜单大致功能划分如下:
980-introduce

2. 分辨率设置

在EDID中定义了几种 Timing,分别是 Established Timing、Standard Timing、Detailed Timing 还有一些额外的Timing,比如GTF和CVT Timing。
其中 Detailed Timing 又包含了: Preferred Timing, 普通 Detailed Timing, Extension Block中的Detailed Timing。这三者的格式基本是一致的。

对于显示器来说,支持的这些 Timing 有一个优先级:
Preferred Timing > 普通 Detailed Timing > Extension Block 中的 Detailed Timing > CVT > Standard Timing > Established Timing

下面对这几种 Timing 分别解析。

2.1. Established Timings

提供一些基本固定的VESA, Apple, Mac, IBM VGA等输出的Timing。这个比较简单,如果确认芯片支持这些分辨率的话,直接打钩就行了。不需要解析。
Established-Timings

2.2. Standard Timings

总共16个字节,提供最多8种分辨率的识别,每一种分辨率都是由2个字节的模式格式和刷新率得到的。这些分辨率应该是对 Established Timings 的一种扩充。
Standard Timings

每个字段的意义解析如下:

  • Unused : 是否使用这个分辨率。
  • H-Active Pixels(256-2288 by 8) :水平分辨率, 例如 1280
  • Image Aspect Ratio: 画面比例(水平分辨率 : 垂直分辨率), 例如 5:4
  • Refresh Rate(60 - 123 HZ): 刷新率,也就是帧率,例如 60

其中水平分辨率和画面比例共同决定了分辨率。如上面的例子。水平分辨率为 1280, 画面比例为 5 : 4。那我们就可以算出垂直分辨率:
水平分辨率 / 垂直分辨率 = 5 / 4
–> 垂直分辨率 = 水平分辨率 * 4 / 5 = 1280 * 4 / 5 = 1024

也就是整个分辨率块定义的分辨率为: 1280 * 1024 60HZ 。

2.3 Detailed Timing

2.3.1 Preferred Timing (推荐分辨率)

推荐分辨率就是 hdmi 设备优先输出的分辨率。当用户没有手动设置过分辨率时,且 hdmi 设备支持时,输出的分辨率就是推荐分辨率。
如果是 windows 电脑接入电视的话,我们在设置分辨的时候分看到分辨率列表里面有(推荐) 的字样提示:
windows-reslution-setting

Preferred Timing 其实用的就是第一个 Detailed Timing:
Preferred-Timing

2.3.2 普通 Detailed Timing

各字段的描述跟 Preferred Timing 一样的。 目前其实也只有 Descriptor 2。
普通 Detailed Timing Descriptions。共72个字节分为四个详细时序描述块(DTD),每部分18个字节,故最多可以对四个TIMING 进行详细描述。一般来说 Descriptor 1/2 用来描述分辨率, 其中 Descriptor 1 作为推荐分辨率。 Descriptor 3/4 用来描述显示器信息(比如说显示器名)。

显示器名的设置如下:
monitor-name

2.3.3 Extension Block 中的 Detailed Timing

扩展块中的 Detailed Timing 跟普通 Detailed Timing 的字段是一样的。只不过是放的位置不一样而已。当前面三种方法不能囊括我们想要支持的分辨率,且 EDID 还有足够的空间的时候。我们就可以通过这种方法来添加分辨率支持。
Extension-Block-Detailed-Timing

4. 导出 edid

修改完之后,点一下 Apply 按钮,然后然后 File –> Export, 选择 bin 形式导出即可。
edid-export