EDID的详细时序表是什么意思?
我正在为x86_64指令集架构构建一个操作系统。我开发已经到了一个阶段,想开始为用户进行图形显示,因此已经开始深入研究EDID表,以获取显示器的原生/首选/本机分辨率。虽然我能弄清楚如何获取分辨率本身,但EDID的“详细时序描述”部分的其他信息对我来说几乎毫无意义。参考Ralf Brown的中断列表,下面列出的项被定义为存在于详细时序描述结构中。
Offset Size Description
00h BYTE horizontal frequency in kHz (if 00h, may be text)(see #00135)
01h BYTE vertical frequency in Hz
02h BYTE horizontal active time (pixels) and X resolution
03h BYTE horizontal blanking time (pixels)
04h BYTE horizontal active time 2 / horizontal blanking time 2
05h BYTE vertical active time (lines) and Y resolution
06h BYTE vertical blanking time (lines)
07h BYTE vertical active time 2 / vertical blanking time 2
08h BYTE horizontal sync offset (pixels)
09h BYTE horizontal sync pulsewidth (pixels)
0Ah BYTE vertical sync offset / vertical sync pulsewidth
0Bh BYTE vertical/horizontal sync offset 2 / vert/hor. sync pulsewidth 2
0Ch BYTE horizontal image size (mm)
0Dh BYTE vertical image size (mm)
0Eh BYTE horizontal image size 2 / vertical image size 2
0Fh BYTE horizontal border (pixels)
10h BYTE vertical border (lines)
11h BYTE type of display (see #00134)
-
第二组水平/垂直有效时间的用途是什么?
-
“同步偏移量”是什么?
-
为什么程序员需要/想要知道水平/垂直的“边界”?
我能理解像有效区/消隐时间等基本概念,但这些东西确实让我困惑。
我应该如何解读这张表?
解决方案
总的来说:在处理某个结构时,通常有助于查阅该结构的规范性文档。尤其在查看EDID信息时,阅读关于EDID的专门文档会更有帮助,因为每个具体的API(本例中是VBE)都可能无法提供对这些“外部”数据结构的详细描述。因此,查阅“VESA ENHANCED EXTENDED DISPLAY IDENTIFICATION DATA STANDARD”作为信息的一个不错来源。
现在让我们逐条回答你的问题。
-
第二组水平/垂直有效时间的用途是什么?
它不是“第二组”有效时间;所有带有“2”的字段其实是对各自字段的延续。8位字段不足以表示分辨率,因此每个字段再增加4 位,总共12位,使它们的表示范围足以覆盖高达4K的分辨率。
注意,根据EDID标准,这些描述的不是“有效区域”,而是“可寻址区域”(关于两者差异,请参见关于“边界”问题的回答)。
-
“同步偏移量”是什么?
它描述水平/垂直同步脉冲在空白间隔中的精确放置。这是你通常不需要知道的东西,除非你直接在为显卡硬件寄存器编程。
-
为什么程序员需要/想要知道水平/垂直的“边界”?
边界描述了有效视频区域与可寻址视频区域之间的差异。显示器本身其实并不关心边界,因为它的唯一职责是显示有效视频;不过它确实提供了将抽象标准分辨率(如“640x480@60Hz”)映射到显卡应生成的具体视频信号时序的机制。真正关心边界尺寸的是显卡——它需要知道在每一行中何时开始把视频内存中的数据放到信号上。
例如,再看一次VGA的“640x480@60Hz”。标准VGA水平时序是:640个可寻址像素,144个消隐像素,总共800像素。有效区域为800-144=656像素,因此边界占用656-640=16像素,左右各8 像素。在该模式下,EDID应该有一个名为“h border”、值为8 的字段。
因此,如果你只是使用VBE函数切换到某个视频模式,你不需要了解这些;但如果你要直接为显卡编排时序,可能需要知道。或者,从这些时序中计算出一个精确的刷新率(这大概是 pixel rate / horiz total / vert total——你需要考虑边界来求总和)。