1.RK3588显示子系统概述
显示子系统是指Rockchip平台显示输出相关软硬件系统的统称,它包括VOP(Video Output Processor,相当于其它SoC的LCDC,也就是LCD控制器)和Display Interface(RGB、LVDS、MIPI DSI、EDP、HDMI等显示接口)以及与之对应的软件驱动。
目前Rockhip平台上存在两种VOP架构----VOP 1.0和VOP 2.0,RK3588平台上使用的是VOP 2.0架构。
1.1 显示系统硬件框架
对于VOP 2.0显示架构来说,整个显示系统的硬件框图如下所示:
从框图可知,在整个显示通路的最后端,是由RGA、GPU、VPU组成的显示图形加速模块构成,它们是专门针对图像处理优化设计的硬件IP,能够高效的进行图像的生成和进一步处理(譬如GPU通过OpenGL提供图像渲染功能,RGA可以对图像数据进行缩放、旋转、合成等2D处理,VPU可以高效的进行视频解码),从而减轻CPU负担。
经过这些图像加速模块处理后的数据会存放在DDR中,然后由VOP读取,根据应用需求进行Alpha叠加、颜色空间转换、gamma矫正、HDR转换等处理后,再发送到对应的显示接口模块(HDMI/MIPI/RGB/LVDS/EDP),这些接口模块会把接收到的数据转换成符合各自协议的数据流,发送到显示器或LCD显示屏,最终呈现在用户眼前。
目前Rockchip平台上存在两种VOP架构----VOP 1.0和VOP 2.0(RK3588平台上使用的是VOP 2.0架构)。它们的主要区别是对多显的支持方式不同,VOP 2.0采用了统一显示架构,即整个SoC上只存在一个VOP,但是在VOP的后端设计了多路独立的Video Port(以下简称VP)输出端口,这些VP能够同时独立工作,并且输出相互独立的显示时序。譬如RK3588平台有四路VP,就能实现四屏异显。
1.2 显示特性
Rockchip各平台VOP基础特性如下图所示:
RK3588各显示接口最大输出分辨率和协议标准,如下图所示:
RK3588平台支持多种显示接口,包括1路RGB接口、2路MIPI DSI接口(dsi0、dsi1)、2路eDP接口(edp0、edp1)、2路HDMI接口(hdmi0、hdmi1)以及2路DP接口(dp0、dp1)。需要注意的是,eDP和HDMI的PHY是combo的,HDMI和eDP功能只能二选一,即在同一个产品上,使用了hdmi0就不能使用edp0,使用了hdmi1就不能使用edp1。
RK3588 VP与各显示接口的连接关系,如下图所示:
需要注意的是,RK3588平台的HDMI和DP支持8K输出,但是在8K输出模式下,一个显示接口需要同时占用VP0和VP1。所以如果产品上需要支持8K显示输出,VP1上要注意不要连接其它显示接口。
每一条显示通路(VP-->显示接口)输出的最大分辨率受对应的VP和显示接口的最大分辨率限制。
2.正点原子RK3588开发板显示接口介绍
2.1 开发板上的显示接口
正点原子ATK-DLRK3588开发板上提供了多种显示接口给到用户,包括2个MIPI DSI接口、2个HDMI显示接口、2个全功能type-c接口(支持DP输出),最高可支持4屏异显、6屏同显,让用户有更多的选择。
开发板上各显示接口示意图如下所示:
- 两路HDMI显示接口(HDMI TX0、HDMI TX1):用于连接HDMI显示屏。最大可支持7680x4320@60Hz输出;
- 两路MIPI DSI接口(MIPI DSI0、MIPI DSI1):用于连接MIPI显示屏。支持正点原子他们家的5.5寸1080x1920 MIPI屏、5.5寸720x1280 MIPI屏以及10.1寸800x1280 MIPI屏;
- 两路全功能type-c接口(TYPE-C0、TYPE-C1):两个全功能type-c接口均支持USB 3.1和DP输出,可连接DP显示屏(使用type-c转DP线连接)。最大可支持7680x4320@30Hz输出;
2.2 设备树配置
Rockchip平台的内核设备树文件都存放在<Kernel_PATH>/arch/arm64/boot/dts/rockchip/目录下。对于ATK-DLRK3588开发板,其对应的内核设备树文件为:
Linux系统: arch/arm64/boot/dts/rockchip/rk3588-atk-devkit.dts
Android系统: arch/arm64/boot/dts/rockchip/rk3588-atk-evb7-lp4-v10.dts
内核源码目录:
Linux SDK: <SDK_PATH>/kernel/
Android SDK: <SDK_PATH>/kernel-5.10/
注:SDK_PATH指的是SDK根目录。
这两个设备树文件的结构如下所示:
rk3588-atk-devkit.dts
rk3588-atk-devkit.dtsi
rk3588.dtsi
rk3588-evb.dtsi
rk3588-rk806-single.dtsi
rk3588-atk-cameras.dtsi
rk3588-atk-screen_choose.dtsi
rk3588-atk-lcds.dtsi
rk3588-linux.dtsi
rk3588-atk-evb7-lp4-v10.dts
rk3588-atk-evb7-lp4.dtsi
rk3588.dtsi
rk3588-evb.dtsi
rk3588-rk806-single.dtsi
rk3588-atk-cameras.dtsi
rk3588-atk-screen_choose.dtsi
rk3588-atk-lcds.dtsi
rk3588-android.dtsi
对于屏幕显示,我们重点关注rk3588-atk-lcds.dtsi和rk3588-atk-screen_choose.dtsi这两个设备树文件。rk3588-atk-lcds.dtsi包含了ATK-DLRK3588开发板上的显示接口相关的配置信息;而rk3588-atk-screen_choose.dtsi文件中定义了一些宏,用于选择我们需要使能开发板上的哪些显示接口,其内容如下所示:
前面讲过,RK3588平台有4路独立的VP,可实现4路独立的显示输出;默认的显示通路配置情况如下:
根据不同的显示模式,可能需要对显示通路进行调整。
我们可以在rk3588-atk-screen_choose.dtsi文件中打开或注释掉对应的ATK_LCD_TYPE_xxx宏、来使能或禁用对应的显示接口。