瑞芯微RK3576显示屏驱动开发指南(上篇)|硬件架构与设备树全解析
在瑞芯微Rockchip平台上做 MIPI DSI屏幕适配,几乎是每个嵌入式工程师都绕不开的一课:原理图信号怎么看、设备树节点怎么配、驱动代码从哪下手、安卓主屏为什么黑着但内核log却正常……问题往往卡在"差一层没打通"。
为此,我们基于RK3576开发板(触觉智能Purple Pi OH2),以Android14系统为例,整理出这份从原理图到屏幕点亮的完整实战指南,把MIPI DSI显示链路上每一个关键节点都拆开讲透。
受篇幅所限,全文分上下两篇连载:
-
👉上篇内容聚焦"打地基":硬件概述、MIPI DSI基础概念、原理图分析、RK3576 显示子系统架构、设备树配置详解;
-
👉下篇内容聚焦"上手":Panel/DSI Host 驱动分析、Android14显示配置、不同面板移植方法、调试与问题排查。
建议收藏,对着板子边读边调,点亮你的第一块屏。
1.硬件概述
-
Purple Pi OH2开发板
Purple Pi OH2是基于瑞芯微RK3576 SoC设计的开发板,也是作为触觉智能RK3576核心板SOM7609的评估板,核心规格如下:
|
项目 |
规格 |
|
SoC |
Rockchip RK3576 |
|
CPU |
4×Cortex-A72 + 4×Cortex-A53 |
|
GPU |
Mali-G52 MC3 |
|
NPU |
6 TOPS |
|
RAM |
4GB/8GB/16GB LPDDR4/LPDDR5 |
|
存储 |
eMMC 5.1 + Micro SD+M.2 |
|
显示接口 |
MIPI DSI(4-lane)、HDMI2.1、DP1.4(USB-C Alt Mode) |
|
显示分辨率 |
最高4K@120fps(HDMI2.1)、MIPI DSI支持1200×1920等 |
-
RK3576的显示能力
RK3576显示控制器核心能力:
•1个主VOP(视频输出处理器)、1个轻量VOPL
•最多4路显示管道:VP0/VP1/VP2/VOPL
•兼容MIPI DSI(V1.3,支持DSI2)、HDMI2.1、eDP1.3、DP1.4、RGB/LVDS并行接口
•支持ARC音频同步
•支持双屏异显、三屏异显
-
显示接口路由
VOP管线可自由路由至各类显示接口,本开发板MIPI DSI默认绑定VP1通道:

2.MIPI DSI基础概念
-
什么是MIPI DSI?
MIPI DSI(Display Serial Interface)是MIPI联盟推出的高速串行显示接口标准,采用差分信号传输,具备高速、低功耗、抗干扰强的特性。
-
DSI物理层(D-PHY)
底层基于MIPI D-PHY,核心组成:
1.差分信号:D_P、D_N成对传输
2.专用时钟通道、1~4组可选数据通道
3.两种工作模式
•HS高速模式:传输像素数据,差分电压约200mV
•LP低功耗模式:下发控制指令,单端电压0~1.2V
-
DSI像素格式
|
格式 |
标识符 |
说明 |
|
RGB888 |
MIPI_DSI_FMT_RGB888 |
24bpp,项目默认使用 |
|
RGB666 |
MIPI_DSI_FMT_RGB666 |
18bpp松散排列 |
|
RGB666_PACKED |
MIPI_DSI_FMT_RGB666_PACKED |
18bpp紧凑排列 |
|
RGB565 |
MIPI_DSI_FMT_RGB565 |
16bpp |
本开发板默认配置:RGB888 24位色、4通道传输。
-
DSI视频模式(Video Mode)
实时流式传输像素画面,分3种子模式:
1.Non-Burst Sync Pulses:独立HSYNC/VSYNC脉冲同步
2.Non-Burst Sync Events:同步事件包,无脉冲
3.Burst Mode:消隐区间全速传输,本项目采用
-
DSI命令模式(Command Mode)
通过DCS显示指令集控制屏幕寄存器,带GRAM液晶屏常用;本板卡画面传输使用视频突发模式,屏幕初始化/熄屏流程下发DCS命令。
-
DSI命令类型速查
设备树panel-init-sequence首字节区分指令类型:
|
首字节(hex) |
类型 |
宏定义 |
|
05 |
DCS短写(无参数) |
MIPI_DSI_DCS_SHORT_WRITE |
|
15 |
DCS短写(单参数) |
MIPI_DSI_DCS_SHORT_WRITE_PARAM |
|
39 |
DCS长写 |
MIPI_DSI_DCS_LONG_WRITE |
|
03 |
通用短写(无参数) |
- |
|
13 |
通用短写(单参数) |
- |
|
29 |
通用长写 |
- |
-
标准初始化/退出序列示例
panel-init-sequence = [
05 78 01 11 # 退出睡眠,延时120ms
05 14 01 29 # 点亮屏幕,延时20ms
];
panel-exit-sequence = [
05 00 01 28 # 关闭画面输出
05 00 01 10 # 进入睡眠
];
-
字节指令格式说明
[指令类型] [延时ms] [参数长度] [命令/参数]
•Long Write格式:39 [延时] [数据长度] [指令] [载荷...]
![]()
3.原理图分析
-
原理图分页总览

-
DSI接口信号链路

-
关键硬件信号详解
屏幕复位LCD_RSTB:
•引脚:GPIO0_D3,复用多功能PAD
•电平逻辑:低电平复位,板载3.3V上拉,串联22Ω匹配电阻
•DTS配置:reset-gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>;
背光PWM控制LCD_BL_PWM:
•引脚:GPIO0_D2,复用PWM1_CH5_M0
•PWM周期25000ns,对应40kHz频率,默认亮度200/255级
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm1_6ch_5 0 25000 0>;
brightness-levels = <0 20 21 ... 255>;
default-brightness-level = <200>;
};
面板供电链路:

