我们使用的主机都需要配置一个显示器,开发板也不例外,需要配置一个屏幕外设。屏幕的选型需要注意,并非随意购买一块屏幕接上线就能正常点亮。我们先来了解两个概念 MIPI 和 HDMI,一般的开发板都支持这两种视频信号的输出(DP 不在此文说明)。
MIPI & HDMI 概念
可概括为一句核心:MIPI 是芯片到屏幕 / 摄像头的板内内部接口;HDMI 是设备与设备之间对外的音视频接口。二者协议、PHY 完全不同,不能直接转接,必须经过芯片转换。
MIPI(Mobile Industry Processor Interface,移动产业处理器接口)
MIPI 是一整套协议家族,不是单一接口:
- DSI:Display Serial Interface,AP → 显示屏(手机 / 嵌入式屏)
- CSI:Camera Serial Interface,摄像头 → AP
- PHY:D-PHY(最常用,HS 高速 / LP 低功耗双模式)、C-PHY(更高带宽,高端手机)
特点:
- 低压差分,低功耗,手机、平板、车机、开发板内部排线(FPC)
- 短距离:PCB/FPC,一般 <30cm,不适合外部长线
- 只传图像 + 控制指令,原生不带音频
- Lane 通道:1/2/4 Lane,叠加提升带宽;嵌入式时钟,无单独时钟差分对
- 无热插拔,无 HDCP 版权保护,没有 EDID 握手(DSI 有读取 DCS 屏寄存器)
HDMI(High Definition Multimedia Interface,高清多媒体接口)
特点:
- 设备对外接口:主机 / 盒子 / 电脑 ↔ 显示器 / 电视,音视频同传
- TMDS 差分信号(HDMI 2.1 为 FRL),独立时钟通道,支持长线,可达数米~10 米
- 内置 EDID 握手、HDCP 版权加密、CEC 设备控制、ARC/eARC 音频回传
- 版本带宽:HDMI1.4 (10.2Gbps) / HDMI2.0 (18Gbps) / HDMI2.1 (48Gbps),支持 4K/8K、HDR、VRR
- 支持热插拔,标准外部连接器(A/C/D 型)
两者对比
| 维度 | MIPI | HDMI |
|---|---|---|
| 定位 | 板内内部接口 | 设备对外接口 |
| 传输 | 图像 + 控制指令,原生不带音频 | 音视频同传 |
| 距离 | 一般 <30cm | 可达数米~10 米 |
| 供电 | 排线直接供电 | 一般需要额外供电 |
| 热插拔 | 不支持 | 支持 |
| 版权 | 无 HDCP、无 EDID | 有 HDCP、EDID、CEC |
遇到的显示问题
为什么要了解这几个概念呢?本文在实践中遇到了相关问题:购置了开发板,但未额外购买显示器,实验室恰好有一个闲置的 7 寸 HDMI 屏幕,而板子也刚好支持 HDMI 输出:
可以看到屏幕没有正常展示视频信号。起初并未怀疑是这台 7 英寸设备的问题,因为此前已进行验证:将 Windows 的输出接到这台 7 英寸屏幕上可以正常展示:
这样就以为是板子的问题了。初步怀疑是因为板子默认支持 MIPI 的输出,所以 HDMI 的屏幕没有收到视频信号。随后尝试刷入了一个默认仅支持 HDMI 输出的固件,刷写后仍然不行,便排除了这一可能,接下来通过抓取日志来排查。
显示问题的排查手段
我们排查显示问题一般有以下手段:
-
cat /sys/class/drm/*HDMI*/status -
cat /sys/class/drm/*HDMI*/modes用来查询物理屏幕的连接状态和模式。
-
dmesg | grep -iE 'hdmi|edid|hpd'打印内核环形缓冲区日志(内核启动、硬件驱动、中断、硬件热插拔事件都会在这里输出)。DRM 显示驱动(HDMI/DP)的硬件事件全部会由内核打印在这里。
-
dumpsys display打印 Android Framework 层 DisplayManagerService(显示管理服务) 的全部状态,属于用户态 Framework 的显示信息,不是内核 DRM 硬件日志。
更换显示器代替 7英寸显示
在仅支持 HDMI 输出的镜像上,7 英寸显示屏无法正常展示视频信号,但随意更换一台显示器即能正常显示,说明问题并不在镜像本身,而是这块 7 英寸 HDMI 屏存在显示问题。
在《设备树 dts & MIPI 屏幕视频输出信号问题排查》一文中,本文将讲解如何解决 MIPI 屏幕与板子无法点亮的问题,并扩展一些 dts / dtsi 设备树相关知识。
Scrcpy 投屏
如果没有连接物理屏,但又需要查看桌面显示,此时即可使用 scrcpy 将画面投屏到桌面:
这里需要特别说明的是:Scrcpy 的画面来源并非 DP/HDMI 输出,它有两种主流的采集方式:
- Android 屏幕录制接口(
MediaProjection):从 Android SurfaceFlinger 获取帧缓冲区,是软件截屏通路,完全绕开物理显示输出,无需外接显示器。 - 较旧版本也支持
adb shell screencap,同样是软件读帧,不经过 HDMI/DP 硬件编码器。
视频输出方式总结
综上,可归纳为三种视频输出方式:
| 方式 | 说明 | 备注 |
|---|---|---|
| MIPI | 直接排线供电,不需要单独供电 | 需要刷对应固件的设备树,否则不一定能正常显示;排线一般较短 |
| HDMI | 更通用,线束可以比较长 | 一般需要额外供电 |
| 虚拟屏创建 | / | / |
MIPI 排线相关:MIPI 显示文档
如果在镜像层面需要指定默认支持 MIPI / DP / HDMI 的输出,需要修改 设备树,然后重新烧录新的镜像。