嵌入式分享#47:为什么 eDP 屏会概率性不显示?(RK3568)
嵌入式分#47为什么 eDP 屏会概率性不示RK3568摘要RK3568 调试 eDP 时屏幕发无法点亮日显示 Link Training 失败。文分析 eDP Training 的作用并给出在 U-Boot 阶段重复训练的临时修复方案。1. 问题描述使用 eDP/HDMI 屏幕有时会出现率性显示有时正常、有时无法点亮。RK3568 平台调试 eDP 屏时查系统日发现故是Training链路训练失败。这类题通常不是配置“完全错误”是信号质量或序在临界状态因此表现“率性成功”。2. 原因分析eDP 与 HDMI 的显示逻辑类似通常不需要用户手动修改显示参数。eDP 会通过 AUX 总线取屏幕 EDID自动获得显示分辨率等信息。在正传输视频信号之前eDP 会进行硬路验证也就常说的Link Training链路训练/握手读取解析屏幕能力信息对路时钟恢复Clock Recovery进校验校验通道均衡Channel Equalization训练成功后SoC 视频输控制器开始输出视频。如果 Training 失败视频输出控制器停止输出视频信号屏幕自然无法点亮。当屏幕连接器或走的硬件参处于临界值时就可能现偶尔成、偶失败的现象。3. 临时解决方案重进行 Training由于该屏幕存在一定概率能够 Training 成功可以在 U-Boot 阶段修改驱动在 Clock Recovery 阶段重复尝试到训练成功或达到重试次数。下面是analogix_dp.c的示例修改diff --git a/drivers/video/drm/analogix_dp.c b/drivers/video/drm/analogix_dp.c index 70cd620f..6b9dc0be 100644 --- a/drivers/video/drm/analogix_dp.c b/drivers/video/drm/analogix_dp.c -463,7 463,7 static int analogix_dp_init_training(struct analogix_dp_device *dp, static int analogix_dp_sw_link_training(struct analogix_dp_device *dp) { - int retval 0, training_finished 0; - int retval 0, training_finished 0, num 0; - dp-link_train.lt_state START; - -476,7 476,13 static int analogix_dp_sw_link_training(struct analogix_dp_device *dp) - dev_err(dp-dev, LT link start failed!\\n); - break; - case CLOCK_RECOVERY: - - retval analogix_dp_process_clock_recovery(dp); - for (num 0; num 5; num) { /* 重复 5 次num 可按硬件情况调 */ - retval analogix_dp_process_clock_recovery(dp); - dev_err(dp-dev, LT link failed num%d!\\n, num); - if (!retval) - break; - } - if (retval) - dev_err(dp-dev, LT CR failed!\\n); - break; - 重试次数只是示例值实际应结合屏幕和信号质量测试结果调整避免无意义地长启时间。 ## 4. 验证结 在 U-Boot 中加入上述重复 Training 逻辑后屏幕 Training 成功并可以常点亮。 ## 5. 方案边与根治建议 上述方法属于**治标不本**根本原因仍然是链信号质量于临界状态后续硬态进一步劣化仍可再次出现 Training 失败。 建议按以下优先级处 | 优先级 | 建议 | 说明 | |---|---|---| | 1 | 优化硬件信号质量 | 检查阻抗、线、连器、电完整性和 EMI难度高但属于根治 | | 2 | 更换屏幕 | 选择链路裕量更充足、兼容性更好的屏幕通常直接 | | 3 | 件重复 Training | 适合作临时缓解措施不应替代硬件整改 | **论**如果项允许优先优硬件信号或更换屏重复 Training 仅供位时参考。