0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3588 MIPI转LVDS屏幕调试全流程(附完整Patch)

jf_44130326 来源:Linux1024 2026-02-05 13:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式Linux项目中,MIPI转LVDS屏幕因兼容性强、适配灵活,常被用于盒子、工业设备等场景。但调试时难免遇到“屏幕不亮”“分辨率错乱”“驱动bind失败”等问题,尤其涉及转换IC(如TC358775XBG)时,软硬件协同排查更需精准。本文结合实际项目案例,梳理从问题定位到功能验证的标准化步骤,并附上完整调试Patch,帮你快速突破瓶颈。

wKgZO2kajESAR9NCAAX3bnwiYx0256.pngwKgZO2kajESAOGqTAAEffy1fFb4685.png

一、问题初始化:先搞懂“哪里错了”

调试的核心是“先定位,再动手”,盲目改配置只会浪费时间。

1.日志抓包锁定方向

屏幕未点亮时,优先查看DSI相关内核日志,执行:

dmesg |grepdsi # 查看DSI通道初始化报错dmesg |greppwm # 排查背光驱动问题

常见报错对应问题

•“route-dsi1: failed to get logo”:dsi1通道配置缺失或硬件链路异常

•“pwm8: probe failed”:PWM背光引脚复用或节点未启用

•“TC358775: command_interface is busy”:转换IC上电时序错误

2.必收“基础档案”

调试前需同步以下文件,避免无依据修改:

•开机日志(systemlog.txt):含驱动加载、硬件初始化过程

•设备树(rk3588-evb.dtsi/rk3588-evb7-v11.dtsi):本次调试核心修改文件

•硬件文档:原理图(确认DSI通道、PWM引脚)、屏幕手册(1920x1080@60Hz时序)

•关键调试命令输出:

# 查看显示端口状态(确认Video Port激活情况)cat/sys/kernel/debug/dri/0/summary# 查看时钟状态(验证DSI/PWM时钟是否正常)cat/sys/kernel/debug/clk/clk_summary | grep -E"dsi|pwm"

二、硬件链路确认:排除“物理层”问题

MIPI转LVDS的核心链路是“DSI信号→转换IC→LVDS屏幕”,硬件问题需优先排除。

1.核心组件信息确认(对应Patch硬件适配)

根据硬件设计,本次调试涉及:

转换IC:TC358775XBG(需控制上电时序)

DSI通道:dsi1(硬件连接dsi1,禁用dsi0避免冲突)

PWM背光:PWM8引脚(GPIO2_RK_PB1控制转换IC使能)

供电:新增vcc3v3_lcd regulator给屏幕供电

2.硬件功能验证

•用万用表测转换IC供电引脚(如VDD3.3V),确认上电正常;

•检查引脚复用:确保PWM8、dsi1引脚未被UART/GPIO占用(参考原理图);

•背光测试:短接PWM8与地,观察屏幕背光是否亮起(排除背光硬件问题)。

三、设备树(DTS)配置:核心修改看这5处(附Patch代码)

DTS是软硬件的“桥梁”,本次Patch中80%的问题通过DTS修改解决,关键变更如下:

1.禁用冲突通道,启用目标DSI

修改文件:kernel/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi

// 禁用dsi0(避免通道冲突)&dsi0 {-  tus ="okay";+  tus ="disabled"; si0_panel:panel@0{  atus ="disabled"; // 同步禁用dsi0面板 };// 启用dsi1并配置关键参数&dsi1 {  tus ="okay";-   ckchip,lane-rate = <1100>;/*1920*1080*/+  ckchip,lane-rate = <960>;   整为900Mbps(匹配屏幕时序)   able-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>; // 转换IC使能引脚  1_panel:panel@0{   tus ="okay"; // 启用dsi1面板  si,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST|MIPI_DSI_MODE_LPM)>;   format = ; // RGB888格式  i,lanes = <4>; // 4 lane传输   时序参数(匹配屏幕手册1920x1080@60Hz)    timings1: display-timings {   1_timing0: timing0 {    k-frequency = <148500000>; // 像素时钟148.5MHz   active = <1920>;    tive = <1080>;     -porch = <64>;     t-porch = <134>;    ck-porch = <8>;    nt-porch = <30>;    nc-len = <24>;     -len = <2>;     };   }; }; }; vsync hsy vfro vba hfron hback vac h cloc dsi disp_// ds dsi, d sta dsi     en // 调   ro  //ro  sta   };      st   d  sta  sta

