RK平台显示排障系统化:黑屏、MIPI、HDMI 到信号质量一条链路 电子说
显示问题的本质是"画面从 VOP2 合成 → 输出接口 → 屏/显示器"这条链路在哪一段断了、或时序/信号不对。本文把显示链路讲透:先定位黑屏/无信号,再逐个接口(MIPI DSI、HDMI)排查,最后是花屏/撕裂与信号质量。

排障从"画面到哪一步就没了"入手:应用层能设置吗(modetest)、内核接口起来了没(dmesg)、屏/显示器本身通不通(背光/EDID)。下面六个问题域覆盖显示排障的主要场景。
一、黑屏 / 无信号:从哪一段断起
黑屏先分清"是完全没信号,还是有信号没画面"。"没信号"大多在输出接口→屏这一段(接口没使能、屏没上电、线缆/时序);"有信号但黑"在VOP2→应用这一段(图层/帧缓冲没提交)。
| 段 | 怎么确认 | 常见原因 |
|---|---|---|
| 应用/DRM | modetest -p 能看到 connector/mode、modetest -s 能出画面 | 应用没开 CRTC/plane、没有提交帧缓冲 |
| 内核接口 | dmesg | grep -i drm 看 rockchip-drm/vop2/接口 probe、/sys/kernel/debug/dri/* | dts 里接口 status 没开、接口没连到 VP |
| 屏/显示器 | 背光亮不亮、面板 reset 时序、HDMI 显示器能否识别 | 背光没开、屏没上电、线缆/信号 |
接口在 dts 里的开关是"黑屏"高发原因:本板 MIPI/HDMI 就是靠 #define HDMI 0/1 切换 &dsi/&hdmi 的 status。
二、MIPI DSI 屏点不亮:时序、背光、初始化序列
本板 MIPI 屏(1200x1920)的配置在 kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7608-v1a-mipi.dtsi,是排查"点不亮"的对照依据。点不亮按"背光 → reset → 初始化序列 → 时序 → lane"顺序查:
| 检查项 | 本板配置(dts) | 出问题表现 |
|---|---|---|
| 背光 | pwm-backlight(pwm1_6ch_5),默认亮度 200 | 屏发亮但全黑/偏暗——先分"背光亮没亮" |
| reset | reset-gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>,reset 10ms | 复位时序不对,面板不初始化 |
| 初始化序列 | panel-init-sequence = [05 78 01 11 / 05 14 01 29](sleep out → display on) | 序列错/缺,屏不出图 |
| 时序 | 1200x1920,clock 150MHz,porch 见 display-timings | 时序错 → 花屏/闪屏/无图 |
| lane / 速率 | dsi,lanes = <4>,RGB888,video burst,可选 rockchip,lane-rate | lane 数与屏不符、速率不够 → 无图或花屏 |
MIPI DSI 控制器驱动是 drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c。排查时可先用 modetest 确认 dsi connector 是否 probe 出来、分辨率是否正确,再回头逐项对 dts。
三、HDMI 输出排障:EDID、分辨率与 CEC
RK3576 HDMI 驱动是 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c。HDMI 问题大多围绕 EDID(显示器告诉内核支持什么分辨率)和输出是否协商到:
| 现象 | 根因 | 处理 |
|---|---|---|
| 有信号但分辨率不对/拉伸 | EDID 没读到或协商的分辨率与屏不符 | modetest -p 看 modes;用 -s 强制分辨率 |
| 没信号/显示器不识别 | hdmi 节点 status 关、EDID 读不到、DDC 线路 | 确认 dts hdmi 使能;查 DDC/EDID 读取日志 |
| HDMI-CEC 控制无效 | CEC 功能/物理地址 | 按官方 HDMI-CEC 文档核对 CEC 配置 |
判断链路最快的方式仍是 modetest:能列出 HDMI connector 和 modes,说明接口与 EDID 基本正常;列不出来,问题在接口/EDID/物理链路。
四、花屏 / 撕裂 / vsync
花屏和撕裂的根因不同:
花屏 :多因接口带宽不够、时序参数错、信号质量差(MIPI lane 速率/HDMI 时序),或 VOP2 图层配置乱;
撕裂(tearing) :刷屏过程中换了帧缓冲,VOP2 的 vsync 没有把 swap 同步到帧边界。应用层用带 DRM_MODE_PAGE_FLIP_ASYNC 或不等待 vblank 提交时最容易撕裂;
vsync :VOP2 的 vsync 决定刷屏节奏,rockchip_drm_vop2.c 里管理和上报,可看 /sys/kernel/debug/dri 的 vblank 计数。
先用 modetest -s 出静态画面排除应用因素;若静态也花,回查时序/带宽/信号;只有动态撕裂,多半是 vsync/页翻转同步问题。
五、modetest 与 DRM 直接显示
验证显示链路,modetest(libdrm 自带)是最快的工具:
modetest -p # 列 connector / modes / encodermodetest -c # 列出所有 connector 状态modetest -s 32:1920x1080@60 # 在 connector 32 上强制出一帧(验证输出)# 直接显示 API(RK 提供,绕开合成,直接送帧)# kernel-6.1/drivers/gpu/drm/rockchip/rockchip_drm_direct_show.c
RK 的 rockchip_drm_direct_show(alloc buffer → get plane/crtc → commit)用于在带显示的调试里直接送帧,配合官方 DRM_Direct_Show 文档可作为"绕过应用层"的验证手段。
六、信号质量:DP 眼图 SI 测试等
画面"时好时坏"、特定速率才花屏,多半是信号完整性问题。这类要靠仪器:示波器/眼图看 MIPI/HDMI/DP 的信号质量,按官方 SI 测试指南测量与判据(如 DP 的 Rockchip_DisplayPort_SI_Test_Guide_CN.pdf)。软件侧能做的:降速率/降分辨率验证、查 lane 数配置、确认线缆与连接器。
本节涉及示波器/眼图等仪器,需硬件实验室配合;软件侧结论以"降参验证 + dts 配置核对"为主。
显示排障按链路走:黑屏先分段定位(应用/接口/屏)→ MIPI 屏按 背光/reset/序列/时序/lane 逐项 → HDMI 看 EDID/协商 → 花屏撕裂分静态动态 → modetest/直接显示做快速验证 → 信号问题上仪器。链路每一段都有 dts 配置、dmesg、modetest 三层证据可查。
官方文档依据:
docs/cn/Common/DISPLAY/DRM/Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf、DRM_Direct_Show_CN.pdf、HDMI_CN.pdf、HDMI-CEC_CN.pdf、MIPI_DSI2_CN.pdf、eDP_CN.pdf、LVDS_CN.pdf、DP/DisplayPort_CN.pdf、DP/DisplayPort_SI_Test_Guide_CN.pdf、docs/cn/Linux/Graphics/Rockchip_Developer_Guide_Linux_Graphics_CN.pdf
SDK 源码依据:
kernel-6.1/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c、rockchip_drm_vop2_reg.c、dw-mipi-dsi2-rockchip.c、dw_hdmi-rockchip.c、rockchip_lvds.c、rockchip_rgb.c、rockchip_drm_direct_show.c、kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7608-v1a-mipi.dtsi(1200x1920 屏/背光/初始化序列/时序)、ido-evb7609-v1a-mipi.dts(#define HDMI 切换)、kernel-6.1/arch/arm64/configs/rockchip_linux_rk3576_defconfig(CONFIG_DRM_ROCKCHIP=y)
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !