使用 FPGA XILINX ALTERA INTEL 开发HDMI 之 Hot Plug Detection, DDC, and EDID

热插拔

大多数现代显示器的一个便利功能是能够在两者都通电时“热插入”到源设备中,并在正确的显示设置下立即变为活动状态。

这种行为是通过三个功能实现的:热插拔检测、显示数据通道 (DDC) 和扩展显示标识数据 (EDID)。

什么是热插拔检测?

将显示器“热插拔”到源中意味着设备在两个都通电时已连接。这与旧技术不同,旧技术通常需要在一个或两个设备关闭的情况下“冷插拔”。热插拔检测或“HPD”是HDMI、DisplayPort和DVI规范的一项功能。通常,它依赖于连接器中的单个引脚进行接触,从而启动该过程。

什么是 DDC?

DDC 或显示数据通道描述了源和显示器用于通信的协议和物理路径。它通常分配给接口上的一个或多个引脚,并带有 EDID。

DisplayPort 没有使用专用的 DDC,而是使用多功能“AUX 通道”,它既可用作用户数据的媒介(通常是 USB),又可用作传输 EDID 和其他拓扑信息的手段。

什么是 EDID?

EDID(扩展显示器识别数据)是显示器提供的信息,用于描述其功能和对源设备的要求。它包含制造商、序列号、最大分辨率、刷新率和色彩空间等信息。

 

5c5879489c192609

热插拔检测问题

虽然 HPD 通常是可靠的,但据报道,某些显示器在与特定的 PC 设置配对时会导致不良行为。

最常见的问题出现在显示器关闭或进入睡眠状态时。它将通过 DCC 传输一个信号,指示它正在关闭电源,在某些情况下,系统的视频驱动程序或操作系统会将其解释为显示器被拔下。这会导致操作系统以不希望的方式重新排列桌面空间和窗口。

解决方案

这些问题有一些可用的解决方案,具体取决于所涉及的硬件和软件。

显示器设置

如果可用,解决此问题的最简单方法是在显示器设置中禁用热插拔检测。尝试搜索您的显示器型号并“禁用热插拔”。

电脑显示设置

在 PC 端,您的显示驱动程序或操作系统的显示设置中可能有一些选项可以禁用热检测,或强制其始终使用特定布局。对于具体的故障排除,请搜索您的操作系统或显卡品牌,并“禁用监视器检测”或“EDID 覆盖”。

HDMI接口HPD(热插拔)

    HDMI(Pin 19)/DVI(Pin16)的功能是热插拔检测(HPD)。该信号将作为HDMI源(Source)是否启动EDID读取以及是否开始发送TMDS信号的依据。HPD 是从 HDMI 显示器 (Sink) 生成并输出到 HDMI 源 (Source) 的检测信号。热插拔检测的作用是当显示器等带有HDMI接口的显示设备通过HDMI/DVI接口与HDMI源(Source)连接或断开时,可以通过HPD检测HDMI源(Source) HDMI/DVI 的引脚并对这一事件做出响应。下面以HDMI为例来说明HPD的原理和实现。

    1、显示器通过HDMI连接到HDMI源设备。当HDMI源(Source)检测到显示器通过HDMI接口的HPD管脚连接到HDMI源(Source)时(HPD由低到高),HDMI源(Source)认为有显示设备连接,并通过HDMI接口中的显示数据通道DDC(DDC I2C总线)读取存储在显示EDID内存中的EDID数据(扩展显示识别数据),如果检测到显示器的工作模式范围与输出设置兼容HDMI信号源(Source),HDMI信号源(Source)激活TMDS信号传输电路,将正常的HDMI信号发送给显示设备。所以当HPD从低电平转换到高电平时,HDMI Source端会读取sink端的EDID。

       2、当显示器断开HDMI连接时,当HDMI源(Source)通过HPD管脚检测到显示器的HDMI接口与HDMI源(Source)断开时,HDMI源(Source)断开TMDS信号传输电路,停止发送 HDMI 信号。

       3、HDMI信号源(Source)需要HPD信号。当HDMI源(Source)检测到HDMI/DVI接口上的HPD管脚电压大于2V时,判断HDMI显示设备(Sink)通过HDMI/DVI接口与HDMI源连接:当检测到HPD引脚电压小于0.8V,判断HDMI显示设备(Sink)与HDMI源(Source)通过HDMI/DVI接口的连接已断开。

      4、HPD信号一般在HDMI的sink端实现,通过1K欧电阻上拉到HDMI+5V,同时本地主机处理器可以通过GPIO控制,如下图. 

  当HDMI源(Source)通过HDMI接口连接到HDMI sink时,HDMI source(Source)通过HDMI pin 18(PWR_CON,PIN18,即HDMI_5V)给HDMI sink的DDC内存(EDID数据)加上+5V电压) Memory)给DDC内存供电,保证HDMI source(Source)即使HDMI sink没有打开也能通过HDMI接口读取EDID数据。HDMI源(Source)开机后产生+5V,通过18脚给HDMISink端(HDMI显示器)供电,此时HDMISink端(HDMI显示器)接收到5V电压,将HDMI接口19脚HPD变为高电平(1K 欧姆电阻上拉)。此时HDMI源(Source)通过19th Pin接收到HPD高电平,并且判断HDMI Sink(HDMI显示器)是通过HDMI接口连接到HDMI source的,所以通过HDMI接口DDC通道(I2C)的第15、16脚读取显示器中的EDID数据,并使HDMI源的TMDS信号传输电路开始工作。当HDMI显示器与HDMI源的HDMI连接断开,HDMI源上的HDP信号为低电平时,HDMI源上的TMDS信号传输电路停止工作。

由于HDMI sink侧的HPD电路预留了一个控制端,如果HDMI sink侧的主处理器需要对HDMI链路进行复位(包括重新HDCP握手认证),可以通过下拉再上拉HPD来实现这个功能。

前面介绍EDID提到过,HDMI规范规定发送设备要检测接收设备的第一个CEAEDID扩展块是否包含HDMI VSDB,这个HDMIVSDB是否包含IEEE数据标识符0x000C03,只有包含这个的设备data identifier ,将被视为 HDMI 设备,否则将视为 DVI 设备。

HDMI设备的EDID通常包含两个模块,第一个是EDID1.3的数据模块,第二个是CEA 861B模块。此 861B 模块必须包含数据标识符 0x000C03。当HDMI发送设备(Source)检测到HPD信号由低变高时,会读取sink的EDID数据,确认接收设备是否发生变化,判断是工作在HDMI模式还是DVI模式。

硬件解决方案

最后,还有各种硬件解决方案,例如位于显示器和 PC 之间的加密狗或设备,可中断 HPD 或 EDID 过程。您需要搜索您的连接类型(HDMI、DisplayPort 等)和“医生”或“EDID 仿真器”或“检测杀手”。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 共5条

请登录后发表评论