2.启用PWM背光与屏幕供电

修改文件:kernel/arch/arm64/boot/dts/rockchip/rk3588-evb7-v11.dtsi

// 新增屏幕3.3V供电regulatorvcc3v3_lcd: vcc3v3-lcd {  patible ="regulator-fixed";   ator-name ="vcc3v3_lcd";  -supply = <&vcc_3v3_s0>; // 依赖主3.3V电源};// 启用PWM8背光引脚&pwm8 {  trl-0= <&pwm8m1_pins>; // 绑定PWM8引脚 atus ="okay"; // 解决背光不亮问题};// 配置显示路由(dsi1对应vp3)&route_dsi1 {- tatus ="disabled";+  tus ="okay";   ct = <&vp3_out_dsi1>; // 绑定Video Port3};// 禁用HDMI避免显示冲突(调试阶段)&hdmi0_in_vp0 {-   s ="okay";+ tatus ="disabled";};   s statu conne  sta   s   st  pinc  vin regul  com

3. DTS修改验证

编译后通过以下命令确认配置生效:

# 反编译dtb查看配置dtc -I dtb -O dtsarch/arm64/boot/dts/rockchip/rk3588-evb.dtb > check.dts# 检查关键节点是否存在grep -E"dsi1.*okay|pwm8.*okay|vcc3v3_lcd"check.dts

四、驱动代码修改:解决转换IC控制与时钟匹配(附Patch)

驱动层主要解决“转换IC上电时序”“时钟计算错误”“DCS指令下发验证”三大问题,核心修改如下:

1.转换IC上电时序控制

修改文件:kernel/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c

新增转换IC电源控制函数,确保上电顺序符合手册要求(先使能、再复位):

// 转换IC上电函数(enable→复位拉低→拉高→拉低)staticvoiddsi_external_bradge_power_on(struct dw_mipi_dsi2 *dsi){ intk("debug_lvds_test: %sn", __FUNCTION__); if(dsi->enable_gpio) {   gpiod_direction_output(dsi->enable_gpio,1); // 使能转换IC   usleep_range(1000,2000); // 延时1-2ms  } if(dsi->reset_gpio) {   gpiod_direction_output(dsi->reset_gpio,0); // 复位拉低   usleep_range(1000,2000);   gpiod_direction_output(dsi->reset_gpio,1); // 复位拉高   usleep_range(1000,2000);   gpiod_direction_output(dsi->reset_gpio,0); // 复位稳定   usleep_range(1000,2000);  }}// 转换IC下电函数staticvoiddsi_external_bradge_power_down(struct dw_mipi_dsi2 *dsi){rintk("debug_lvds_test: %sn", __FUNCTION__); if(dsi->reset_gpio) {   gpiod_direction_output(dsi->reset_gpio,1);   usleep_range(1000,2000);  } if(dsi->enable_gpio) {   gpiod_direction_output(dsi->enable_gpio,0);   usleep_range(1000,2000);  }}// 在编码器使能/禁用时调用电源控制staticvoiddw_mipi_dsi2_encoder_enable(struct drm_encoder *encoder){  external_bradge_power_on(dsi2); // 使能时上电  ... 原有初始化逻辑}staticvoiddw_mipi_dsi2_encoder_disable(struct drm_encoder *encoder){si_external_bradge_power_down(dsi2); // 禁用时下电  ... 原有销毁逻辑}  //   d   //  dsi_   p   pr

2.时钟计算修正(解决信号不稳定)

修改文件:kernel/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c

调整DSI逃逸时钟分频,匹配转换IC要求:

staticvoiddw_mipi_dsi2_phy_clk_mode_cfg(struct dw_mipi_dsi2 *dsi2){  ... 原有配置  20MHz分频改为10MHz,避免时钟过高导致转换IC异常 */-   lk_div =DIV_ROUND_UP(sys_clk,20*2);+  _clk_div =DIV_ROUND_UP(sys_clk,10*2); l |=PHY_LPTX_CLK_DIV(esc_clk_div);  ... 原有配置}  //   va  esc esc_c  /* 原   //

3. DCS指令下发验证

