RK平台显示屏驱动开发指南(Android 14 / RK3576)

电子说

1.4w人已加入

描述

基于触觉智能Purple Pi OH2 RK3576平台的MIPI DSI显示屏驱动开发完整指南,从原理图分析到Android 14系统配置

目录

1.硬件概述

2.MIPI DSI基础概念

3.原理图分析

4.RK3576显示子系统架构

5.设备树配置详解

6.Panel驱动分析

7.DSI Host控制器驱动

8.Android 14显示配置

9.不同面板的移植方法

10.调试与问题排查

11.附录

1. 硬件概述

1.1 Purple Pi OH2开发板

Purple Pi OH2是基于Rockchip RK3576 SoC的单板计算机(SBC),核心规格如下:

项目 规格
SoC Rockchip RK3576
CPU 4×Cortex-A72 + 4×Cortex-A53
GPU Mali-G52 MC3
NPU 6 TOPS
RAM 8GB/16GB LPDDR4/LPDDR5
存储 eMMC 5.1 + UFS + microSD
显示接口 MIPI DSI(4-lane)、HDMI 2.0、eDP、DP(USB-C Alt Mode)
显示分辨率 最高4K@60fps(HDMI)、MIPI DSI支持1200×1920等

1.2 RK3576 SoC显示能力

RK3576显示控制器核心能力:

•1个主VOP(视频输出处理器)、1个轻量VOPL

•最多4路显示管道:VP0/VP1/VP2/VOPL

•兼容MIPI DSI(V1.3,支持DSI2)、HDMI2.0、eDP1.3、DP1.4、RGB/LVDS并行接口

•支持ARC音频同步

1.3 显示接口路由

VOP管线可自由路由至各类显示接口,本开发板MIPI DSI默认绑定VP1通道:

显示屏

2. MIPI DSI基础概念

2.1 什么是MIPI DSI

MIPI DSI(Display Serial Interface)是MIPI联盟推出的高速串行显示接口标准,采用差分信号传输,具备高速、低功耗、抗干扰强的特性。

2.2 DSI物理层(D-PHY)

底层基于MIPI D-PHY,核心组成:

1.差分信号:D_P、D_N成对传输

2.专用时钟通道、1~4组可选数据通道

3.两种工作模式

•HS高速模式:传输像素数据,差分电压约200mV

•LP低功耗模式:下发控制指令,单端电压0~1.2V

2.3 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通道传输。

2.4 DSI视频模式(Video Mode)

实时流式传输像素画面,分3种子模式:

1.Non-Burst Sync Pulses:独立HSYNC/VSYNC脉冲同步

2.Non-Burst Sync Events:同步事件包,无脉冲

3.Burst Mode:消隐区间全速传输,本项目采用

2.5 DSI命令模式(Command Mode)

通过DCS显示指令集控制屏幕寄存器,带GRAM液晶屏常用;本板卡画面传输使用视频突发模式,屏幕初始化/熄屏流程下发DCS命令。

2.6 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    # 进入睡眠];

 

4字节指令格式说明

[指令类型] [延时ms] [参数长度] [命令/参数]

•Long Write格式:39 [延时] [数据长度] [指令] [载荷...]

3. 原理图分析

3.1 原理图分页总览

显示屏3.2 DSI接口信号链路

显示屏

3.3 关键硬件信号详解

3.3.1 屏幕复位LCD_RSTB

•引脚:GPIO0_D3,复用多功能PAD

•电平逻辑:低电平复位,板载3.3V上拉,串联22Ω匹配电阻

•DTS配置:reset-gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>;

3.3.2 背光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>;};

 

3.3.3 面板供电链路

显示屏

背光LED由3.3V经过接口VCC_LEDA/VCC_LEDK供电,部分面板自带片上LDO。

3.4 触摸电路(GT911)

•触控IC:汇顶GT911

•I2C总线:i2c0,7位地址0x14

•中断引脚:GPIO0_C5,低电平触发

•复位引脚:GPIO0_C4,高电平复位

4. RK3576显示子系统架构

4.1 软件分层总览

显示屏

4.2 VOP管道(CRTC)

RK3576双VOP架构:

1.主VOP:支持4K、多图层、AFBC压缩

2.VOPL轻量处理器:适配小分辨率副屏
管道分配惯例:

•VP0:HDMI/DP主屏

•VP1:MIPI DSI/eDP(本开发板使用)

•VP2:RGB/LVDS副屏

•VOPL:低功耗小屏、自刷新面板

4.3 显示路由配置逻辑

路由节点定义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>;        };    };};

 

4.4 完整数据流

显示屏

5. 设备树配置详解

5.1 DTS文件层级依赖

显示屏

5.2 SoC底层DSI控制器(rk3576.dtsi)

 

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输出管道

5.3 板级MIPI面板完整DTS配置(核心)

 

#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";};

 

5.4 显示时序计算

