
清空记录
历史记录
取消
清空记录
历史记录

在瑞芯微Rockchip平台上做 MIPI DSI屏幕适配,几乎是每个嵌入式工程师都绕不开的一课:原理图信号怎么看、设备树节点怎么配、驱动代码从哪下手、安卓主屏为什么黑着但内核log却正常……问题往往卡在"差一层没打通"。
为此,我们触觉智能基于RK3576开发板(Purple Pi OH2),以Android14系统为例,整理出这份从原理图到屏幕点亮的完整实战指南,把MIPI DSI显示链路上每一个关键节点都拆开讲透。受篇幅所限,全文分上下两篇连载:
建议收藏,对着板子边读边调,点亮你的第一块屏。
1.硬件概述
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显示控制器核心能力:
•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(Display Serial Interface)是MIPI联盟推出的高速串行显示接口标准,采用差分信号传输,具备高速、低功耗、抗干扰强的特性。
底层基于MIPI D-PHY,核心组成:
1.差分信号:D_P、D_N成对传输
2.专用时钟通道、1~4组可选数据通道
3.两种工作模式
•HS高速模式:传输像素数据,差分电压约200mV
•LP低功耗模式:下发控制指令,单端电压0~1.2V
格式 | 标识符 | 说明 |
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通道传输。
实时流式传输像素画面,分3种子模式:
1.Non-Burst Sync Pulses:独立HSYNC/VSYNC脉冲同步
2.Non-Burst Sync Events:同步事件包,无脉冲
3.Burst Mode:消隐区间全速传输,本项目采用
通过DCS显示指令集控制屏幕寄存器,带GRAM液晶屏常用;本板卡画面传输使用视频突发模式,屏幕初始化/熄屏流程下发DCS命令。
设备树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.原理图分析
屏幕复位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。
•触控IC:汇顶GT911
•I2C总线:i2c0,7位地址0x14
•中断引脚:GPIO0_C5,低电平触发
•复位引脚:GPIO0_C4,高电平复位
4. RK3576显示子系统架构
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.设备树配置详解
dsi: dsi@27d80000 { compatible = "rockchip,rk3576-mipi-dsi2"; reg = <0x0 0x27d80000 0x0 0x10000>; interrupts = ; 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输出管道
#include#include #include #include #include /{ 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 = ; 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文件。
产品简介
