1、前序
- 前几天,买了个显示屏,5寸的RGB(800*480),遇到了个奇葩的问题,用了芒果的F133(MQ-R)板子,然后开启了lvgl的demo程序,发现屏幕整体图像很淡,有抖动波纹,有种撕裂的感觉,不信你看
。可能不是很清晰,如下:
2、过程
- 当时出现了这个问题的时候,我首先看了设备树,发现设备树该改的都改了呀,也没看出啥毛病,然后一直在哪里乱调,群里问了大佬,得到了一点点的灵感,看来还是要上RGB显示屏的手册才行,如下图所示。
- 接着对着手册改,发现改了也没用,然后用了示波器测量dclk,发现时钟频率是48Mhz,哇,这么嗨高,手册显示最高也就27Mhz,以是我想了想,要不把频率降下来看看,然后打了两个补丁:
0001-disp-support-dynamic-adjust-tcon_div.patch:
放置到 lichee/linux-5.4 目录中执行
git apply 0001-disp-support-dynamic-adjust-tcon_div.patch
0001-disp-support-dynamic-adjust-tcon_div-uboot.patch:
放置到 lichee/brandy-2.0/u-boot-2018 目录中执行
git apply 0001-disp-support-dynamic-adjust-tcon_div-uboot.patch
补丁在这个全志服务平台上:https://open.allwinnertech.com/#/sdk/0?menuID=36
如图所示:
- 接着依旧于事无补,没用啊,算了,打了补丁就不管了,过了两天,带着板子到公司的示波器上测测波形,靠,还是48Mhz,无语,只能看看有没有同步吧,接着在uboot命令行下用了fdt print命令看了一下设备树的参数,发现和内核的设备树一样,这下扯淡了,证明改的设备树内啥问题啊,都更新进去了,于是我还是不死心,坚决拿uboot的设备树开刀,改成了和内核的参数一样,烧录进去,啪,示波器测量,24Mhz,成了。没了,请看下一集。
贴图贴图,收工。
贴个内核设备树(uboot也是一样的)上来给大家看看:
&lcd0 {
lcd_used = <1>;
lcd_driver_name = "default_lcd";
lcd_backlight = <50>;
lcd_if = <0>;
lcd_x = <800>;
lcd_y = <480>;
lcd_width = <108>;
lcd_height = <65>;
lcd_dclk_freq = <22>;
lcd_pwm_used = <1>;
lcd_pwm_ch = <9>;
lcd_pwm_freq = <50000>;
lcd_pwm_pol = <0>;
lcd_pwm_max_limit = <255>;
lcd_hbp = <12>;
lcd_ht = <816>;
lcd_hspw = <4>;
lcd_vbp = <12>;
lcd_vt = <496>;
lcd_vspw = <4>;
lcd_lvds_if = <0>;
lcd_lvds_colordepth = <1>;
lcd_lvds_mode = <0>;
lcd_frm = <0>;
lcd_io_phase = <0x0000>;
lcd_gamma_en = <0>;
lcd_bright_curve_en = <0>;
lcd_cmap_en = <0>;
deu_mode = <0>;
lcdgamma4iep = <22>;
smart_color = <90>;
pinctrl-0 = <&rgb18_pins_a>;
pinctrl-1 = <&rgb18_pins_b>;
};
// 记得改uboot的设备树,一定、一定、一定,重要的事情要说三遍!!!