跳到主要内容

EV101WXM LVDS 屏幕模组

本文介绍 Neardi 设备 10.1寸 LVDS 屏幕的使用

1. 模组介绍

LVDS(Low Voltage Differential Signaling)是一种用于传输视频数据的接口,广泛用于笔记本电脑和平板显示器中。在 Neardi 设备上面,是由mipi转LVDS接口,具体参数如下:

参数
型号EV101WXM
屏幕10.1寸 IPS 屏幕
分辨率800x1280像素(10:16)
触摸屏电容式多点触摸屏
显示MIPI转LVDS接口

EV101WXM-N10屏资料:BOE原装 宽温工业屏EV101WXM-N10.pdf

需要购买配件的话,可以从这里下单:点击购买

2. 硬件连接

注意

  • 接口接反会烧毁屏幕,必须按下文"接线图"所示接入设备。
  • 不可带电拔插屏幕,避免带电操作导致短路。

2.1 RK3588系列

LKD3588

LBA3588

LPA3588

LPB3588

2.2 RK3568系列

LKD3568

2.3 RK3562系列

LKD3562

3. 驱动检查

部分固件默认未添加MIPI DSI的设备树,如有需要可申请SDK自行添加设备树,或者联系业务进行处理。

3.1 RK3588系列

Neardi-3588的SDK有MIPI DSI的dtsi文件,此dtsi文件为 MIPI_EV101WXM-N10 10.1寸屏配置:

SDK/kernel/arch/arm64/boot/dts/rockchip/rk3588-neardi-linux-ld160-mipi2lvds-EV101WXM-N10.dtsi

根据具体设备型号修改对应dts,打开或者关闭屏幕配置:

# LKD3588
rk3588-neardi-linux-lkd3588-f0.dts

# LPA3588
rk3588-neardi-linux-lpa3588-f0.dts

# LPB3588
rk3588-neardi-linux-lpb3588-f0.dts

# LBA3588
rk3588s-neardi-linux-lb170.dts
rk3588s-neardi-linux-lb170-mipi2lvds-EV101WXM-N10.dtsi

3.2 RK3568系列

Neardi-3568 的 SDK 有 MIPI DSI 的 dtsi 文件,此dtsi文件为 MIPI_EV101WXM-N10 10.1寸屏配置:

SDK/kernel/arch/arm64/boot/dts/rockchip/rk3568-neardi-linux-ld120-mipi2lvds-EV101WXM-N10.dtsi

根据具体设备型号修改对应dts,打开或者关闭屏幕配置:

# LKD3568
./rk3568-neardi-ld121-monitor-board-linux.dts

3.3 RK3562系列

Neardi-3562的SDK有 LVDS 的 dtsi 文件,此 dtsi 文件为 MIPI_EV101WXM-N10 10.1寸屏配置:

SDK/kernel/arch/arm64/boot/dts/rockchip/neardi-lkd3562-lvds.dtsi

根据具体设备型号修改对应dts,打开或者关闭屏幕配置:

# LKD3562
neardi-lkd3562-ddr4-linux.dts

4. 快速开始

4.1 配置显示器的分辨率、方向、刷新率

列出目前环境支持的解析度和频率

neardi@LPA3588:~$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1920x1080 60.00*+ 60.00 50.00 30.00 24.00
4096x2160 24.00
3840x2160 30.00 25.00 24.00
1920x1080i 60.00 50.00
1280x720 60.00 60.00 50.00 50.00 30.00 24.00
720x576 50.00 50.00
720x576i 50.00 50.00
720x480 59.94 59.94 59.94
720x480i 59.94 59.94
HDMI-2 disconnected (normal left inverted right x axis y axis)
DSI-1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1280x800 100.70*+
DSI-2 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1920x1080 51.92*+
DP-1 disconnected (normal left inverted right x axis y axis)

1920x1080是当前主显示器的分辨率,此时刷新率是60.00

DSI-1是EV101WXM,可通过以下命令将LVDS设置为主显示器:

$ xrandr --output LVDS --primary

旋转屏幕

  • 顺时针旋转90度

    $ xrandr --output <display_name> --rotate right
  • 逆时针旋转90度

    $ xrandr --output <display_name> --rotate left
  • 旋转180度

    $ xrandr --output <display_name> --rotate inverted
  • 恢复到正常

    $ xrandr --output <display_name> --rotate normal

更多内容可查看开源论坛:Ubuntu系统如何动态管理显示器的分辨率、方向、刷新率.

4.2. LCD背光调节

进入到如下目录:

neardi@LPA3588:~$ cd /sys/devices/platform/backlight/backlight/backlight
neardi@LPA3588:/sys/devices/platform/backlight/backlight/backlight$ ls
actual_brightness bl_power brightness device max_brightness power scale subsystem type uevent