背光LED由3.3V经过接口VCC_LEDA/VCC_LEDK供电,部分面板自带片上LDO。
-
触摸电路(GT911)
•触控IC:汇顶GT911
•I2C总线:i2c0,7位地址0x14
•中断引脚:GPIO0_C5,低电平触发
•复位引脚:GPIO0_C4,高电平复位
![]()
4. RK3576显示子系统架构
-
软件分层总览

-
VOP管道(CRTC)
RK3576双VOP架构:
1.主VOP:支持4K、多图层、AFBC压缩
2.VOPL轻量处理器:适配小分辨率副屏
管道分配惯例:
•VP0:HDMI/DP主屏
•VP1:MIPI DSI/eDP(本开发板使用)
•VP2:RGB/LVDS副屏
•VOPL:低功耗小屏、自刷新面板
-
显示路由配置逻辑
路由节点定义VP与显示控制器绑定关系,DSI固定绑定VP1:
display_subsystem: display-subsystem {
route {
route_dsi: route-dsi {
status = "disabled";
connect = <&vp1_out_dsi>;
logo,uboot = "logo.bmp";
logo,kernel = "logo_kernel.bmp";
logo,mode = "center";
};
route_hdmi: route-hdmi {
connect = <&vp0_out_hdmi>;
};
};
};
-
完整数据流

![]()
5.设备树配置详解
-
DTS文件层级依赖

-
SoC底层DSI控制器(rk3576.dtsi)
dsi: dsi@27d80000 {
compatible = "rockchip,rk3576-mipi-dsi2";
reg = <0x0 0x27d80000 0x0 0x10000>;
interrupts = <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru PCLK_DSIHOST0>, <&cru CLK_DSIHOST0>;
clock-names = "pclk", "sys_clk";
resets = <&cru SRST_P_DSIHOST0>;
reset-names = "apb";
power-domains = <&power RK3576_PD_VO0>;
phys = <&mipidcphy0>;
phy-names = "dcphy";
rockchip,grf = <&vo0_grf>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
ports {
#address-cells = <1>;
#size-cells = <0>;
dsi_in: port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
dsi_in_vp0: endpoint@0 { reg = <0>; remote-endpoint = <&vp0_out_dsi>; status = "disabled"; };
dsi_in_vp1: endpoint@1 { reg = <1>; remote-endpoint = <&vp1_out_dsi>; status = "disabled"; };
dsi_in_vp2: endpoint@2 { reg = <2>; remote-endpoint = <&vp2_out_dsi>; status = "disabled"; };
dsi_in_vopl: endpoint@3 { reg = <3>; remote-endpoint = <&vopl_out_dsi>; status = "disabled"; };
};
};
};
核心字段说明:
•phys:绑定MIPI D-PHY物理层
•power-domains:VO0电源域,DSI工作必须上电
•dsi_in_vp1:板级文件启用,绑定VP1输出管道
-
板级MIPI面板完整DTS配置(核心)
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/display/drm_mipi_dsi.h>
#include <dt-bindings/display/rockchip_vop.h>
/{
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm1_6ch_5 0 25000 0>;
brightness-levels = <0 20 21 ... 255>;
default-brightness-level = <200>;
};
};
&pwm1_6ch_5 {
status = "okay";
};
&dsi {
status = "okay";
dsi_panel: panel@0 {
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
backlight = <&backlight>;
reset-gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>;
reset-delay-ms = <10>;
enable-delay-ms = <10>;
prepare-delay-ms = <10>;
unprepare-delay-ms = <10>;
disable-delay-ms = <60>;
init-delay-ms = <60>;
width-mm = <68>;
height-mm = <121>;
dsi,flags = <(MIPI_DSI_MODE_VIDEO |
MIPI_DSI_MODE_VIDEO_BURST |
MIPI_DSI_MODE_LPM |
MIPI_DSI_MODE_NO_EOT_PACKET)>;
dsi,format = <MIPI_DSI_FMT_RGB888>;
dsi,lanes = <4>;
panel-init-sequence = [
05 78 01 11
05 14 01 29
];
panel-exit-sequence = [
05 00 01 28
05 00 01 10
];
disp_timings0: display-timings {
native-mode = <&dsi_timing0>;
dsi_timing0: timing0 {
clock-frequency = <150000000>;
hactive = <1200>;
vactive = <1920>;
hback-porch = <120>;
hfront-porch = <10>;
vback-porch = <10>;
vfront-porch = <14>;
hsync-len = <24>;
vsync-len = <20>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel_in_dsi: endpoint {
remote-endpoint = <&dsi_out_panel>;
};
};
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <1>;
dsi_out_panel: endpoint {
remote-endpoint = <&panel_in_dsi>;
};
};
};
};
&dsi_in_vp1 {
status = "okay";
};
&route_dsi {
status = "okay";
};
-
显示时序计算
水平总像素=有效宽 + 后肩 + 前肩 + 同步长度
HTotal=1200 + 120 + 10 + 24 = 1354
垂直总行数= 有效高 + 后肩 + 前肩 + 同步长度
VTotal=1920 + 10 + 14 + 20 = 1964
刷新率=像素时钟 / (HTotal × VTotal) ≈ 56.4Hz
-
编译时显示接口切换机制
通过宏#define HDMI 0/1切换HDMI/MIPI DSI显示:
1.MIPI版本dts:#define HDMI 0,关闭HDMI、启用DSI、VP1路由
2.HDMI版本dts:#define HDMI 1,关闭DSI、启用HDMI、VP0路由
构建系统通过BoardConfig.mk指定编译对应的DTS文件。
更多推荐
所有评论(0)