水平总像素 = 有效宽 + 后肩 + 前肩 + 同步长度
HTotal = 1200 + 120 + 10 + 24 = 1354
垂直总行数 = 有效高 + 后肩 + 前肩 + 同步长度
VTotal = 1920 + 10 + 14 + 20 = 1964
刷新率 = 像素时钟 / (HTotal × VTotal) ≈ 56.4Hz

5.5 编译时显示接口切换机制

通过宏#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文件。

6. Panel驱动分析

6.1 通用驱动simple-panel-dsi(panel-simple.c)

本开发板默认使用通用DSI面板驱动,无需新增内核驱动文件,全部参数从设备树读取。

1.驱动匹配compatible字符串:simple-panel-dsi

2.加载流程:probe → 解析DTS时序、复位、背光、初始化序列 → 绑定DSI主机

3.上电时序流程:

显示屏

6.2 专用面板驱动适用场景

当面板存在以下需求时,需独立编写panel-xxx.c驱动:

1.大量厂商私有初始化指令、Gamma电压、VCOM调节

2.特殊上电/掉电时序、TE信号控制

3.动态调节屏幕参数、硬件特殊功能
示例:ST7703屏幕驱动,内置解锁厂商寄存器、MIPI通道配置、Gamma曲线自定义代码。

7. DSI Host控制器驱动

7.1 dw-mipi-dsi2-rockchip.c 驱动核心

RK3576搭载DSI2 IP核,驱动匹配字符串rockchip,rk3576-mipi-dsi2,核心工作流程:

1.Probe获取时钟、复位、PHY、电源域资源

2.初始化DRM Encoder、Connector、注册MIPI DSI主机

3.原子校验模式:计算lane速率、校验时序合法性

4.使能流程:软复位IP → 配置PHY通道 → 设置视频Burst模式 → 初始化D-PHY → 下发时序参数 → 调用panel驱动prepare/enable

7.2 MIPI D-PHY物理层

RK3576 CSI摄像头与DSI共用一组D-PHY,DTS必须同步启用mipidcphy0,DSI节点通过phys字段绑定PHY。

7.3 Lane速率计算公式

DSI单通道速率 = 像素时钟 × 每像素位数 ÷ (2 × 通道数)
本项目:150MHz × 24 ÷ (2 × 4) = 450Mbps/lane
RK3576 D-PHY单通道最高支持2.5Gbps,带宽余量充足。

8. Android 14显示配置

8.1 产品编译变体

产品变体 DTS文件 主屏 扩展屏
rk3576(默认) ido-evb7609-v1a-hdmi HDMI
rk3576_u ido-evb7609-v1a-mipi DSI HDMI-A、eDP

rk3576_u核心配置:
BoardConfig.mk:指定MIPI内核DTS

 

PRODUCT_KERNEL_DTS := ido-evb7609-v1a-mipi

 

产品属性配置:指定DSI为主显示设备

 

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSIPRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A,eDP

 

8.2 Rockchip HWC硬件合成器

drmhwc2读取系统属性区分主屏/副屏,DRM连接器类型匹配规则:

•DSI:DRM_MODE_CONNECTOR_DSI

•HDMI:DRM_MODE_CONNECTOR_HDMIA

8.3 Android显示分层架构

应用层→ SurfaceFlinger → HWC HAL → DRM内核驱动 → DSI主机 → D-PHY → LCD屏幕
图形缓冲区通过DMA-BUF实现跨进程共享。

9. 不同面板移植方法

9.1 移植前必备面板参数

分辨率、像素时钟、DSI通道数、RGB格式、视频模式、全套时序、物理尺寸、DCS初始化序列、复位/背光参数、供电电压。

9.2 完整移植流程

1.硬件核对:DSI通道、复位/背光GPIO、触摸I2C

2.获取厂商初始化DCS指令与时序参数

3.方案选择:标准屏用simple-panel-dsi;复杂屏写专用驱动

4.修改DTS,替换时序、指令、GPIO、背光配置

5.配置内核开机logo、Android开机动画、HWC主屏属性

6.内核日志、modetest调试验证显示、背光、触摸

9.3 方案A:simple-panel-dsi快速移植(推荐)

仅修改DTS,无需修改内核代码,适合标准DCS屏幕,替换时序、初始化序列、GPIO即可。

9.4 方案B:自定义panel驱动移植

新建panel-xxx.c驱动文件,实现prepare/enable/disable/unprepare回调,自定义上电时序、厂商私有指令,同步修改Kconfig开启驱动编译。

9.5 移植关键注意事项

1.速率异常:添加rockchip,lane-rate = ;强制通道速率

2.屏幕不支持非连续时钟:移除MIPI_DSI_CLOCK_NON_CONTINUOUS

3.初始化延时严格遵循规格书,过短会黑屏/花屏

4.区分屏幕VCC 3.3V与IOVCC 1.8V两路电源

5.老款屏幕不兼容Burst模式,切换为Sync Pulse模式