brightness 表示当前亮度等级,max_bgigntness表示最大亮度等级,默认背光亮度为200,通过echo 220 > brightness修改背光亮度。

5. RK3588 VOP 简介

瑞芯微的中高端芯片都有一个叫做 VOP 的外设,VOP 是一个链接 frame buffer 和显示设 备的接口,比如 RK3588 支持 MIPI、DP、eDP、HDMI 等显示接口,这里就需要 VOP 来管理 这些显示接口。RK3588 系列的 VOP 接口支持如下表所示:

接口分辨率和帧率描述
RGB1920x1080@60Hz支持 BT.656/BT.1120
MIPI3840x2160@60Hz双 MIPI,支持 DSI v1.1,DCS v1.1,DPHY v2.0,CPHY v1.1 协议标准
eDP3840x2160@60Hz双 eDP,支持 DP 1.2a 和 eDP 1.3 协议标准
HDMI7680x4320@60Hz双 HDMI,支持 HDMI 2.1 协议标准
DP7680x4320@30Hz双 DP,支持 DP 1.4 协议标准

RK3588 的 VIOP2 有 4 个端口,vp0~vp3,每个端口支持的显示接口如下图所示:

可以看到,vp0~vp3支持不同的显示接口,RK3588开发板分配如下表所示:

视频接口显示接口
vp0HDMI1
vp1HDMI2
vp2HDMI3/DP
vp3EV101WXM

6. 设备树分析

6.1 设备树配置

RK3588 DTS 配置如下:

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
*
*/

/ {
backlight: backlight {
status="okay";
compatible = "pwm-backlight";
pwms = <&pwm7 0 25000 0>;
brightness-levels = <
0 20 20 21 21 22 22 23
23 24 24 25 25 26 26 27
27 28 28 29 29 30 30 31
31 32 32 33 33 34 34 35
35 36 36 37 37 38 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103
104 105 106 107 108 109 110 111
112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127
128 129 130 131 132 133 134 135
136 137 138 139 140 141 142 143
144 145 146 147 148 149 150 151
152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167
168 169 170 171 172 173 174 175
176 177 178 179 180 181 182 183
184 185 186 187 188 189 190 191
192 193 194 195 196 197 198 199
200 201 202 203 204 205 206 207
208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223
224 225 226 227 228 229 230 231
232 233 234 235 236 237 238 239
240 241 242 243 244 245 246 247
248 249 250 251 252 253 254 255
>;
default-brightness-level = <200>;
enable-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&lcd_en>;
};
};

&pwm7{
status = "okay";
pinctrl-names = "active";
pinctrl-0 = <&pwm7m3_pins>;
};

/*
* mipi_dcphy0 needs to be enabled
* when dsi0 is enabled
*/

&mipi_dcphy0 {
status = "okay";
};

&dsi0_in_vp2 {
status = "disabled";
};

&dsi0_in_vp3 {
status = "okay";
};

&route_dsi0 {
status = "disabled";
connect = <&vp3_out_dsi0>;
};


&dsi0 {
status = "okay";
//rockchip,lane-rate = <854>;
enable-gpios = <&gpio1 RK_PD6 GPIO_ACTIVE_HIGH>; // lvds_pwren
reset-gpios = <&gpio1 RK_PD7 GPIO_ACTIVE_HIGH>; // lvds_rst
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_VIDEO_HBP | MIPI_DSI_MODE_LPM )>;
dsi,format = <MIPI_DSI_FMT_RGB888>;
dsi,lanes = <4>;

panel-init-sequence = [
23 02 02 27 AA
23 02 02 48 02
23 02 02 B6 20
...
];

disp_timings0: display-timings {
native-mode = <&dsi0_timing0>;
dsi0_timing0: timing0 {
clock-frequency = <110000000>;
hactive = <1280>;
vactive = <800>;

hback-porch = <10>;
hfront-porch = <48>;
hsync-len = <1>;


vback-porch = <6>;
vfront-porch = <3>;
vsync-len = <5>;

hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <1>;
};
};

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

