3. RK3399硬件基础
RK3399 是瑞芯微面向中高端平板、盒子、工控与商显设备推出的六核 SoC,采用双 Cortex-A72 + 四 Cortex-A53 的 big.LITTLE 架构。对显示驱动移植而言,真正需要先吃透的不是 CPU 核,而是它内部的显示子系统:从内存取帧、图层合成、时序生成,到最终通过 MIPI DSI、eDP、HDMI 等物理接口输出。只有把这条链路在硬件层面看清楚,后续写 VOP 驱动、调 DSI 初始化序列、点亮屏幕时,才知道每一步在操作谁。
一、显示子系统整体架构
RK3399 的显示通路可以概括为“帧缓冲 → VOP → 编码器 → PHY → 面板/显示器”。DDR 中的 Framebuffer 由 DMA 搬运到 VOP,VOP 完成多图层叠加、缩放、色彩空间转换和时序生成,输出 RGB/YUV 并行信号;随后交给对应的编码器(MIPI DSI、eDP、HDMI),编码成串行差分信号,再经 PHY 驱动到外部屏幕。RK3399 有两个 VOP:VOP_BIG 和 VOP_LIT,前者能力强、支持 4K,后者偏轻量,二者可分别驱动不同显示接口,实现双屏异显。
二、VOP:显示控制器核心
VOP(Video Output Processor)是显示子系统的“大脑”。它内部包含图层管理器、窗口叠加器、缩放器、色彩空间转换模块和时序发生器。驱动移植时最常打交道的寄存器组包括:窗口配置寄存器(位置、尺寸、格式、地址)、时序寄存器(HFP/HBP/HSPW/VFP/VBP/VSPW)、时钟分频寄存器和中断寄存器(VSYNC、LINE_FLAG)。
RK3399 的 VOP 支持 AFBC 压缩帧缓冲,能显著降低 DDR 带宽。在 4K 场景下,若不做 AFBC,单图层 ARGB8888 的带宽需求就可能超过 1GB/s,因此实际产品中常开启 AFBC 或使用 NV12 格式。
HFP / HBP / HSPW:水平前肩、后肩、同步脉宽
VFP / VBP / VSPW:垂直前肩、后肩、同步脉宽
这些值必须与面板规格书严格一致,否则会出现偏移、花屏或无显示。
三、MIPI DSI 接口
MIPI DSI 是移动设备最常用的显示接口,RK3399 提供 DSI 控制器,支持 4 Lane、最高约 1.5Gbps/Lane。DSI 有两种工作模式:命令模式(Command Mode)和视频模式(Video Mode)。命令模式下面板自带 GRAM,SoC 只在内容变化时发送数据,省电;视频模式则像传统 RGB 接口一样持续刷新。
DSI 初始化通常需要发送厂商定义的初始化序列,包括上电、睡眠退出、像素格式、时序参数等。在设备树中,这些序列以 panel-init-sequence 形式描述。移植时最常见的坑是 Lane 数、时钟频率与面板不匹配,导致“有背光无图像”。
dsi: dsi@ff960000 {
compatible = "rockchip,rk3399-mipi-dsi";
reg = <0x0 0xff960000 0x0 0x10000>;
clocks = <&cru SCLK_MIPIDPHY_REF>;
phys = <&mipi_dphy>;
status = "okay";
};
panel: panel {
compatible = "simple-panel-dsi";
dsi,lanes = <4>;
dsi,format = <MIPI_DSI_FMT_RGB888>;
panel-init-sequence = [
05 78 01 11
05 32 01 29
];
};
四、eDP 与 HDMI 接口
eDP 主要用于内嵌笔记本屏或一体机屏,RK3399 的 eDP 控制器支持 4 Lane、HBR2 速率。eDP 链路训练(Link Training)是移植难点:驱动需要读取 DPCD 寄存器,协商电压摆幅和预加重,训练失败则黑屏。设备树中需正确配置 edp@ff970000 节点及对应的 PHY。
HDMI 2.0 面向电视、显示器,RK3399 支持 4K@60 输出,带 TMDS 编码和 CEC。HDMI 驱动需要处理 EDID 读取、HPD 热插拔、分辨率协商。若 EDID 读取失败,通常只能回退到默认分辨率。HDMI 的音频输出也挂在同一控制器下,移植时需一并确认 I2S 与 HDMI 的时钟关系。
| 接口 | 典型用途 | Lane/速率 | 移植关键点 |
|---|---|---|---|
| MIPI DSI | 手机屏、MIPI 小屏 | 4 Lane,约 1.5Gbps/Lane | 初始化序列、Lane 数、时钟 |
| eDP | 内嵌笔记本屏 | 4 Lane,HBR2 | 链路训练、DPCD 读取 |
| HDMI 2.0 | 电视、显示器 | TMDS,4K@60 | EDID、HPD、分辨率协商 |
五、典型场景与误区复盘
假设我们要做一块 RK3399 工控板,主屏用 MIPI DSI 1024×600,副屏用 HDMI 1080P。合理分配是:VOP_BIG 驱动 HDMI,VOP_LIT 驱动 DSI,这样两路独立时序互不干扰。若把两路都挂在 VOP_BIG 上,则只能做同源显示,无法异显。
1. 只看面板分辨率,忽略 Lane 数和像素时钟,导致带宽不足。
2. DSI 初始化序列直接照搬其他屏,未核对延时和参数。
3. eDP 链路训练失败却去查 VOP 时序,方向错误。
4. HDMI 未接 HPD 就强制输出,EDID 读不到导致分辨率异常。
复盘方法:先确认 VOP 是否有时序输出(示波器测 VSYNC/HSYNC),再确认编码器是否发出差分信号,最后确认 PHY 和面板供电。按“VOP → 编码器 → PHY → 面板”的顺序逐级排查,能快速定位问题出在哪一级。理解这条硬件链路,是后续 FrameBuffer 驱动移植和调试的基础。