rk3568 Android11/12 调试 RGB 屏
RGB一般是指RGB色彩模型(RGB color model),是工业界的一种颜色标准。RGB接口占用的资源较多,所以这个接口的LCD刷新率非常快,软件控制也比较简单。缺点是控制需要增加电路,软件初始化需要增加程序,占用资源较多;时钟频率要设置合适,否则不会显示内容。
提示:RGB屏幕参数要求比较严苛,须反调整。
文章目录
- rk3568 Android11/12 调试 RGB 屏
- 圈重点 看想学
- 1. 核查原理图,适配RGB硬件
- 1.1 核查原理图,适配RGB硬件
- 1.2 RGB 屏参调整
- 1.3 查GPIO复用
- Tips
- 总结
圈重点 看想学
- rk3568 适配RGB屏
- 调整屏参
1. 核查原理图,适配RGB硬件
-
rk3568 并口 RGB 屏幕使用引脚
-
LCD 屏幕硬件参数
- LCD 屏幕排线定义
由 LCD pins定义可以确定屏幕需要初始化代码,并且为SPI协议;集成触摸盖板。
1.1 核查原理图,适配RGB硬件
核对原理图中的LCD 的供电、复位以及足够多的GPIO复用,此处不再赘述。屏幕背光与常规平无异,使用PWM控制信号且带有供电使能。相信大多数小伙伴已经掌握相关匹配方法。初始化代码仅仅适配本文中用到的屏幕,需要点屏的小伙伴可找供应商所要相关资料。
/ {
panel: panel {
compatible = "simple-panel";
bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
backlight = <&backlight>;
enable-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
enable-delay-ms = <20>;
reset-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_LOW>;
reset-delay-ms = <10>;
prepare-delay-ms = <20>;
unprepare-delay-ms = <20>;
disable-delay-ms = <20>;
/* spi-sdo-gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_HIGH>; */
spi-sdi-gpios = <&gpio4 RK_PC3 GPIO_ACTIVE_HIGH>;
spi-scl-gpios = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;
spi-cs-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
width-mm = <43>;
height-mm = <73>;
pinctrl-names = "default";
pinctrl-0 = <&spi_init_cmd>;
rockchip,cmd-type = "spi";
/* type:0 is cmd, 1 is data */
panel-init-sequence = [
/* type delay num val1 val2 val3 */
00 00 01 e0
01 00 01 00
01 00 01 07
01 00 01 0f
01 00 01 0d
01 00 01 1b
01 00 01 0a
01 00 01 3c
01 00 01 78
01 00 01 4a
01 00 01 07
01 00 01 0e
01 00 01 09
01 00 01 1b
01 00 01 1e
01 00 01 0f
00 00 01 e1
01 00 01 00
01 00 01 22
01 00 01 24
01 00 01 06
01 00 01 12
01 00 01 07
01 00 01 36
01 00 01 47
01 00 01 47
01 00 01 06
01 00 01 0a
01 00 01 07
01 00 01 30
01 00 01 37
01 00 01 0f
00 00 01 c0
01 00 01 10
01 00 01 10
00 00 01 c1
01 00 01 41
00 00 01 c5
01 00 01 00
01 00 01 22
01 00 01 80
00 00 01 36
01 00 01 48
00 00 01 3a /* interface mode control */
01 00 01 66
00 00 01 b0 /* interface mode control */
01 00 01 00
00 00 01 b1 /* frame rate 70hz */
01 00 01 b0
01 00 01 11
00 00 01 b4
01 00 01 02
00 00 01 B6 /* RGB/MCU Interface Control */
01 00 01 32 /* 02 mcu, 32 rgb */
01 00 01 02
00 00 01 b7
01 00 01 c6
00 00 01 be
01 00 01 00
01 00 01 04
00 00 01 e9
01 00 01 00
00 00 01 f7
01 00 01 a9
01 00 01 51
01 00 01 2c
01 00 01 82
00 78 01 11
00 00 01 29
];
panel-exit-sequence = [
/* type delay num val1 val2 val3 */
00 0a 01 28
00 78 01 10
];
display-timings {
native-mode = <&kd050fwfba002_timing>;
kd050fwfba002_timing: timing0 {
clock-frequency = <12000000>;
hactive = <320>;
vactive = <480>;
hback-porch = <10>;
hfront-porch = <5>;
vback-porch = <10>;
vfront-porch = <5>;
hsync-len = <10>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
port {
panel_in_rgb: endpoint {
remote-endpoint = <&rgb_out_panel>;
};
};
};
};
&backlight {
enable-gpios = <&gpio1 RK_PB2 GPIO_ACTIVE_HIGH>;
};
&rgb_in_vp2 {
status = "okay";
};
&rgb {
status = "okay";
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>;
};
};
};
};
&route_rgb {
status = "okay";
};
&pinctrl {
spi_panel {
spi_init_cmd: spi-init-cmd {
rockchip,pins =
/* spi sdi */
<4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>,
/* spi scl */
<4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>,
/* spi cs */
<4 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
1.2 RGB 屏参调整
拿到屏幕规格书那一刻,都会多不过看屏参的时刻。配置屏幕参数时一般选取 type (典型值),如屏幕有轻微偏位简单调整屏幕参数,可参照另一篇文章rk3568点亮LCD(lvds)。以下时某一个款屏幕的 timings。
timing0中参数解释如下:
水平分辨率:hactive 垂直分辨率:vactive
水平前尖:hfront-porch(HFP) 垂直前尖:vfront-porch (VFP)
水平后尖:hback-porch(HBP) 垂直后尖:vback-porch (VBP)
水平消隐信号:hsync - len(HS) 垂直消隐信号:vsync - len (VS)
– clock-frequency = HFP(Hactive + HS + HBP) x VFP(Vactive + VS + VBP) x fps(帧频率)
– lane-rate = clk (时钟频率) x RGB(3) x BIT(6或8) / lane_num
lane_num 表示差分时钟通道数,RGB与BIT值根据 dsi,format 具体情况而定。
– dsi,format 表示RGB三原色位深大小,可用参数如下:
MEDIA_BUS_FMT_RGB888_1X24 表示8bit色深,RGB888 24BIT 屏。
MEDIA_BUS_FMT_RGB666_1X18 表示6bit色深,适配RGB666 18 bit 屏。
MEDIA_BUS_FMT_RGB565_1X16 表示565色深(单位bit),适配RGB565 16 bit 屏。
1.3 查GPIO复用
- 核查常规GPIO申请
# andorid
cat /d/gpio
# linux
cat /sys/kernel/debug/gpio
- 核查 iomux 申请
ls /sys/kernel/debug/pinctrl/pinctrl-maps
-r--r--r-- 1 root root 0 1月 1 1970 pinctrl-devices # gpio 设备申请
-r--r--r-- 1 root root 0 1月 1 1970 pinctrl-handles # gpio 引用
-r--r--r-- 1 root root 0 1月 1 1970 pinctrl-maps # gpio 映射
drwxr-xr-x 2 root root 0 1月 1 1970 pinctrl-rockchip-pinctrl
drwxr-xr-x 2 root root 0 1月 1 1970 rk805-pinctrl-rk817-pinctrl
以查看TF卡GPIO为例
cat pinctrl-handles | grep mmc
device: fe2b0000.dwmmc current state: default
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc0-bus4 (61) function: sdmmc0 (37)
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc0-clk (62) function: sdmmc0 (37)
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc0-cmd (63) function: sdmmc0 (37)
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc0-det (64) function: sdmmc0 (37)
device: fe2c0000.dwmmc current state: default
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc1-bus4 (65) function: sdmmc1 (38)
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc1-cmd (67) function: sdmmc1 (38)
type: MUX_GROUP controller rockchip-pinctrl group: sdmmc1-clk (66) function: sdmmc1 (38)
Tips
- 屏幕闪烁
先确定背光闪烁还是屏幕内容闪?
背光闪烁则需要确认背光供电是否充足,PWM 信号是否稳定。
内容闪烁在排除排线异常后,很大概率时屏幕参数异常;微微调整屏幕参数可化解闪烁。 - 屏幕出现现条纹
很大概率时屏幕参数异常;微微调整屏幕参数可化解闪烁。 - 开机过程无开机logo或开机过程黑屏休眠唤醒可正常显示
可从logo 显示控制和 VOP 匹配排查。
&rgb_in_vp2 {
status = "okay";
};
&route_rgb {
status = "okay";
};
总结
活学活用,做个合格的搬运工。