4. 显示接口与协议

在 RK3399 的显示驱动移植中,屏幕点不亮、花屏、偏移、闪烁等问题,绝大多数最终都会落到“接口协议理解是否正确”和“时序参数是否匹配”这两件事上。RK3399 的 VOP(Video Output Processor)本身只负责产生像素数据流,而 MIPI DSI、LVDS、eDP、HDMI 是四种完全不同的物理层与链路层协议,它们对时钟、数据打包、训练流程、时序描述方式的要求各不相同。本节先把四类接口的协议骨架讲清楚,再统一落到时序参数上,为后续设备树配置和驱动调试打基础。

一、四类接口的协议定位与信号链

从 RK3399 的显示子系统看,VOP 输出的是并行的 RGB 像素流、行场同步信号和像素时钟。不同接口做的事情,本质上是把这组并行信号“翻译”成各自协议要求的串行或差分形式:

  • MIPI DSI:面向移动端和嵌入式屏,采用差分对传输,分高速(HS)和低功耗(LP)两种模式,数据以包(Packet)为单位,支持命令模式和视频模式。
  • LVDS:面向工业与车载屏,采用低压差分信号,把并行 RGB 按 7:1 串化成若干对数据通道,加一对时钟通道,协议简单、抗干扰强。
  • eDP:面向笔记本与高分辨率屏,基于 DisplayPort 协议,使用差分主链路(Main Link)加 AUX 辅助通道,需要链路训练和 EDID 读取。
  • HDMI:面向消费显示器和电视,使用 TMDS 差分通道,包含视频数据周期、数据岛周期和控制周期,支持 EDID 与热插拔检测(HPD)。

下图给出 RK3399 显示通路中四类接口的信号链关系,重点体现“VOP 并行像素流 → 接口控制器 → 物理链路 → 屏幕/显示器”的转换位置,以及各自的关键控制信号。

RK3399 显示接口信号链与协议转换 VOP 并行 RGB 像素流 HSYNC / VSYNC DE / PCLK MIPI DSI 控制器 HS/LP 模式 · Packet 命令模式 / 视频模式 LVDS 控制器 7:1 串化 · 差分对 VESA / JEIDA 映射 eDP 控制器 Main Link + AUX 链路训练 · EDID HDMI 控制器 TMDS · DDC/CEC HPD 热插拔 D-PHY 差分链路 1 Clock + 1~4 Data Lane HS 速率 / LP 状态 LVDS 差分链路 1 Clock + 3/4 Data Pair 单路/双路模式 eDP 差分链路 1~4 Lane Main Link AUX CH 双向 TMDS 差分链路 3 Data + 1 Clock DDC / CEC / HPD MIPI 屏 DSI Panel LVDS 屏 工业/车载屏 eDP 屏 高分辨率面板 HDMI 显示器 电视/显示器

二、四类协议的链路特征对比

理解协议差异,最有效的方式是对照它们的链路结构、时钟来源和初始化流程。下表把四类接口的关键点集中列出,便于在设备树和驱动中快速定位配置项。

接口 物理层 时钟来源 初始化关键动作 典型应用
MIPI DSI D-PHY 差分,1 Clock + 1~4 Lane HS 时钟由控制器产生,LP 状态用于控制 发送初始化命令序列、设置视频模式时序 手机屏、MIPI 转 LVDS 桥
LVDS 低压差分,1 Clock + 3/4 Data Pair 像素时钟直接驱动串化器 配置通道映射、双路/单路、颜色深度 工业屏、车载屏
eDP 差分 Main Link + AUX 双向 链路时钟由训练过程协商 读 EDID、链路训练、设置 Lane 速率 笔记本屏、高分辨率面板
HDMI TMDS 3 Data + 1 Clock TMDS 时钟由像素时钟倍频得到 读 EDID、HPD 检测、设置视频模式 电视、显示器、投影

三、时序参数解析:从像素到帧的完整描述

无论哪种接口,屏幕最终都需要一组完整的时序参数来描述“一帧画面如何被扫描出来”。这组参数通常写在设备树的 display-timings 节点中,核心字段包括:

  • clock-frequency:像素时钟频率,单位 Hz,决定每秒输出多少像素。
  • hactive / vactive:有效像素宽度和高度,即分辨率。
  • hfront-porch / hback-porch / hsync-len:行方向的前肩、后肩和同步脉冲宽度。
  • vfront-porch / vback-porch / vsync-len:场方向的前肩、后肩和同步脉冲宽度。
  • hsync-active / vsync-active:同步信号有效极性,0 为低有效,1 为高有效。

这些参数共同决定了一帧的总像素数和总行数。以 1920×1080@60Hz 为例,常见时序如下:

display-timings {
    timing0 {
        clock-frequency = <148500000>;   /* 148.5 MHz */
        hactive = <1920>;
        vactive = <1080>;
        hfront-porch = <88>;
        hback-porch = <148>;
        hsync-len = <44>;
        vfront-porch = <4>;
        vback-porch = <36>;
        vsync-len = <5>;
        hsync-active = <0>;
        vsync-active = <0>;
        de-active = <1>;
        pixelclk-active = <0>;
    };
};

计算验证:行总像素 = 1920 + 88 + 148 + 44 = 2200;场总行数 = 1080 + 4 + 36 + 5 = 1125;像素时钟 = 2200 × 1125 × 60 ≈ 148.5 MHz,与 clock-frequency 一致。如果这个乘积对不上,屏幕就会出现偏移、抖动或无法锁定。

核心公式:像素时钟 = (hactive + hfront-porch + hback-porch + hsync-len) × (vactive + vfront-porch + vback-porch + vsync-len) × 刷新率。

四、典型场景与调试误区

在 RK3399 上移植 MIPI 屏时,最常见的误区是只改了分辨率,却没有同步修改前后肩和同步宽度。MIPI 屏的初始化命令序列通常由屏厂提供,但时序参数必须与屏规格书严格一致。另一个误区是忽略极性:hsync-active 和 vsync-active 配反,会导致画面左右或上下镜像偏移。

LVDS 屏常见问题是通道映射错误。VESA 和 JEIDA 两种映射方式对同一组数据线的排列不同,配错会出现颜色错乱或花屏。eDP 和 HDMI 则更依赖 EDID 读取和链路训练,如果 AUX 通道或 DDC 通道不通,驱动会直接报链路训练失败或读不到 EDID。

排障提示:遇到点不亮时,先确认三件事:一是像素时钟是否与规格书一致;二是同步信号极性是否正确;三是接口 Lane 数、速率、映射方式是否与硬件连接匹配。这三项覆盖了绝大多数显示异常。

把四类接口的协议骨架和统一时序参数放在一起理解,后续在设备树中配置 DSI、LVDS、eDP、HDMI 节点时,就能清楚每个字段对应协议中的哪一层,也能在出现花屏、偏移、闪烁时快速定位是链路问题还是时序问题。