2. 显示基础概念
在瑞芯微(Rockchip)Linux 平台上调试 KMS 显示时,很多“黑屏、花屏、偏移、闪烁、颜色不对”的问题,最终都能追溯到几个最基础的显示参数上。它们不是抽象名词,而是 DRM/KMS 驱动真正写进 CRTC、Encoder、Connector 和 Panel 的寄存器值。理解这些概念,等于拿到了阅读 modetest、drm_info、内核日志和 DTS 显示节点参数的钥匙。
一、像素时钟:整条显示链路的“节拍器”
像素时钟(Pixel Clock,单位 MHz)表示显示控制器每秒输出多少个像素点。它决定了“一行像素在什么速度下被送出”,是时序参数的核心。像素时钟不是随便设的,它由分辨率、刷新率、消隐区共同决定:
Pixel Clock = Htotal × Vtotal × RefreshRate
其中:
Htotal = Hactive + Hfront + Hsync + Hback
Vtotal = Vactive + Vfront + Vsync + Vback
例如 1920×1080@60Hz 的 CEA-861 标准时序,Htotal 为 2200,Vtotal 为 1125,则像素时钟约为 2200×1125×60 ≈ 148.5 MHz。如果 DTS 中 clock-frequency 写错,屏幕可能直接无输出,或者出现水平方向压缩、抖动。
二、分辨率、刷新率与有效显示区
分辨率描述的是“有效像素矩阵”,即 Hactive × Vactive,例如 1920×1080。刷新率(Refresh Rate,Hz)表示整帧画面每秒被完整扫描的次数。注意:刷新率不等于像素时钟,也不等于 MIPI DSI 的 Lane 速率。它们之间的关系是:
- 分辨率:决定有效像素数量,影响带宽和显存占用。
- 刷新率:决定人眼感知的流畅度,也影响 Vtotal 的取值。
- 像素时钟:把分辨率和刷新率“翻译”成硬件可执行的节拍。
- Lane 速率:MIPI DSI 等接口的物理层速率,需满足像素时钟对应的数据吞吐。
在瑞芯微平台,VOP(Video Output Processor)支持多种分辨率输出,但并非任意组合都能稳定工作。例如 4K@60Hz 对 VOP 带宽、DDR 带宽和时钟树都有更高要求,调试时应优先使用标准时序。
三、时序参数、行场同步与消隐区
一帧画面并不是“像素紧挨着像素”直接送出的,中间必须插入同步信号和消隐区。完整时序由以下参数构成:
| 参数 | 含义 | 典型作用 |
|---|---|---|
| Hactive | 水平有效像素 | 可见图像宽度 |
| Hfront / Hback | 水平前肩 / 后肩 | 行消隐区,给显示器件准备时间 |
| Hsync | 行同步脉冲宽度 | 标记一行开始 |
| Vactive | 垂直有效行数 | 可见图像高度 |
| Vfront / Vback | 垂直前肩 / 后肩 | 场消隐区,给帧切换留时间 |
| Vsync | 场同步脉冲宽度 | 标记一帧开始 |
行同步(HSYNC)和场同步(VSYNC)是显示链路的“定位信号”。HSYNC 告诉接收端“新的一行开始了”,VSYNC 告诉接收端“新的一帧开始了”。消隐区(Blanking)则是同步信号与有效像素之间的“空白带”,它不显示图像,但必不可少。没有消隐区,接收端无法区分行与行、帧与帧,画面会撕裂或错位。
四、色彩空间与像素格式
像素格式决定“每个像素在内存里怎么排布”,色彩空间决定“这些数值代表什么颜色”。两者经常被混淆,但调试方向完全不同。
- RGB888:每像素 24 位,红绿蓝各 8 位,最常见,颜色准确。
- RGB565:每像素 16 位,带宽低,但颜色过渡可能出现带状。
- ARGB8888 / XRGB8888:带 Alpha 或填充位,常用于 UI 合成。
- YUV420 / YUV422:视频常用,色度抽样降低带宽,但文字边缘可能发虚。
- 色彩空间:BT.601、BT.709、sRGB 等,决定 YUV 与 RGB 的转换矩阵和 Gamma。
如果屏幕整体偏绿、偏紫,或者黑白灰出现色偏,往往是色彩空间或 YUV/RGB 转换矩阵配置错误;如果出现明显色带,则可能是像素格式位宽不足,例如把 RGB888 降成了 RGB565。
五、典型调试场景:从参数到现象
假设一块 MIPI DSI 屏在瑞芯微板子上点亮后出现“画面整体右移约 100 像素,右侧有黑边”。这通常不是分辨率写错,而是 Hback 或 Hfront 与 Panel 规格不匹配。此时应检查 DTS 中 panel 节点的 hback-porch、hfront-porch、hsync-len 是否与屏厂规格书一致。类似地,如果画面上下滚动或抖动,优先检查 Vsync 极性和 Vtotal。
# 查看当前显示模式与时序
modetest -M rockchip -c
modetest -M rockchip -p
# 典型 DTS 时序片段
display-timings {
timing0 {
clock-frequency = <148500000>;
hactive = <1920>;
vactive = <1080>;
hfront-porch = <88>;
hsync-len = <44>;
hback-porch = <148>;
vfront-porch = <4>;
vsync-len = <5>;
vback-porch = <36>;
hsync-active = <0>;
vsync-active = <0>;
};
};
六、常见误区与复盘
- 误区一:只改分辨率,不改时序。 分辨率只是 Hactive/Vactive,Htotal/Vtotal 不变会导致刷新率漂移。
- 误区二:把像素时钟当成刷新率。 148.5 MHz 不是刷新率,60 Hz 才是刷新率。
- 误区三:忽略消隐区。 消隐区过小会导致接收端来不及准备,出现边缘闪烁或丢行。
- 误区四:像素格式与色彩空间混用。 RGB888 配 BT.709 矩阵,颜色会明显异常。
- 误区五:只看应用层,不看 KMS 层。 很多显示异常在 DRM 层已经确定,应用层无法修正。
掌握这些基础概念后,再看瑞芯微 VOP、MIPI DSI、HDMI 的驱动配置,就能把“现象”快速映射到“参数”,把“猜测”变成“定位”。这是后续 KMS 模式设置、EDID 解析和 Panel 驱动调试的共同基础。