&pinctrl {
backlight {
/* for edp and dsi2lvds */
lcd_en: lcd-en {
rockchip,pins = <2 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};

6.2 背光控制

backlight: backlight {
status="okay";
compatible = "pwm-backlight";
pwms = <&pwm7 0 25000 0>;
// other settings...
  • 节点名称要为"backlight"
  • 节点的 compatible 属性值要为"pwm-backlight",驱动程序文件为drivers/video/backlight/pwm_bl.c
  • pwms 属性用于描述背光所使用的 PWM 的通道以及 PWM 频率,第一个参数pwm7表示使用 PWM7,第二个参数代表使用通道 0,第三个参数25000是 PWM 的周期,单位是 ns,也就是 25000ns,换算成频率就是 40KHz,最后一个 0 是极性设置
  • brightness-levels 属性描述亮度级别,范围为 0~255,0 表示 PWM 占空比为 0%,也就是亮度最低,255 表示 100%占空比,也就是亮度最高。
  • default-brightness-level 属性为默认亮度级别

6.3 PWM控制设置

&pwm7 {
status = "okay";
pinctrl-names = "active";
pinctrl-0 = <&pwm7m3_pins>;
};
  • 表示PWM7控制器的状态为可用,并配置其引脚。

6.4 MIPI DSI PHY配置

&mipi_dcphy0 {
status = "okay";
};
  • 表示MIPI DC PHY的状态为可用,这是MIPI DSI接口所需的物理层配置。

6.5 MIPI DSI配置

&dsi0 {
status = "okay";
//rockchip,lane-rate = <854>;
enable-gpios = <&gpio1 RK_PD6 GPIO_ACTIVE_HIGH>; // lvds_pwren
reset-gpios = <&gpio1 RK_PD7 GPIO_ACTIVE_HIGH>; // lvds_rst
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 = <MIPI_DSI_FMT_RGB888>;
dsi,lanes = <4>;

panel-init-sequence = [
23 02 02 27 AA
23 02 02 48 02
.....
];

disp_timings0: display-timings {
native-mode = <&dsi0_timing0>;
dsi0_timing0: timing0 {
clock-frequency = <110000000>;
hactive = <1280>;
vactive = <800>;

hback-porch = <10>;
hfront-porch = <48>;
hsync-len = <4>;


vback-porch = <6>;
vfront-porch = <3>;
vsync-len = <5>;

hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <1>;
};
};
};
  • compatible:驱动兼容属性,"simple-panel-dsi" 是通用的 DSI panel。

  • reset-delay-ms:panel 完全复位所花费的时间,单位为 ms。

  • enable-delay-ms:panel 开始接收视频数据到显示出第一帧画面所用的时间,单位为 ms。

  • prepare-delay-ms:panel 准备就绪并开始接收视频数据的时间,单位为 ms。

  • unprepare-delay-ms:panel 完全断电所花费的时间,单位为 ms。

  • disable-delay-ms:panel 关闭显示花费的时间,单位为 ms。

  • dsi,flags:可选的一些标记信息,MIPI_DSI_MODE_VIDEO表示主控采用 video 模式;MIPI_DSI_MODE_VIDEO_BURST使用 video 的 Burst 模式;MIPI_DSI_MODE_LPM支持 LP 模式,也就是在 LP 模式下传输初始化序列;MIPI_DSI_MODE_EOT_PACKET禁止 HS 模式下的 EoT 包。

  • dsi,format:video 模式下像素格式。

  • dsi,lanes:DSI 接口的 lane 数量。

  • panel-init-sequence 和 panel-exit-sequence:该序列定义了面板初始化的指令,具体数据应根据面板的规格书进行设置。

  • disp_timings0:MIPI 屏幕的 DPI 时序参数。

    时序参数数值说明
    hactive1280水平分辨率
    vactive800垂直分辨率
    hbp10水平后肩
    hfp48水平前肩
    hsync-len4水平同步信号宽度
    vbp6垂直后肩
    vfp3垂直前肩
    vsync-len5垂直同步信号宽度

6.6 MIPI 驱动代码

Rockchip平台mipi驱动代码如下:

  • MIPI DSI-2 host controller: kernel/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c kernel/drivers/gpu/drm/panel/panel-simple.c

    负责处理 Rockchip 平台上 DSI(Display Serial Interface)接口的控制, 实现了对 Rockchip SoC(如 RK35系列芯片)中嵌入的 DesignWare MIPI DSI v2 控制器 的支持和管理。

  • MIPI DCPHY: drivers/phy/rockchip/phy-rockchip-samsung-dcphy.c

    phy-rockchip-samsung-dcphy.c 是内核中的mipi dcphy驱动代码文件,负责支持 Rockchip 芯片和三星设计的 DCPHY(Display Controller PHY)模块。它的主要功能是处理物理层(PHY)硬件的初始化和控制,尤其是与显示子系统(如 MIPI DSI 接口或其他显示接口)相关的部分。PHY 是显示信号传输过程中非常重要的一部分,负责从数字信号到电信号的转换,以便在显示设备上呈现。

6.7 触摸屏驱动

触摸屏驱动可参考开源论坛:Linux 触摸屏驱动

7. FAQ

7.1 EV101WXM-N10 10.1寸屏不显示或者出现白线

  • 确认固件是否支持
  • 检查是否接线不良
  • 检查 3.3V 跳线帽是否接入

7.2 触摸屏不准

执行以下命令,设置LVDS为主屏:

xrandr --output DSI-1 --auto --primary