10. 调试与问题排查

10.1 内核日志查询命令

 

# DSI/MIPI/面板日志dmesg | grep -i dsidmesg | grep -i mipidmesg | grep -i panel# DRM/PHY初始化日志dmesg | grep -i drmdmesg | grep -i dcphy

 

正常启动日志关键词:DSI host probed、panel ready、DSI connected to VP1

10.2 modetest显示调试工具

 

# 查看DRM设备ls /dev/dri/# 查看连接器与分辨率modetest -c# 输出测试画面到DSI屏幕modetest -M rockchip -D 0 -s 409:1200x1920 -v

 

10.3 高频故障排查方案

故障1:屏幕完全无反应

排查链路:DTS编译校验 → 测量面板供电电压 → 示波器抓取复位波形 → 背光PWM输出检测 → MIPI差分信号阻抗与波形检测。

故障2:画面闪烁、错位、花屏

1.核对面板规格书时序参数(HBP/HFP/VBP/VFP、同步极性)

2.调整lane速率,强制指定rockchip,lane-rate

3.切换Burst/Sync Pulse视频模式

4.增加/移除EOT包标志位MIPI_DSI_MODE_NO_EOT_PACKET

故障3:触摸屏无响应

1.i2cdetect扫描I2C总线,确认GT911设备挂载

2.查看中断注册日志,确认中断引脚电平匹配原理图

3.检查触摸复位时序,必须在屏幕初始化完成后释放触摸复位

故障4:Android系统黑屏,内核logo正常

1.dmesg确认DRM驱动完整初始化

2.getprop核对vendor.hwc.device.primary=DSI

3.dumpsys SurfaceFlinger查看图层合成状态

4.modetest手动输出画面,区分内核/安卓上层问题

10.4 内核defconfig必备配置

 

# DRM基础CONFIG_DRM=yCONFIG_DRM_ROCKCHIP=y# VOP显示处理器CONFIG_ROCKCHIP_VOP2=y# DSI主机驱动CONFIG_ROCKCHIP_DW_MIPI_DSI=y# MIPI D-PHYCONFIG_PHY_ROCKCHIP_SAMSUNG_DCPHY=y# 通用面板驱动CONFIG_DRM_PANEL_SIMPLE=y# PWM背光CONFIG_PWM_ROCKCHIP=yCONFIG_BACKLIGHT_PWM=yCONFIG_BACKLIGHT_CLASS_DEVICE=y

 

11. 附录

11.1 关键文件路径索引

文件类型 完整路径
MIPI DTS入口 kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7609-v1a-mipi.dts
面板配置DTSI kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7609-v1a-mipi.dtsi
RK3576底层DTSI kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576.dtsi
DSI2控制器驱动 kernel-6.1/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
通用面板驱动 kernel-6.1/drivers/gpu/drm/panel/panel-simple.c
VOP2驱动 kernel-6.1/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
Android BoardConfig device/rockchip/rk3576/BoardConfig.mk
MIPI绑定头文件 kernel-6.1/include/dt-bindings/display/drm_mipi_dsi.h

11.2 通用DCS指令对照表

指令码 功能
0x11 Sleep Out 退出睡眠
0x10 Sleep In 进入睡眠
0x28 Display Off 关闭画面输出
0x29 Display On 点亮屏幕
0x36 Set Address Mode 横竖屏翻转
0x3A Set Pixel Format 设置像素格式

11.3 DSI Flags宏定义速查表

 

#define MIPI_DSI_MODE_VIDEO              (1 << 0)   // 视频模式#define MIPI_DSI_MODE_VIDEO_BURST        (1 << 1)   // 突发传输#define MIPI_DSI_MODE_VIDEO_SYNC_PULSE   (1 << 2)   // 同步脉冲模式#define MIPI_DSI_MODE_NO_EOT_PACKET      (1 << 9)   // 关闭EOT结束包#define MIPI_DSI_CLOCK_NON_CONTINUOUS    (1 << 10)  // 非连续时钟#define MIPI_DSI_MODE_LPM                (1 << 11)  // 低功耗下发指令// 像素格式#define MIPI_DSI_FMT_RGB888   0#define MIPI_DSI_FMT_RGB666   1#define MIPI_DSI_FMT_RGB666_PACKED  2#define MIPI_DSI_FMT_RGB565   3

 

11.4 Rockchip官方配套开发文档

全部存放于源码RKDocs/common/display/目录:

1.Rockchip_Developer_Guide_MIPI_DSI2_CN.pdf(DSI2开发必读)

2.Rockchip_Developer_Guide_DRM_Panel_Porting_CN.pdf(面板移植指南)

3.Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf(DRM总架构)

4.Rockchip_RK3588_Developer_Guide_MIPI_DSI2_CN.pdf(架构与RK3576通用)

5.Rockchip_Trouble_Shooting_Graphics/ 图形系统故障排查手册

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分