您尚未登录。

楼主 # 昨天 23:06:06

陆苹果
会员
注册时间: 昨天
已发帖子: 3
积分: 3

全志平台 HDMI 热插拔调试整理:HPD、EDID、mode 重设几个关键点

最近整理 HDMI 热插拔相关问题,发现这类故障经常不是“HDMI 完全不能用”,而是冷启动能亮、插拔后不亮,或者换显示器后 mode 没更新。这里把排查思路记一下,后面遇到类似问题可以少绕一点。

1. 热插拔先看 HPD,不要一上来改 timing

HDMI 热插拔的第一信号是 HPD。显示器插上后,HPD 电平应该变化,驱动再去读 EDID、选择 mode、重新 enable 输出。

如果插拔时系统完全没反应,优先查:

  • HDMI HPD 引脚是否接对;

  • DTS/pinctrl 里 HPD 是否配置;

  • 是否有 GPIO/IRQ 被别的功能占用;

  • HDMI 5V 是否正常输出;

  • 线材/转接头是否把 HPD 断了。

很多“热插拔不生效”其实还没走到 EDID 阶段,HPD 事件就丢了。

2. HPD 有了,再看 EDID 是否重新读取

插入显示器后,正常流程应该是读取 EDID,再根据显示器支持的分辨率选择输出模式。

如果 HPD 有变化,但插上后仍然黑屏,可以重点看:

  • DDC 的 SCL/SDA 是否正常;

  • I2C 上拉、电平转换是否合适;

  • EDID 是否读取失败或读到全 0/错误数据;

  • 是否复用了错误的旧 EDID;

  • 是否 fallback 到显示器不支持的 mode。

有条件的话,逻辑分析仪看 DDC 很直观。软件层面可以看 dmesg 里有没有 EDID read failed、mode invalid 之类信息。

3. 冷启动能亮,不代表热插拔流程没问题

有些板子开机前 HDMI 已经插着能亮,但运行中拔插就不行。这个时候说明基本显示链路没问题,问题更可能在:

  • HPD 中断没有配置好;

  • 驱动没有处理 disconnect/connect;

  • 用户态没有重新 modeset;

  • framebuffer/DRM 没有重新绑定输出;

  • HDMI PHY 没有在拔插后重新 enable。

所以调试时建议分别测三种场景:

  1. 开机前插着 HDMI;

  2. 开机后再插 HDMI;

  3. 显示中拔掉再插回。

这三种能暴露不同问题。

4. BSP disp 和 DRM/KMS 排查方式不一样

如果是老 BSP/disp2,一般看 disp/hdmi 相关 log,以及 sys_config/dts 里的 hdmi_used、screen 输出配置。

如果是主线 DRM/KMS,可以用:

modetest -M sun4i-drm

看 connector 状态是否从 disconnected 变成 connected,mode 列表是否刷新。也可以用用户态程序重新 set mode,确认是不是内核已识别但应用没处理。

5. 建议先固定一个保守分辨率

热插拔调试阶段不要一开始就依赖自动 EDID 选最高分辨率。可以先固定 720p60 或 1080p60 中较稳的模式,确认拔插后能重新出图。

如果固定模式能亮,自动模式不亮,大概率是 EDID/mode 选择问题;如果固定模式也不亮,就回头查 HPD、PHY、TCON/DE 重新 enable。

6. 一个实用排查顺序

我一般会这样排:

  1. 量 HDMI 5V 和 HPD 电平;

  2. 看插拔时内核有没有 HPD/connector 事件;

  3. 看 EDID 是否重新读取成功;

  4. 固定 720p60 测输出;

  5. 看拔插后 HDMI PHY/TCON/DE 是否重新 enable;

  6. 最后再查应用层是否重新 modeset 或刷新 framebuffer。

简单说,HDMI 热插拔要拆成三步:检测到插拔、读到显示器、重新出图。只要按这三层分开验证,基本能定位是硬件 HPD/DDC 问题、驱动热插拔流程问题,还是用户态没有重新设置显示模式。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发