Monitor 显示器 软件开发设计入门

基础篇--输入接口及相关通道必备知识

      写在前面:首先申明,这篇文章是写给那些初入显示器软件行业的入门者,或是对显示器产品没有基本知识的小白人员。如您是行业大咖或是大神,还请绕行。

     我们都知道,显示器是日常工作和生活中的一个重要设备,在购买和使用显示器时也或多或少提一些术语,例如:HDMI,DP,分辨率,刷新率,亮度,HDR……,这些名词是显示器软件开发人员绕不过的坎。

     在如何设计开发显示器软件之前,软件开发者需要对硬件电路和显示器行业的一些专有名词有个基本了解,这样不至于在搭建好开发环境后不知道软件功能与硬件的实际关系而无从下手修改软件配置(作为软件人员,对硬件原理也应有基本了解,不至于在debug问题时与代码死磕。原理部分请查找资料了解即可,在此不赘述)。

     本章节先介绍输入接口及相关知识。

分辨率

     这里说的分辨率是指图像分辨率和显示分辨率。分别对应显卡的输出和屏幕显示画面的像素,例如800x600,表示由水平方向800个像素和竖直方向600个像素组成的显示区域。

     不是说分辨率越高,画质越清晰。清晰度一方面取决于分辨率大小,另一方面还和屏的像素(Pixel)间距及像素尺寸大小有关。

     这里对分辨率有个初步认知即可,详细的分辨率说明及参数可参考VESA (视频电子标准协会)timing列表,后面的章节会再叙述。

Input Source Type-VGA

     上图是我们见得最多的一种信号输入接口,称为VGA。

     实际工作中,你可能还会发现其它有别于上面接口类型的非标接口,如12pin单排插座,4pin单排插座,这些都归类为VGA。

     VGA是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA支持在640X480的分辨率下同时显示16种色彩或256种灰度,同时在320X240分辨率下可以同时显示256种颜色.。

     通过在VGA基础上加以扩充,例如将显存提高,使其支持更高分辨率,如800x600或1920x1200,这些扩充的模式就称为VESA Timing。VGA及其扩充Timing(如SVGA)用于传输模拟信号。(注意,这里说的是传输模拟信号,所以经常会遇到解决noise,水波纹等干扰模拟信号传输有关的问题,这些问题,一方面可以通过好的硬件设计方式或是修改硬件参数解决,另一方面有时也可以通过修改软件改善,但硬件影响更大)。

     VGA接口最高可以传输WQXGA(2560x1600@60Hz),因模拟信号易受干扰,更高的分辨率会影响画面品质,好在数字信号传输接口的诞生解决了高分辨率传输的问题。

Input Source Type-DVI

 

     DVI(Digital Visual Interface)比VGA 晚出现十多年,它是基于TMDS 技术来传输数字信号的。TMDS的编码算法是把8bit数据通过最小转换编码成10bit数据(包含行同步、场同步、时钟、数据DE、纠错等),这样做电磁兼容性能好,成本低,传输路径长,图像质量好(再也不用担心解决水波纹,noise干扰这类问题了)。

     在此介绍它是8B/10B编码方式,是因为后面软件开发过程中会计算带宽,这点必须了解。

     DVI接口有好几种,其中DVI-D只有数字接口,DVI-I有数字和模拟接口,就是说DVI-I既可以传输TMDS信号,也可以传输VGA信号,有兴趣的可以查资料了解。DVI-I 其实就是DVI+VGA。

     DVI数字信号传输有单路链接(Single Link)和双路链接(Dual Link)两种模式,规范里定义了单链模式的最大时钟频率为165MHz,这样双链模式最大时钟就为330MHz了。实际上就是限定了分辨率(具体需要结合分辨率和刷新率来计算)。目前4Kx2K60hz或5Kx3K或更高的分辨率,DVI无法传输,并且DVI 只能传输图像信号,无法传输音频信号,这就导致后来HDMI接口的出现。

Input Source Type-HDMI

 

     HDMI中文简称高清多媒体接口。2022年有几家国际化公司联合组成HDMI组织,实现了高品质地传输未经过压缩(注意是未压缩的)的高清晰视频和多声道音频数据。显示器方案芯片支持的HDMI版本决定了显示器的最大输入分辨率。目前HDMI 版本已到2.1,可轻松支持8K60H分辨率了。

     不同于DVI,VGA,视频和音频分开传输,HDMI 不仅可以传输视频信号,同时还可以传输音频信号----终于省掉一根音频线了。Source 如何决定是否要送音频?这取决于sources读取到的EDID是否包含Audio信息。

     这里插一句说明下,EDID有无及正确与否非常重要,没有或是错误的设定,都会造成显示、音频问题,很多时候还傻傻的以为是硬件问题。不仅HDMI,DVI和VGA以及后面讲到的DP 都需要EDID。后续会单独开章节讲EDID。

     说到HDMI,不得不提HDCP。上面说了HDMI组织是几家国际化公司联合组成的。这个由软件和硬件厂商结合弄出来的HDCP是一项应对高清的版权保护技术,这项技术主要用意并不是防止非法盗版,而是对非法复制进行干扰,降低非法复制出来的影像的质量,从而起到对内容进行保护的作(Content Protection)。要做到保护,就涉及到加密,要加密,就要用到密钥。HDCP key 就是密钥。

     Source 与sink 之间的HDCP 沟通过程是有标准的,source 端的key需要放在存储单元以便沟通时读取。所以程序会涉及到写和读 HDCP key。这部分在后期会讲到。这里知道HDMI 接口会涉及到HDCP key这点即可。

     每台标称支持HDMI接口输入(出)的设备,严格来说都要有一组唯一的密钥。HDCP key需要向HDMI组织申请,但申请key必须先成为会员。key 不贵(每组大概几美分吧),会员费(美刀至少也得1W多)比key贵。国内市场要求通常没有这么严格,所以一些小的品牌(或是白牌)产品都是重复用一个段内的key或是干脆使用同一组key。

