显示器越来越大越来越便宜,作为程序员装13利器,那必须要n个显示器才能体现出这一职业”高贵“的特点来。据说有的程序员为了这个工作环境而跳槽:
当我们购买了一个新的显示器,第一件事就是去调节显示器分辨率了:
我们必须把分辨率提到最高,但同时为了不看废自己的眼睛,又得要把字体调节的很大,结果银屏上还是只能显示和原来差不多同样的东西。谁叫我们想要物有所值,追求极(BIAN)致(TAI)呢。
在你拨弄那个分辨率滚动条时,你有没有偶尔闪过一丝念头:这个分辨率清单是哪里来的?为什么不能更大点呢?它是由显示器决定的呢,还是由显卡决定的呢?亦或由BIOS或者操作系统来提供呢?
如果你也抱有相同的疑问,那就和我一起来探索一下显示器分辨率背后的原理吧。
VGA vs DVI vs DP vs HDMI
显示器种类越来越多,甚至现在传统的液晶电视也可以作为显示器连接电脑。与此同时,显示器和电脑的连接接口也变得纷繁复杂,我们常见的有VGA,DVI,Displayport(DP)和HDMI,我们下面简单来看一下它们都是什么。
1.VGA
VGA(Video Graphic Array)也叫做D-Sub接口。它的历史比较悠久,传承于现在已经绝迹江湖的CRT显示器。CRT显示器只能接收模拟信号的输入,最基本的包含R/G/B/H/V(红/绿/蓝/行/场)5个分量。
它也是我们最常见的接口。它的引脚图(pinout)定义如下,我们可以在其中找到R/G/B/H/V的身影:
2. DVI
随着模拟信号显示器CRT的淘汰,液晶显示器逐渐占据的主流。而用VGA连接电脑和LCD显示器,信号要经过数字转模拟,传输后再模拟转数字,显得多余和不合时宜。DVI(Digital Visual Interface,数字显示接口)应运而生,它是1999年由Silicon Image、Intel(英特尔)、Compaq(康柏)、IBM、HP(惠普)、NEC、Fujitsu(富士通)等公司共同组成DDWG(Digital Display Working Group,数字显示工作组)推出的接口标准。它的接口分三类5种组成:
我从没有见过DVI-A的输出接口,十分罕见。DVI-I则十分常见,它可以由一个一头DVI-A一头VGA的转接头转换成VGA的信号。DVI接口在中期的液晶显示器市场中占统治地位,但随着DP和HDMI的提出,也慢慢被淘汰出市场。它的引脚定义如下:
3. DP
DP(DisplayPort)是DVI的继任者,它也是一种数字视频接口,2006年5月,由VESA(视频电子标准协会,记住这个简写,以后还会碰到)确定了1.0标准,并在半年后公布了1.1标准,2.0的标准也已经公布。对应DVI来说它进步了很多,而且它是免费的。
4. HDMI
HDMI(High Definition Multimedia Interface,高清晰度多媒体接口),是一种数字化视频/音频接口技术,适合影像传输的专用型数字化接口,可同时传送音频和影像信号。2002年4月,日立、松下、飞利浦、Silicon Image、索尼、汤姆逊、东芝七家公司共同组建了HDMI高清多媒体接口组织,并于同年10月提出1.0规范。它定义了四种接口:
它的引脚定义如下:
下面我们简单梳理一下他们的区别。我们先来张合家欢的照片:
从前面的描述我们可以看出: VGA、DVI和DP是传承关系,都是电脑PC这枝条发展而出的标准。而从HDMI的发起人看出,它主要是面向数字家庭市场。经过多年的发展,DP和HDMI都提供近似的带宽并且都可以传输音频内容,但DP免费而HDMI收费,两家各自在自己的传统市场领域占据主导地位。
分辨率数据存储传输的原理
拉拉杂杂讲了许多似乎和我们今天的主题完全无关。实际上线索就隐藏在前面贴出的接口引脚定义图片中。你也许发现了,尽管接口千差万别,但它们都有一组共同的引脚,那就是DDC。
1. DDC
DDC(Display Data Channel,显示数据通道)使用了一个叫做I2C总线的标准串行信号计划。因为I2C简单、针脚少、具有双向功能,所以它被广泛地应用于需要交换信息的电子设备和元件中。一个I2C总线中有3条线:SDA——数据、SCL——时钟以及一条VCC。 包含分辨率内容的EDID信息就在这个I2C总线上从LCD传输到PC主机:
它的基本功能就是将显示器的电子档案资料信息,诸如可接收行场频范围、生产厂商、生产日期、产品序列号、产品型号、标准显示模式及其参数、 所支持的DDC标准类别、EDID的版本信息等等。高版本的DDC标准总线还可以允许电脑主机直接调节显示器的基本参数,诸如亮度、对比度、行场幅度的大 小、行场中心位置、色温参数等等。它有几个版本:
A.DDC1:单向传输,CLOCKED BY VSYNC,只传输128 BYTE EDID标准数据信息。
B. DDC2B:单向传输(地址为:0xA0/A1),是一个简单的从存储器读取数据信息的标准I2C协议,其方向为从显示器到电脑主机。
C.DDC2Bi:双向传输,I2C SLAVE MODE,传送图形信息(地址为:0x6E/6F,0x50/51), 支持简单的ACCESS.BUS总线标准。
D.DDC2B+:双向传输,点对点,不支持ACCESS.BUS,传输EDID/VDIF标准数据信息(地址为:0x6E/6F,0x50/51)。
E.DDC2AB:双向传输,支持ACCESS.BUS,传输EDID/VDIF标准数据信息(地址为:0x6E/6F,0x50/51)
2. EDID
EDID是由VESA定义并在1994年和DDC标准1.0版一起推出了1.0版本。在EDID开发之前,VGA接口的针脚4、11、12和15有时被用于定义显示器的性能。这些ID针脚带有高的或低的值用于定义不同的屏幕分辨率。VESA通过重新定义VGA接口的部分引脚,以DDC——显示数据通道的形式作为一个系列总线,扩展了这一体系。这使更多的信息得以交换,因此显示器和信号源之间能够以EDID或其他的形式进行交流。
原始的DDC协议定义了从显示器发送到视频信号源的128个字节的EDID格式的数据。
由于显示类型和功能的不断增加,128个字节变得捉襟见肘起来,EDID和DDC都进行了扩展,因此多重128字节的数据块可以进行交换。这就是在众多消费品上所用到的E-EDID。实际上,CEA——美国消费电子产品协会以及国内定义了自己的EDID扩展包来包含额外的视频格式并支持先进的多声道音频功能。
在2007年12月,VESA发布了DisplayID,作为第二代EDID。其目的是取代所有旧版本。DisplayID是一个长度可变的数据结构,最高可达256字节,向信号源传输显示器的相关信息。这意味着包括PC显示设备、消费级电视机以及像笔记本电脑上的液晶屏这样的嵌入式显示器已近不需要多重扩展模块。DisplayID不能直接兼容以前的EDID/E-EDID版本,目前也还没有广泛的应用到视音频产品中去。
3. EDID存储
EDID信息都是存储在显示器或者显示面板的PROM或者EEPROM里面。我们拆开T60笔记本的LCD显示器就会发现它的踪迹:
由于很多投影仪对于电脑来说也是一种显示器,在它们的主板上面也可以看到它们的身影:
结论
终于可以回到我们的问题,谁决定了最终的显示分别率呢?实际上是由显卡和显示器共同决定的。
A. 显示器存储了EDID信息,里面有它可用的所有显示分辨率的列表。
B. 高低端显卡本身有自己可以支持的分辨率列表。
C. 显卡驱动程序用DDC从显示器那里提取过来EDID信息,得到显示器分辨率集合。同时知道自己显卡的分辨率集合。它对两个集合做一个交集,报告给操作系统。
D. 操作系统在分辨率设置界面显示出这个集合供用户挑选。
真相大白,似乎可以结束了。但是凡是总有例外,有些特殊情况还值得一提:
1. 很多嵌入式Panel和LCD为了方便或者降低成本,并没有配备存储EDID的EEPROM。那分辨率信息是谁来给出呢?作为一个介绍UEFI的专栏,聪明的你也许猜出了。是的,是由UEFI固件给出的,UEFI固件通过在固件的VBT表中加入硬编码的分辨率信息,并传递给操作系统的驱动来指定一个已知的分辨率。
2. 某些早期的或者便宜的VGA线缆中没有传递DDC的11,12和15号pin脚的连线,那分辨率如何给出呢?大家可以回去想一想。
3. 如果你对现有分辨率不满意,可不可以自己指定分辨率呢?答案是肯定的。很多显卡驱动程序提供定制分辨率的选项,我们以Intel的核显为例:
极限玩家还可以通过修改显卡驱动程序inf文件的OverrideEDID节,甚至刷新LCD的EEPROM的方法直接修改EDID内容,但仅限老鸟。