2. RK平台显示硬件架构:RK3588/RK3568显示控制器(VOP)、DSI/DP/HDMI接口、多图层叠加原理

在RK3588与RK3568平台上,显示子系统由显示控制器(VOP)、显示接口(DSI/DP/HDMI)以及多图层硬件叠加引擎三大部分构成。理解这三者的协作关系,是后续配置Weston与调试显示性能的基础。

2.1 显示控制器(VOP)架构

VOP(Video Output Processor)是Rockchip SoC内部的显示处理核心,负责从内存中读取帧缓冲区(Framebuffer),完成图层合成、缩放、色彩转换后,将像素数据发送给下游显示接口。RK3588与RK3568的VOP在管线数量与性能上存在差异。

特性 RK3588 VOP RK3568 VOP
显示管线数量 4路独立显示管线 2路独立显示管线
最大输出分辨率 8K@60fps(单管线) 4K@60fps(单管线)
硬件图层(Win) 每管线最多8个图层 每管线最多4个图层
AFBC支持 支持(硬件解压) 支持(硬件解压)
HDR处理 HDR10/HLG HDR10
开发提示:RK3588的4路管线可以同时驱动4个不同的显示接口(如HDMI0+HDMI1+DP0+DSI),而RK3568的2路管线通常用于主屏+副屏或主屏+同显。在Weston配置中,需要根据实际使用的管线数量设置后端(DRM-backend)的outputs参数。

下图展示了RK3588 VOP的内部数据流与管线结构:

RK3588 VOP 内部架构与数据流 DDR 帧缓冲 管线 0 Win0~Win7 管线 1 Win0~Win7 管线 2 Win0~Win7 管线 3 Win0~Win7 HDMI TX 0 DP 0 DSI 0 eDP 关键说明: 1. 每条管线拥有独立的图层合成引擎,可配置不同的输出时序。 2. 管线与物理接口的映射关系由设备树(Device Tree)中的 vop 节点决定。 3. AFBC(帧缓冲压缩)在VOP内部自动解压,对上层应用透明。

2.2 显示接口:DSI / DP / HDMI

VOP合成后的像素数据通过内部总线发送给对应的显示接口控制器(PHY)。RK3588与RK3568集成了多种接口,各自适用于不同的显示场景。

2.2.1 接口类型与特性对比

接口 最大分辨率 典型应用 RK3588 数量 RK3568 数量
HDMI TX 8K@60fps (HDMI 2.1) 电视、显示器 2 1
DP 8K@30fps (DP 1.4) USB-C扩展、高刷屏 2 1
DSI 4K@60fps (DSI 2.0) MIPI屏、平板 2 1
eDP 4K@60fps 笔记本内置屏 1 0
接口配置陷阱:在RK3588上,HDMI0与DP0共用同一路VOP管线(管线0),不能同时独立输出不同的画面。HDMI1与DP1同理。DSI0与eDP也共享管线资源。在Weston中配置多个output时,必须确认对应的VOP管线没有被重复分配。

2.2.2 接口数据流

以HDMI接口为例,数据从VOP到物理连接器的完整路径如下:

  1. VOP 输出并行RGB/YCbCr像素数据及同步信号。
  2. HDMI控制器 将并行数据编码为TMDS串行信号,并插入音频/辅助数据。
  3. HDMI PHY 驱动TMDS差分信号到物理连接器。
  4. EDID 通过I2C总线读取显示器能力(分辨率、刷新率、色彩空间)。

DSI接口则使用D-PHY高速串行传输,支持命令模式与视频模式。DP接口基于微包架构,通过AUX通道进行链路训练与配置。

2.3 多图层叠加原理

RK平台的VOP内部包含多个硬件窗口(Win),每个窗口可以独立配置源地址、像素格式、透明度、位置和大小。Weston/DRM后端通过drmModeSetPlane将客户端缓冲区直接提交到硬件窗口,实现零拷贝合成。

2.3.1 硬件图层栈

下图展示了一个典型的4图层叠加场景:

VOP 多图层硬件叠加示意 Win0 - 背景层(BG) 全屏填充,通常为桌面壁纸或颜色 Win1 - 视频层(Video) NV12格式,硬件缩放,支持HDR Win2 - UI层(App) ARGB8888,支持per-pixel alpha Win3 - 光标层(Cursor) 64x64硬件光标,独立alpha 合成输出 → 显示接口

2.3.2 图层属性与约束

每个硬件窗口(Win)具有以下可配置属性:

  • 源地址:物理内存地址,必须按256字节对齐。
  • 像素格式:支持XR24/AR24(RGB)、NV12/NV16(YUV)、XU24/AU24等。
  • 全局Alpha:0~255,对整个窗口做透明度混合。
  • 预乘Alpha:启用后,像素的RGB分量已乘以Alpha值。
  • Z-order:窗口的叠加顺序,值越小越靠近底层。
  • 缩放系数:支持1/16~16倍缩放,使用VOP内置的Bicubic/Bilinear滤波器。
性能关键点:Weston的DRM后端会优先将客户端surface分配到硬件窗口。如果窗口数量不足(例如RK3568只有4个Win),多余的surface会由Pixman软件合成到单个缓冲区中,再提交给硬件。这会导致CPU负载上升和帧率下降。调试时可通过drm_info工具查看当前使用的plane数量。

2.3.3 叠加合成流程

VOP内部按以下顺序完成图层合成:

  1. 读取:从DDR读取每个Win的帧数据(支持AFBC解压)。
  2. 格式转换:YUV→RGB转换(如果源格式是YUV)。
  3. 缩放:根据配置的缩放系数进行硬件缩放。
  4. Alpha混合:按Z-order从低到高逐层混合,公式为 out = src * alpha + dst * (1 - alpha)。
  5. 输出:将最终像素数据发送到显示接口的FIFO。

整个流程在VOP内部以流水线方式执行,每个时钟周期可以处理多个像素,延迟极低(通常小于1帧)。

2.4 设备树中的显示配置

显示硬件拓扑在设备树(Device Tree)中通过vop、hdmi、dsi、dp等节点描述。以下是一个RK3588设备树中VOP与HDMI0的典型配置片段:

/* RK3588 设备树显示节点示例 */
&vop {
    status = "okay";
    assigned-clock-rates = <750000000>;  /* VOP时钟频率 */
};

&vop_mmu {
    status = "okay";
};

&hdmi0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <hdmim0_tx0_cec &hdmim0_tx0_hpd &hdmim0_tx0_scl &hdmim0_tx0_sda &hdmim0_tx1_hpd>;
    hdmi-tx-map = <0>;  /* 映射到VOP管线0 */
};

&route_hdmi0 {
    status = "okay";
    connect = <&vop_out_hdmi0>;  /* 连接VOP输出端口 */
};
调试命令:在系统启动后,使用 cat /sys/kernel/debug/dri/0/state 可以查看当前DRM对象的完整状态,包括每个plane的格式、位置和Z-order。这是验证硬件图层分配是否正确的第一手工具。

2.5 本章小结