GL101B32C6 MIPI 屏幕模组
本文介绍 Neardi 设备 10.1寸 MIPI 屏幕的使用
1. 模组介绍
MIPI(Mobile Industry Processor Interface)是一种用于连接移动设备和显示面板的接口标准。在 Neardi 设备上面,具体参数如下:
| 参数 | |
|---|---|
| 型号 | GL101B32C6 |
| 屏幕 | 10.1寸 IPS 屏幕 |
| 分辨率 | 800x1280像素(10:16) |
| 触摸屏 | 电容式多点触摸屏 |
| 显示 | MIPI接口 |
GL101B32C6屏资料:星科10.1寸MIPI双通道 GL101B32C6-2Lane.pdf
需要购买配件的话,可以从这里下单:点击购买。
2. 硬件连接
注意
- 接口接反会烧毁屏幕,必须按下文"接线图"所示接入设备。
- 不可带电拔插屏幕,避免带电操作导致短路。
2.1 RK3576系列
LKB3576

LKD3576

2.2 RV1126BP系列
LKD1126BP

3. 驱动检查
部分固件默认未添加MIPI DSI的设备树,如有需要可申请SDK自行添加设备树,或者联系业务进行处理。
3.1 RK3576系列
Neardi-3576的SDK有MIPI DSI的dtsi文件,此dtsi文件为 GL101B32C6 10.1寸屏配置:
SDK/kernel/arch/arm64/boot/dts/rockchip/rk3576-neardi-lz201-mipi-dsi-xk-gl101b32c6-10p1-dual-2lane.dtsi
根据具体设备型号修改对应dts,打开或者关闭屏幕配置:
# LKD3576
rk3576-neardi-lz201-linux.dts
# LKB3576
rk3576-neardi-lz200-linux.dts
4. 快速开始
4.1 配置显示器的分辨率、方向、刷新率
列出目前环境支持的解析度和频率
neardi@LKD3576:~$ xrandr
Screen 0: minimum 320 x 200, current 2720 x 1280, 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 59.94 30.00 24.00 29.97 23.98
4096x2160 24.00 23.98
3840x2160 30.00 25.00 24.00 29.97 23.98
1920x1080i 60.00 50.00 59.94
1280x720 60.00 60.00 50.00 50.00 30.00 59.94 29.97 24.00 23.98
1024x768 60.00
800x600 60.32
720x576 50.00 50.00
720x480 60.00 60.00 59.94 59.94 59.94
640x480 60.00 59.94 59.94
DSI-1 connected 800x1280+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
800x1280 55.19*+
DP-1 disconnected (normal left inverted right x axis y axis)
`1920x1080`是当前主显示器的分辨率,此时刷新率是`60.00`。
`DSI-1`是GL101B32C6,可通过以下命令将MIPI设置为主显示器:
```bash
$ xrandr --output DSI-1 --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@LKD3576:~$ cd /sys/devices/platform/backlight/backlight/backlight
neardi@LKD3576:/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. RK3576 VOP 简介
6. 设备树分析
6.1 设备树配置
LKD3576 DTS 配置如下:
&{/} {
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm1_6ch_1 0 25000 1>;
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>;
};
lcd_en: lcd_en {
status = "okay";
compatible = "regulator-fixed";
regulator-name = "lcd_en";
regulator-always-on;
regulator-boot-on;
enable-active-high;
gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
};
bl_en: bl_en {
status = "okay";
compatible = "regulator-fixed";
regulator-name = "bl_en";
regulator-always-on;
regulator-boot-on;
enable-active-high;
gpio = <&gpio3 RK_PA3 GPIO_ACTIVE_HIGH>;
};
};
&pwm1_6ch_1 {
status = "okay";
pinctrl-0 = <&pwm1m0_ch1>;
};
&dsi {
status = "okay";
//rockchip,lane-rate = <450>;
si_panel: panel@0 {
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
backlight = <&backlight>;
prepare-delay-ms = <5>;
reset-delay-ms = <1>;
init-delay-ms = <80>;
disable-delay-ms = <10>;
unprepare-delay-ms = <5>;
width-mm = <83>;
height-mm = <83>;
reset-gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>;
//enable-gpios = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&bl_pwr_en>, <&panel_reset>;
power-supply = <&vcc3v3_lcd_n>;
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 = <2>;
panel-init-sequence = [
39 00 04 FF 98 81 03
15 00 02 01 00
15 00 02 02 00
15 00 02 03 53
15 00 02 04 D3
15 00 02 05 00
15 00 02 06 0D
15 00 02 07 08
15 00 02 08 00
15 00 02 09 00
15 00 02 0a 00
15 00 02 0b 00
15 00 02 0c 00
15 00 02 0d 00
15 00 02 0e 00
15 00 02 0f 28
15 00 02 10 28
15 00 02 11 00
15 00 02 12 00
15 00 02 13 00
15 00 02 14 00
15 00 02 15 00
15 00 02 16 00
15 00 02 17 00
15 00 02 18 00
15 00 02 19 00
15 00 02 1a 00
15 00 02 1b 00
15 00 02 1c 00
15 00 02 1d 00
15 00 02 1e 40
15 00 02 1f 80
15 00 02 20 06
15 00 02 21 01
15 00 02 22 00
15 00 02 23 00
15 00 02 24 00
15 00 02 25 00
15 00 02 26 00
15 00 02 27 00
15 00 02 28 33
15 00 02 29 33
15 00 02 2a 00
15 00 02 2b 00
15 00 02 2c 00
15 00 02 2d 00
15 00 02 2e 00
15 00 02 2f 00
15 00 02 30 00
15 00 02 31 00
15 00 02 32 00
15 00 02 33 00
15 00 02 34 03
15 00 02 35 00
15 00 02 36 00
15 00 02 37 00
15 00 02 38 96
15 00 02 39 00
15 00 02 3a 00
15 00 02 3b 00
15 00 02 3c 00
15 00 02 3d 00
15 00 02 3e 00
15 00 02 3f 00
15 00 02 40 00
15 00 02 41 00
15 00 02 42 00
15 00 02 43 00
15 00 02 44 00
15 00 02 50 00
15 00 02 51 23
15 00 02 52 45
15 00 02 53 67
15 00 02 54 89
15 00 02 55 ab
15 00 02 56 01
15 00 02 57 23
15 00 02 58 45
15 00 02 59 67
15 00 02 5a 89
15 00 02 5b ab
15 00 02 5c cd
15 00 02 5d ef
15 00 02 5e 00
15 00 02 5f 08
15 00 02 60 08
15 00 02 61 06
15 00 02 62 06
15 00 02 63 01
15 00 02 64 01
15 00 02 65 00
15 00 02 66 00
15 00 02 67 02
15 00 02 68 15
15 00 02 69 15
15 00 02 6a 14
15 00 02 6b 14
15 00 02 6c 0D
15 00 02 6d 0D
15 00 02 6e 0C
15 00 02 6f 0C
15 00 02 70 0F
15 00 02 71 0F
15 00 02 72 0E
15 00 02 73 0E
15 00 02 74 02
15 00 02 75 08
15 00 02 76 08
15 00 02 77 06
15 00 02 78 06
15 00 02 79 01
15 00 02 7a 01
15 00 02 7b 00
15 00 02 7c 00
15 00 02 7d 02
15 00 02 7e 15
15 00 02 7f 15
15 00 02 80 14
15 00 02 81 14
15 00 02 82 0D
15 00 02 83 0D
15 00 02 84 0C
15 00 02 85 0C
15 00 02 86 0F
15 00 02 87 0F
15 00 02 88 0E
15 00 02 89 0E
15 00 02 8A 02
39 00 04 FF 98 81 04
15 00 02 6E 2B
15 00 02 6F 37
15 00 02 3A A4
15 00 02 8D 1A
15 00 02 87 BA
15 00 02 B2 D1
15 00 02 88 0B
15 00 02 38 01
15 00 02 39 00
15 00 02 B5 07
15 00 02 31 75
15 00 02 3B 98
39 00 04 FF 98 81 01
15 00 02 22 0A
15 00 02 31 00
15 00 02 53 4D
15 00 02 55 4D
15 00 02 50 85
15 00 02 51 80
15 00 02 60 10
15 00 02 62 20
15 00 02 A0 00
15 00 02 A1 06
15 00 02 A2 1B
15 00 02 A3 14
15 00 02 A4 18
15 00 02 A5 2E
15 00 02 A6 22
15 00 02 A7 24
15 00 02 A8 85
15 00 02 A9 1E
15 00 02 AA 2A
15 00 02 AB 74
15 00 02 AC 1B
15 00 02 AD 19
15 00 02 AE 4C
15 00 02 AF 21
15 00 02 B0 27
15 00 02 B1 4B
15 00 02 B2 58
15 00 02 B3 23
15 00 02 C0 00
15 00 02 C1 1F
15 00 02 C2 29
15 00 02 C3 12
15 00 02 C4 14
15 00 02 C5 25
15 00 02 C6 19
15 00 02 C7 1B
15 00 02 C8 84
15 00 02 C9 1D
15 00 02 CA 28
15 00 02 CB 73
15 00 02 CC 1A
15 00 02 CD 18
15 00 02 CE 4D
15 00 02 CF 23
15 00 02 D0 29
15 00 02 D1 4C
15 00 02 D2 5B
15 00 02 D3 23
39 00 04 FF 98 81 00
15 00 02 35 00
15 00 02 11 00
15 78 02 00 00
15 00 02 29 00
15 0A 02 00 00
];
panel-exit-sequence = [
05 05 01 28
05 78 01 10
];
disp_timings0: display-timings {
native-mode = <&dsi_timing0>;
dsi_timing0: timing0 {
clock-frequency = <66000000>;
hactive = <800>;
vactive = <1280>;
hback-porch = <48>;
hfront-porch = <52>;
vback-porch = <15>;
vfront-porch = <16>;
hsync-len = <8>;
vsync-len = <6>;
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>;
};
};
};
};
&route_dsi {
status = "okay";
connect = <&vp1_out_dsi>;
};
&dsi_in_vp0 {
status = "disabled";
};
&dsi_in_vp1 {
status = "okay";
};
&dsi_in_vp2 {
status = "disabled";
};
&dsi_in_vopl {
status = "disabled";
};
/* touch panel */
&i2c0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c0m1_xfer>;
gt9xx: gt9xx@5d {
status = "okay";
compatible = "goodix,gt9xx";
reg = <0x5d>;
pinctrl-names = "default";
pinctrl-0 = <&tp_gpio>;
touch-gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
reset-gpio = <&gpio0 RK_PD0 GPIO_ACTIVE_HIGH>;
touchscreen-size-x = <800>;
touchscreen-size-y = <1280>;
max-x = <800>;
max-y = <1280>;
tp-size = <9111>;
//tp-supply = <&vcc_tp>;
wakeup-source;
touchscreen-key-map = <158>; //KEY_HOMEPAGE=172,KEY_BACK=158,KEY_MENU=139
goodix,driver-send-cfg = <0>;
goodix,cfg-group0 =[
42 00 03 00 04 0A 45 03 22 1F 28 0F 64 3C 03 0F 00 00 00 00 11 00
08 00 00 00 00 8B 29 0E 71 6F B2 04 00 00 00 39 02 10 00 21 00 00
00 03 64 32 00 00 00 3C 78 94 D5 02 07 00 00 04 C8 40 00 B1 4A 00
9E 55 00 8E 61 00 7F 70 00 7F 70 00 00 00 F0 90 3C FF FF 07 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 1C 1A 18 16 14 12 10 0E 0C 0A 08 06 04 02 FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF 00 02 04 06 08 0A 0C 0F 10 12 13 16
18 1C 1D 1E 1F 20 21 22 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF F6 01
];
};
};
&pinctrl {
lcd {
panel_reset: panel_reset {
rockchip,pins = <3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
};
bl_pwr_en: bl_pwr_en {
rockchip,pins = <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
tp {
tp_gpio: tp-gpio {
rockchip,pins =
<0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>,
<0 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
};
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>;
reset-gpios = <&gpio1 RK_PD7 GPIO_ACTIVE_HIGH>;
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 时序参数。
时序参数 数值 说明 hactive 1280 水平分辨率 vactive 800 垂直分辨率 hbp 10 水平后肩 hfp 48 水平前肩 hsync-len 4 水平同步信号宽度 vbp 6 垂直后肩 vfp 3 垂直前肩 vsync-len 5 垂直同步信号宽度
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 GL101B32C6 10.1寸屏不显示或者出现白线
- 确认固件是否支持
- 检查是否接线不良