电子说
在工业控制、数字标牌、零售货架等场景中,32:9 超宽条形屏凭借其独特的显示比例和单屏无拼接优势,正在逐步替代传统的多屏组合方案。京东方 DV290FBM-N10 作为一款成熟的 29 英寸商用条形屏,被广泛应用于各类嵌入式设备中。
但在瑞芯微 RK356x 平台(RK3566/RK3568)Android15 系统上适配这款屏幕时,半屏显示问题是绝大多数开发者都会遇到的核心痛点。本文将结合官方规格书和实际项目 patch,从内核驱动、硬件合成器、系统框架到 Recovery、U-Boot 全链路,拆解半屏显示的完整适配方案。

一、先搞懂:为什么必须做半屏设置?
在开始适配前,我们先明确两个关键参数,这是所有问题的根源:
•屏幕物理分辨率: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 =
(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 驱动层核心修改
全部0条评论
快来发表一下你的评论吧 !