修改文件:u-boot/drivers/video/drm/rockchip_panel.c

添加打印确认DCS指令是否成功发送(排查“屏幕亮但无显示”问题):

staticvoid panel_simple_prepare(structrockchip_panel*panel){+  ntf("xsc panel_simple_prepare: 开始发送DCS指令n"); ...原有逻辑   lat->on_cmds) {  t=rockchip_panel_send_dsi_cmds(dsi, plat->on_cmds);   ret)  intf("failed to send on cmds: %dn", ret);+  +    f("succed to send on cmds: %dn", ret); // 指令成功打印   . 原有逻辑} // ..   }        print     else          pr     if (      re if (p   //  pri

五、U-Boot阶段适配(附Patch)

启动阶段需提前初始化转换IC电源,避免Linux阶段初始化滞后:

修改文件:u-boot/drivers/video/drm/dw_mipi_dsi2.c

// 新增U-Boot阶段电源控制staticvoidrockchip_dsi_external_bridge_power_on(structdw_mipi_dsi2 *dsi){   t dw_mipi_dsi2 *priv = dev_get_priv(dsi->dev); _gpio_set_value(&priv->enable_gpio,1); // 使能转换IC  lay(1000);  gpio_set_value(&priv->reset_gpio,0); // 复位拉低 elay(1000); _gpio_set_value(&priv->reset_gpio,1); // 复位拉高    udelay(1000);    dm_gpio_set_value(&priv->reset_gpio,0); // 复位稳定}// 准备阶段调用电源控制staticintdw_mipi_dsi2_connector_prepare(structrockchip_connector *conn,                    structdisplay_state *state){+    rockchip_dsi_external_bridge_power_on(dsi2); // U-Boot阶段上电   // ... 原有逻辑}   dm   ud  dm_  ude   dm struc

六、功能验证:3步确认调试结果

1.背光验证:开机后观察屏幕背光是否亮起(PWM8配置生效);

2.彩条测试:执行modetest -M rockchip -s 224@115:1920x1080,屏幕显示彩条说明信号正常;

3.日志验证:查看dmesg无DSI/PWM报错,cat /sys/kernel/debug/dri/0/summary显示“dsi1 connected”。

七、Patch核心修改总结

模块 修改内容 解决问题
DTS(dsi) 禁用dsi0、启用dsi1 +时序配置 通道冲突、分辨率错乱
DTS(电源) 新增vcc3v3_lcd、启用PWM8 屏幕供电不足、背光不亮
驱动(电源) 新增转换IC上电时序函数 转换IC初始化失败
驱动(时钟) 调整DSI逃逸时钟分频 信号不稳定、屏幕闪烁
U-Boot 启动阶段电源控制 Linux阶段初始化滞后

wKgZO2kajESASU2-AAL7UYh4nzs928.png

结语

MIPI转LVDS调试的核心是“分层排查”:先排除硬件供电/连接问题,再通过DTS匹配硬件配置,最后通过驱动解决时序/控制问题。本文附上的完整Patch覆盖了从启动到运行的全流程适配,你可根据实际硬件调整引脚、时钟、时序等参数。

若调试中遇到“彩条正常但应用无显示”“双显冲突”等问题,欢迎在评论区留言,我们一起完善调试指南~

