3. RK3399 显示硬件原理
本章深入剖析 RK3399 显示子系统的硬件架构,重点讲解 VOP(Video Output Processor)模块的内部流水线、三种主流显示接口(MIPI DSI、HDMI、eDP)的电气与协议特性,以及显示时钟树与 PLL 的配置方法。理解这些硬件原理是后续驱动移植与调试的基础。
3.1 VOP(Video Output Processor)模块介绍
VOP 是 RK3399 显示通路的核心,负责从内存中读取帧缓冲区数据,经过合成、缩放、格式转换等处理后,将像素流发送给显示接口控制器。RK3399 集成两路 VOP:VOPB(主显示)和 VOPL(副显示),分别支持不同的分辨率和接口组合。
3.1.1 VOP 内部流水线
VOP 内部采用经典的“取指-解码-执行”流水线设计,主要包含以下阶段:
- DMA 引擎(Fetch):通过 AXI 总线从 DDR 中读取帧数据,支持 AFBC(帧缓冲压缩)解压。
- Win0/Win1/Win2 图层(Decode):最多支持 3 个独立图层,每个图层可独立配置格式、位置、透明度。
- Blender(合成):将多个图层按 Z-order 进行 Alpha 混合,生成最终像素。
- Dither & CSC(色彩处理):完成色深抖动(如 10bit→8bit)和色彩空间转换(YUV↔RGB)。
- Timing Generator(时序生成):根据显示模式生成行/场同步信号、数据使能信号。
- Output Interface(输出接口):将并行像素数据转换为 MIPI DSI/HDMI/eDP 所需的串行格式。
3.1.2 VOP 寄存器空间与关键配置
VOP 寄存器基地址如下:
| 模块 | 基地址 | 大小 | 功能 |
|---|---|---|---|
| VOPB | 0xFF8F0000 | 0x1000 | 主显示控制器 |
| VOPL | 0xFF900000 | 0x1000 | 副显示控制器 |
| GRF | 0xFF770000 | 0x1000 | 全局寄存器,控制 VOP 时钟/复位 |
驱动初始化时需配置以下关键寄存器组:
- SYS_CTRL:全局使能、双缓冲开关、待机模式。
- WINx_CTRL:图层使能、格式选择、颜色 key、透明度。
- DSP_CTRL:显示模式(逐行/隔行)、输出格式、RGB 顺序。
- DSP_VTOTAL/HTOTAL:垂直/水平总像素数,决定刷新率。
- MBOX_CTRL:帧同步与中断控制。
DSP_VTOTAL 和 DSP_HTOTAL 必须与显示器的 EDID 或设备树中的 timing 参数严格匹配,否则会出现画面撕裂或黑屏。
3.2 MIPI DSI / HDMI / eDP 接口概述
RK3399 支持三种主流显示接口,分别面向不同应用场景。下表对比了它们的核心差异:
| 接口 | 最大分辨率 | 带宽 | 线缆长度 | 典型应用 |
|---|---|---|---|---|
| MIPI DSI | 2560x1600@60Hz | 4-lane, 1.5Gbps/lane | < 0.5m | 平板、手机、嵌入式 LCD |
| HDMI 2.0 | 4096x2160@60Hz | 18Gbps | < 5m | 电视、显示器、投影 |
| eDP 1.3 | 4096x2160@60Hz | HBR2, 5.4Gbps/lane | < 1m | 笔记本、一体机、高端平板 |
3.2.1 MIPI DSI 接口
MIPI DSI 采用高速差分信号传输,RK3399 集成两个 DSI 控制器(DSI0/DSI1),每个支持 4 条数据 lane。DSI 协议层分为:
- PHY 层:D-PHY,负责电气特性与时钟恢复。
- Lane 管理层:数据分发、CRC 校验、EoT 包。
- 协议层:长包/短包、命令模式与视频模式。
- 应用层:像素流打包,支持 RGB/YCbCr 格式。
驱动中需配置 DSI 的 video mode timing 与 VOP 的 timing 保持一致,同时设置 D-PHY 的 HS clock 频率。
3.2.2 HDMI 接口
RK3399 内置 HDMI 2.0 发送器,支持 HDCP 2.2 与 CEC。HDMI 驱动需处理:
- EDID 读取:通过 DDC 通道获取显示器能力。
- AVI InfoFrame:发送色彩格式与量化范围。
- 音频时钟再生:N/CTS 参数计算。
- TMDS 时钟校准:根据分辨率调整 TMDS 时钟。
3.2.3 eDP 接口
eDP 基于 DisplayPort 标准,使用嵌入式时钟与 AUX 通道。RK3399 的 eDP 控制器支持:
- Main Link:1/2/4 lane,HBR/HBR2 速率。
- AUX CH:用于链路训练与 EDID 读取。
- PSR(面板自刷新):降低静态画面功耗。
eDP 驱动初始化流程:
1. 使能 eDP 电源与时钟
2. 复位 eDP 控制器
3. 配置 Main Link 参数(lane 数、速率)
4. 启动 AUX 通道读取 EDID
5. 执行链路训练(Link Training)
6. 设置视频流 timing
7. 使能视频流输出
3.3 显示时钟树与 PLL 配置
RK3399 的显示时钟树以 PLL(锁相环) 为源头,经过多级分频与门控后供给 VOP 和显示接口。错误的时钟配置是导致显示异常的首要原因。
3.3.1 时钟树结构
显示相关时钟路径如下:
外部晶振 (24MHz)
└─► PLL_CPLL (最高 1.6GHz)
├─► ACLK_VOP (VOP 总线时钟)
├─► DCLK_VOP (VOP 像素时钟)
└─► PLL_GPLL (1.2GHz)
├─► TMDS_CLK (HDMI)
└─► MIPI_DPHY_CLK (DSI PHY)
关键时钟频率计算公式:
- 像素时钟 (DCLK) = H_total × V_total × 刷新率
- TMDS 时钟 = 像素时钟 × 10(HDMI)
- DSI HS 时钟 = 像素时钟 × 位宽 / lane 数
3.3.2 PLL 配置方法
RK3399 的 PLL 采用 整数分频 模式,配置寄存器 CRU_PLL_CON 中的 FBDIV、POSTDIV1、POSTDIV2 参数:
VCO = 24MHz × FBDIV
PLL_OUT = VCO / (POSTDIV1 × POSTDIV2)
例如,要生成 148.5MHz 的像素时钟(1080p@60Hz 标准):
FBDIV = 99
POSTDIV1 = 4
POSTDIV2 = 4
VCO = 24 × 99 = 2376 MHz
PLL_OUT = 2376 / (4 × 4) = 148.5 MHz
3.3.3 设备树时钟配置示例
在 RK3399 设备树中,显示时钟通过 assigned-clocks 属性指定:
&vopb {
status = "okay";
assigned-clocks = &cru ACLK_VOPB, &cru DCLK_VOPB;
assigned-clock-rates = <400000000>, <148500000>;
};
&hdmi {
status = "okay";
assigned-clocks = &cru PLL_GPLL, &cru TMDS_CLK;
assigned-clock-rates = <1200000000>, <1485000000>;
};
驱动中通过 clk_set_rate() 动态调整时钟,需注意 时钟依赖顺序:必须先使能 PLL,再配置分频器,最后使能 VOP 接口时钟。
3.4 本章小结
本章覆盖了 RK3399 显示硬件的三大核心模块:
- VOP 流水线:从 DMA 取帧到接口输出的完整路径,双 VOP 架构支持双屏异显。
- 显示接口:MIPI DSI 适合短距嵌入式屏,HDMI 适合远距多媒体,eDP 适合高性能内置屏。
- 时钟树与 PLL:精确的时钟配置是显示稳定的前提,需掌握整数分频计算与设备树配置方法。