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)则是同步信号与有效像素之间的“空白带”,它不显示图像,但必不可少。没有消隐区,接收端无法区分行与行、帧与帧,画面会撕裂或错位。

调试口诀:先看 Htotal/Vtotal 是否与标准时序一致,再看 Hsync/Vsync 极性是否匹配,最后看前后肩是否落在 Panel 允许范围内。

四、色彩空间与像素格式

像素格式决定“每个像素在内存里怎么排布”,色彩空间决定“这些数值代表什么颜色”。两者经常被混淆,但调试方向完全不同。

  • RGB888:每像素 24 位,红绿蓝各 8 位,最常见,颜色准确。
  • RGB565:每像素 16 位,带宽低,但颜色过渡可能出现带状。
  • ARGB8888 / XRGB8888:带 Alpha 或填充位,常用于 UI 合成。
  • YUV420 / YUV422:视频常用,色度抽样降低带宽,但文字边缘可能发虚。
  • 色彩空间:BT.601、BT.709、sRGB 等,决定 YUV 与 RGB 的转换矩阵和 Gamma。

如果屏幕整体偏绿、偏紫,或者黑白灰出现色偏,往往是色彩空间或 YUV/RGB 转换矩阵配置错误;如果出现明显色带,则可能是像素格式位宽不足,例如把 RGB888 降成了 RGB565。

一帧显示时序与像素格式关系 水平方向(一行) Hsync Hback Hactive(有效像素 1920) Hfront Htotal = Hsync + Hback + Hactive + Hfront = 2200 垂直方向(一帧) Vsync Vback Vactive(有效行 1080) Vfront Vtotal = Vsync + Vback + Vactive + Vfront = 1125 像素时钟 = Htotal × Vtotal × 刷新率 = 2200 × 1125 × 60 ≈ 148.5 MHz 像素时钟是显示链路的节拍基准,决定带宽与时序可行性 像素格式与色彩空间 RGB888 / 24bit RGB565 / 16bit ARGB8888 YUV420 / 422 BT.601 / BT.709 / sRGB

五、典型调试场景:从参数到现象

假设一块 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 层已经确定,应用层无法修正。
调试显示问题时,建议按“像素时钟 → Htotal/Vtotal → 同步极性 → 消隐区 → 像素格式 → 色彩空间”的顺序逐项核对,避免在错误的方向上反复修改。

掌握这些基础概念后,再看瑞芯微 VOP、MIPI DSI、HDMI 的驱动配置,就能把“现象”快速映射到“参数”,把“猜测”变成“定位”。这是后续 KMS 模式设置、EDID 解析和 Panel 驱动调试的共同基础。