Input Source Type-DP


 
     相较于HDMI的收费策略,DP接口技术是免费的。DisplayPort接口不像HDMI接口那样,需要每年支付一定量的会员费,也不必象HDMI接口那样每个含有HDMI接口的产品都要交钱,是真正意义上的完全免版税。因此DisplayPort接口获得了众多的国际知名厂商的大力支持。其实除了免费外,DP当初并未体现出其它优势(接口尺寸没有得更小,对标HDMI版本带宽也没有隔代优势,但随着技术的发展,后面优势逐渐凸显出来了)。

     与HDMI 不同的是,DP有一套协商机制(Link training),使得sink和source之间可以通过1对差分线,2对差分线或4对差分线,传输音视频数据。为了应对如今Type C接口的流行趋势,各显示器方案供应商的方案还可以通过修改代码自定义各对差分线的顺序与极性,使得硬件layout走线更顺畅。为此,作为软件开发人员,必须了解各对差分线在代码里如何设定才能与硬件对应起来,以免错误配置导致画面不能正常显示(反而认为是硬件问题)。

     DP1.2 或以上版本还有一个很大的优点,就是菊花链(MST)功能。该功能由显示器方案芯片支持,所以有必要了解MST功能和实现原理,以利发生问题时分析问题(如带宽不足,设定错误,)。它允许您从一台信号源主机传输独立的视频显示到两台或更多显示器上(这种应用场景会越来越多,例如对比内容,独立工作/娱乐…….)

     上面有提到Type C接口,其实是Type C工作在DP alter mode(如何工作在DP alter mode是另一个知识范畴,这里不做介绍)。这种模式等同于DP输入,只不过硬件接法上与传统DP稍有不同,如pin assignment, AUX channel 等。

     Type C 接口的好处是可以随意正反插,而不像VGA/DVI/HDMI/DP 都有插入方向要求),且尺寸更小。

IIC 总线接口

     IIC 接口在显示器产品用途很广。显示器方案芯片既可以作为slaver,通过存在于VGA,DVI,HDMI等输入接口的IIC 通道与source通信,也可以让显示器方案芯片作为master与外部EEPROM /senor等slaver 设备通讯。常见的功能有source读取显示器的EDID,source 发command控制显示器以实现某些功能,显示器通过IIC 读senor 改变亮度等。

     这部分一般底层代码都有write和read的函数,只要会利用IIC 函数读写就不难。

     IIC 通道数据有专用的软件抓取工具,借助抓取的数据,可以分析排查IIC 通讯过程中是主机还是从机的问题,以层别问题和给出应对措施。

AUX Channel—辅助通道

     Aux channel 用于DP 接口,主要用于source和sink之间的握手。sink与source进行通信的唯一途径是识别热插拔检测(HPD)信号再通过aux channel 进行数据交换。

     因为AUX Channel是source / sink通信的关键部分,所以理解握手过程的核心在于记录AUX Channel通信。

     AUX Channel作为DP接口中一条独立的双向传输辅助通道,采用交流耦合差分传输方式,是一条双向半双工传输通道,单一方向速率仅1Mbit/s左右,用来传输设定与控制指令。

     AUX主要用于source读取EDID,source 与sink进行协商确保source正确传输信号,包括通道的数量,传输速率,进行各种显示组态暂存器的设定,读取显示器状态暂存器。

     有专门的工具抓取Aux channel信息来分析双方的沟通信息以排查问题。因此,熟练掌握Aux channel数据录取方法和分析是软件开发人员必备的技能之一。

IO —输入输出端口

     显示器方案芯片或多或少都有一些IO端口,对于这部分,需要确认IO pin 外部的上下拉来设定代码里pin对应的设定。

     通常如果要设定为Open Drain 类型,output pin 外部需要上拉(上拉电阻和电压依据硬件设计指导决定),外部没有上拉的output pin, 一般设定为Push pull类型。

     如能熟练使用示波器量测IO,对后期问题分析会有很大帮助。

     当然,能运用debug 工具读写寄存器,也可以得知IO的输入输出状态,只是没有示波器量测那么直观。

总结:本章节简述了软件开发人员对显示器输入源的类型及相关联的通道接口需要掌握的基本知识点,属蜻蜓点水式提及,如有兴趣,可查询更多资料深入了解。下一章节将介绍输出接口类型,显示屏及其与代码设定相关的内容。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★博文作者未开放评论功能