以下是完整patch,有需要自取(获取指令后台获取)

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

    关注

    5209

    文章

    20629

    浏览量

    336810
  • Linux
    +关注

    关注

    88

    文章

    11810

    浏览量

    219513
  • 调试
    +关注

    关注

    7

    文章

    653

    浏览量

    35867
  • RK3588
    +关注

    关注

    8

    文章

    586

    浏览量

    7544
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读 瑞芯微旗舰芯RK3588系列开发板受到广大开发者伙伴的关注和问询。针对相关的开发板功能、操作指南等问题,我们一
    的头像 发表于 09-22 15:54 2.3w次阅读
    瑞芯微<b class='flag-5'>RK3588</b>开发板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解读

    RK3588-Camera:MIPI-CSI调试之通路解析

    RK3588-Camera:MIPI-CSI调试之通路解析
    的头像 发表于 06-10 10:29 7744次阅读
    <b class='flag-5'>RK3588</b>-Camera:<b class='flag-5'>MIPI</b>-CSI<b class='flag-5'>调试</b>之通路解析

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之LCD上电初始化时序

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之LCD上电初始化时序
    的头像 发表于 06-10 10:32 8379次阅读

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之屏参配置

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之屏参配置
    的头像 发表于 06-10 10:36 4824次阅读
    <b class='flag-5'>RK3588-MIPI</b><b class='flag-5'>屏幕</b><b class='flag-5'>调试</b>笔记:<b class='flag-5'>RK3588-MIPI</b>-DSI之屏参配置

    RK3588 PCB推荐叠层及阻抗设计

    分享,《RK3588 PCB设计指导白皮书》其中章节——RK3588 PCB推荐叠层及阻抗设计。(文末RK3588 PCB设计指导白皮书》下载入口)
    发表于 08-10 09:32 2022次阅读
    <b class='flag-5'>RK3588</b> PCB推荐叠层及阻抗设计

    Banana Pi BPI-W3 ArmSoM-W3之RK3588-MIPI-DSI屏幕调试笔记

    本文是基于RK3588平台,MIPI调试总结。硬件环境: ArmSoM-W3 RK3588开发板、MIPI-DSI显示屏( ArmSoM官
    的头像 发表于 11-02 09:27 2902次阅读
    Banana Pi BPI-W3 ArmSoM-W3之<b class='flag-5'>RK3588-MIPI</b>-DSI<b class='flag-5'>屏幕</b><b class='flag-5'>调试</b>笔记

    BSP调试#05:MIPI DSI(RK3588

       本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些踩过坑的问题接口,没出过问题的内容删掉了。文章框架如下: 其中, “调试过程” 章节可能有点意思(记录了
    的头像 发表于 04-17 11:54 4823次阅读
    BSP<b class='flag-5'>调试</b>#05:<b class='flag-5'>MIPI</b> DSI(<b class='flag-5'>RK3588</b>)

    RK3588的ISP流程问题

    RK3588的ISP流程我看文档里面包含有FPN(fixed pattern noise)的去条纹算法,这个怎么在调试工具里没有,而且在算法相关文档也找不到,请问广大发烧友,有了解RK
    发表于 10-21 14:18

    基于RK3588芯片方案开发ARM PC项目

    的UI交互,可提供非常清晰流畅的显示效果,可满足日常办公、高端影音和游戏需求。RK3588的点评能力十分强大,支持eDP、MIPI等主流的中小尺寸接口,也可以拓展V-by-One、LVDS
    发表于 07-27 16:05

    修改成mipilvds显示用-itop3588开发板

    打开安卓 12 源码 kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi 中的设备树文件。如下图所示默认包含的头文件
    发表于 01-29 11:48

    iTOP-RK3588开发板修改成 mipilvds 显示

    打开 Linux 源码 kernel/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi 中的设备树文件。如下图所示默认包含的头文件
    发表于 05-22 16:32

    ICN6211-6202MIPIRGB MIPILVDS

    集创北方,ICN6211-ICN6202 MIPIRGB,MIPILVDS,芯片在MTK,高通,
    的头像 发表于 06-24 15:15 5271次阅读
    ICN6211-6202<b class='flag-5'>MIPI</b><b class='flag-5'>转</b>RGB <b class='flag-5'>MIPI</b><b class='flag-5'>转</b><b class='flag-5'>LVDS</b>

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI
    的头像 发表于 06-10 10:31 8068次阅读
    <b class='flag-5'>RK3588-MIPI</b><b class='flag-5'>屏幕</b><b class='flag-5'>调试</b>笔记:<b class='flag-5'>RK3588-MIPI</b>-DSI

    rk3588rk3588s的区别

    rk3588rk3588s的区别 Rockchip是一家专业的半导体公司,成立于2001年,总部位于中国深圳,主要从事集成电路的设计、开发和销售。他们的热门产品RK3588RK3588
    的头像 发表于 08-15 16:44 2.1w次阅读

    RK3588S和RK3588S2差异说明

    RK3588S2 较 RK3588S少了一组 MIPI D/C-PHY CSI_RX PORT0,新增一组 MIPI DPHY CSI_RX PORT1,同时接口位置除 
    的头像 发表于 05-13 14:23 3188次阅读
    <b class='flag-5'>RK3588</b>S和<b class='flag-5'>RK3588</b>S2差异说明