RK356x Android15 适配京东方DV290FBM-N10 (LVDS屏):半屏显示完整解决方案

电子说

1.4w人已加入

描述

在工业控制、数字标牌、零售货架等场景中,32:9 超宽条形屏凭借其独特的显示比例和单屏无拼接优势,正在逐步替代传统的多屏组合方案。京东方 DV290FBM-N10 作为一款成熟的 29 英寸商用条形屏,被广泛应用于各类嵌入式设备中。

但在瑞芯微 RK356x 平台(RK3566/RK3568)Android15 系统上适配这款屏幕时,半屏显示问题是绝大多数开发者都会遇到的核心痛点。本文将结合官方规格书和实际项目 patch,从内核驱动、硬件合成器、系统框架到 Recovery、U-Boot 全链路,拆解半屏显示的完整适配方案。

RK3568

一、先搞懂:为什么必须做半屏设置?

在开始适配前,我们先明确两个关键参数,这是所有问题的根源:

•屏幕物理分辨率:1920 (H)×540 (V)(32:9 比例,垂直方向仅 540 行像素)

•MIPI 转 LVDS 桥接芯片输出:标准 1920×1080@60Hz 信号

目前主流的 MIPI 转 LVDS 方案(如 TC358775、GM8775C)均默认输出 1080P 信号,无法直接输出 540P 的非标准分辨率。如果直接将 1080P 信号输入到 540P 的屏幕上,会出现两种典型问题:

1.画面被垂直压缩,所有内容都被压扁成原来的一半高度

2.仅显示上半部分画面,下半部分完全黑屏

因此,我们的核心思路是:在系统全链路将输出高度从 1080 裁剪为 540,让桥接芯片输出的 1080P 信号中,只有前 540 行包含有效数据,屏幕正好完整显示这部分内容。

二、内核层适配:半屏显示的基础

内核层是整个适配的基石,需要同时完成显示时序配置、桥接芯片控制和DRM 平面裁剪三个核心任务。

2.1 设备树(DTS)核心修改

以 RK3568 EVB 板为例,修改

kernel-6.1/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi:

(1)DSI 时序配置(关键!)

严格按照 DV290FBM-N10 规格书的时序参数配置,注意这里我们配置的是桥接芯片的输入时序(1920×1080@60Hz):

&dsi0 {    status = "okay";    enable-gpios = <&gpio4 RK_PC1 GPIO_ACTIVE_HIGH>;  // 桥接芯片使能    reset-gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>;   // 桥接芯片复位    pinctrl-names = "default";    pinctrl-0 = <&lvds_lcd_en &lvds_lcd_rst>;    rockchip,lane-rate = <891>;  // MIPI链路速率,对应148.5MHz像素时钟    dsi0_panel: panel@0 {        status = "okay";        compatible = "simple-panel-dsi";        reg = <0>;        backlight = <&backlight>;        reset-delay-ms = <60>;        enable-delay-ms = <60>;        prepare-delay-ms = <60>;        unprepare-delay-ms = <60>;        disable-delay-ms = <60>;         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>;        disp_timings0: display-timings {            native-mode = <&dsi0_timing0>;            dsi0_timing0: timing0 {                clock-frequency = <148500000>;  // 148.5MHz,对应60Hz刷新率                hactive = <1920>;                vactive = <1080>;  // 桥接芯片输入1080P                hback-porch = <96>;                hfront-porch = <120>;                vback-porch = <8>;                vfront-porch = <33>;                hsync-len = <64>;                vsync-len = <4>;                hsync-active = <0>;                vsync-active = <0>;                de-active = <0>;                pixelclk-active = <0>;            };        };    };};

(2)背光控制修改

将背光 PWM 从默认的 PWM4 改为 PWM5,并添加背光使能 GPIO:

backlight: backlight {    compatible = "pwm-backlight";    pwms = <&pwm5 0 25000 0>;    brightness-levels = <0 20 20 ... 255>;  // 保持原有亮度等级    default-brightness-level = <200>;    enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;    pinctrl-names = "default";    pinctrl-0 = <&lvds_bl_en>;    status = "okay";};

(3)路由与外设禁用

•将 DSI0 的输入路由从 VP1 改为 VP0:connect = <&vp0_out_dsi0>

•禁用不需要的外设:CSI、GMAC1、I2C2 等,避免资源冲突

2.2 驱动层核心修改

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

全部0条评论

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

×
20
完善资料,
赚取积分