RK3506 RGB屏幕
说明
调试RGB屏幕,串口屏,大的步骤还是先配置背光,再配置RGB的显示。
步骤
1. 配置背光
有个背光en脚,高电平有效。原理图如下:

发现背光的en脚,是mipi屏幕的传输脚,第一次遇到这种情况。按理说差分的PAD一般只有他自己的差分的功能的。

这个脚搞的半天,iomux查看复用是正常的,sysfs导出控制是正常的,可以控制背光,但是到内核控制就不行了,查看cat /sys/kernel/debug/gpio 也一直是低。
root@rk3506-buildroot:/# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/ff940000.gpio, gpio0:
gpio-1 ( |enable ) out lo ACTIVE LOW
gpio-2 ( |qywatchdog ) out lo ACTIVE LOW
gpio-7 ( |reset ) out hi ACTIVE LOW
gpio-8 ( |rs485-de ) out lo
gpio-11 ( |rs485-de ) out lo
gpiochip1: GPIOs 32-63, parent: platform/ff870000.gpio, gpio1:
gpio-36 ( |pwr4g_3v3-regulator ) out lo
gpio-48 ( |spk_pwren-regulator ) out lo
gpiochip2: GPIOs 64-95, parent: platform/ff1c0000.gpio, gpio2:
gpiochip3: GPIOs 96-127, parent: platform/ff1d0000.gpio, gpio3:
gpio-109 ( |vcc3v3regulator ) out hi
gpiochip4: GPIOs 128-159, parent: platform/ff1e0000.gpio, gpio4:
gpio-128 ( |led_run ) out lo ACTIVE LOW
gpio-129 ( |enable ) out lo
到最后发现不是内核不控制,而是 RGB的panel节点没起来,导致背光节点 backlight 起开之后,自动关闭了,就是只注册了背光节点,然后RGB没起来就把背光给power off了。 cat /sys/kernel/debug/gpio 这个命令查看引脚一直是低电平应该是引脚的寄存器没有配置。类似于IMX6ULL的那个引脚的问题,回环读取的寄存器配置。
设备树节点:
/ {
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm0_4ch_2 0 25000 1>;
pinctrl-names = "default";
pinctrl-0 = <&backlight_en_pin>;
enable-gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_HIGH>;
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>;
status = "okay";
};
};
&pinctrl {
backlight {
backlight_en_pin: backlight_en_pin {
rockchip,pins = <4 RK_PA1 RK_FUNC_GPIO &pcfg_output_high>;
};
};
};
因为pwm输出到背光的供电的负极,所以 pwms = <&pwm0_4ch_2 0 25000 1>; 里面最后的极性设置为1。
使用的驱动是 drivers/video/backlight/pwm_bl.c
测试
sysfs控制:
/sys/class/backlight/backlight
echo 100 > brightness
echo 200 > brightness
2. 配置RGB屏幕节点
驱动: drivers/gpu/drm/panel/panel-simple.c
根据屏幕的 datasheet 配置 display-timings 节点即可。
设备树:
/ {
panel: panel {
compatible = "simple-panel";
bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;
backlight = <&backlight>;
enable-gpios = <&gpio0 RK_PA1 GPIO_ACTIVE_LOW>;
enable-delay-ms = <20>;
reset-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
reset-value = <0>;
reset-delay-ms = <10>;
status = "okay";
display-timings {
native-mode = <&q7050ith2641aa1t_timing>;
q7050ith2641aa1t_timing: timing0 {
clock-frequency = <51200000>;
hactive = <1024>;
vactive = <600>;
hback-porch = <160>;
hfront-porch = <160>;
vback-porch = <23>;
vfront-porch = <12>;
hsync-len = <2>;
vsync-len = <2>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
port {
panel_in_rgb: endpoint {
remote-endpoint = <&rgb_out_panel>;
};
};
};
};
&rgb {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&rgb888_pins>;
ports {
rgb_out: port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
rgb_out_panel: endpoint@0 {
reg = <0>;
remote-endpoint = <&panel_in_rgb>;
};
};
};
};
&rgb_in_vop {
status = "okay";
};
&route_rgb {
status = "okay";
};
&cma {
size = <0x1600000>;
};
IO_LCD_MODE引脚记得设置模式
0:SYNC MODE&DE=0
1:DE MODE&VS^HS=1
结束
无,主要是GPIO的配置问题,没有配置好,导致RGB屏幕没有起来。
把uboot的部分配置下:
yangx@u20:~/linux2/yangx/RK3506/u-boot$ git show d1ad57b3194aebc5c2a8951dff72bf90d3b96281
commit d1ad57b3194aebc5c2a8951dff72bf90d3b96281 (HEAD -> QY-RK3506-BASE-HMI, rk/QY-RK3506-BASE-HMI)
Author: yangx <yangx@.com>
Date: Thu Mar 5 17:03:40 2026 +0800
QY: 配置GPIO4_A1为GPIO,默认是被用作MIPI使用
diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c
index 7abb7dffcb..67da051c6d 100644
--- a/arch/arm/mach-rockchip/board.c
+++ b/arch/arm/mach-rockchip/board.c
@@ -92,6 +92,19 @@ __weak int set_armclk_rate(void)
__weak int rk_board_init(void)
{
gpio_set_value(1, 0);
+ // 开启 MIPI 时钟
+ writel(0x00200000, 0xff9a0804);
+ writel(0x30000000, 0xff9a0854);
+ writel(0x30000000, 0xff9a0a54);
+ // 禁用 MIPI
+ writel(0x03000300, 0xff288018);
+ writel(0x4, 0xff6400a0);
+ writel(0x4, 0xff67038c);
+ writel(0xfd, 0xff6703ac);
+ // GPIO4_A1 输出高
+ writel(0x00010001, 0xFF1E0008);
+ writel(0x00010001, 0xFF1E0000);
+ // gpio_set_value(129, 1);
// printf("yx --- rk_board_init 11111111111111111111111111111111111\n");
return 0;
}
其他

注意内核的背光pinctrl会被uboot引用,pinctrl设置为输出高就会出现上面的问题,但是uboot阶段显示不正常。
例如以下:
backlight {
backlight_en_pin: backlight_en_pin {
rockchip,pins = <4 RK_PA1 RK_FUNC_GPIO &pcfg_output_high>;
};
};
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/19517074,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号