【FAQ】全志V853芯片 Tina SDK LCD小分辨率DCLK设置问题
-
1.主题
Tina SDK LCD小分辨率DCLK设置2.问题背景
产品:带显示屏的产品
硬件:V系列 + DE
软件:Tina SDK
其他:使用小分辨的LCD显示频,根据LCD的时序算出的DLCK小于48MHz3.具体表现
可以看到希望设置的dlck为10MHz,但lck real dclk为18MHz,导致后续的帧率显示异常[ 0.186329] disp 0, clk: pll(40000000),clk(40000000),dclk(10000000) dsi_rate(10000000) [ 0.186329] clk real:pll(72000000),clk(72000000),dclk(18000000) dsi_rate(18000000)
查看信息:
root@(none):/sys/devices/virtual/disp/disp/attr# cat sys screen 0: de_rate 300000000 hz, ref_fps:50 mgr0: 272x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] dmabuf: cache[0] cache max[0] umap skip[0] overflow[0] lcd output backlight(255) fps:90.9 272x 480 err:0 skip:170 irq:22509 vsync:0 vsync_skip:0 BUF enable ch[0] lyr[0] z[2] prem[N] a[pixel 128] fmt[ 77] fb[ 272, 480; 136, 240; 0, 0] crop[ 0, 0, 272, 480] frame[ 0, 0, 272, 480] addr[ 2e0000, 2d0000, 0] flags[0x 0] trd[0,0] BUF enable ch[2] lyr[0] z[16] prem[N] a[pixel 150] fmt[ 0] fb[ 272, 480; 272, 480; 272, 480] crop[ 0, 0, 272, 480] frame[ 0, 0, 272, 480] addr[ 17f800, 0, 0] flags[0x
4.问题分析
当LCD使用小分辨率时,根据LCD需要的时序参数,计算出来的dlck一般会小于48MHz,或者更小,此时客户计算出来的dclk会很小,可能会整除不了24,然后直接设置了dclk,比如设置lcd_dclk_freq = <10>;驱动底层默认的分频系数为4分频,所以理论计算值得到的pll值为40MHz,而真实的LCD的PLL是由24MHz倍频得到,而40MHz,并不是24的倍数,所以此时PLL的频率会向上取,此处计算出来的是72MHz,然后4分频得到的真实的dlck是18MHz,从而使得LCD出现异常。5.根本原因
小分辨率dts中设置了不能整除24MHz的频率。6.解决办法
对于小分辨的的LCD设置DCLK的时候,计算出来的dclk的理论值尽量按照以下的频率值的设置:
48MHz 24MHz 12MHz 8MHz 6MHz 4MHz当设置条件1的dclk时,显示的帧率或者显示还是异常,则就按照计算出来的理论值来设置即可,比如计算出来的dclk的值为10MHz,
则dts中lcd_dclk_freq = <10>;,然后根据启动log来调整分频系数,如下:
[ 0.186329] disp 0, clk: pll(40000000),clk(40000000),dclk(10000000) dsi_rate(10000000) [ 0.186329] clk real:pll(72000000),clk(72000000),dclk(18000000) dsi_rate(18000000)
从打印可以看到此时的分频系统是4分频:pll/dclk=4,所以想得到接近10MHz的频率此时可以把分频系数改成6或者8, 72/6=12, 72/8=9。
修改分频系数
3.1 kernel(drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c) static struct lcd_clk_info clk_tbl[] = { {LCD_IF_HV, 6, 1, 1, 0}, /* CPU接口 / {LCD_IF_CPU, 12, 1, 1, 0}, / LVDS接口 / {LCD_IF_LVDS, 7, 1, 1, 0}, #if defined(DSI_VERSION_40) {LCD_IF_DSI, 4, 1, 4, 148500000}, #else / mipi接口 / {LCD_IF_DSI, 4, 1, 4, 0}, / 改成8分频 {LCD_IF_DSI, 8, 1, 8, 0}*/ #endif /endif DSI_VERSION_40/ {LCD_IF_VDPO, 4, 1, 1, 0}, }; 3.2 uboot(drivers/video/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c) static struct lcd_clk_info clk_tbl[] = { {LCD_IF_HV, 6, 1, 1, 0}, {LCD_IF_CPU, 12, 1, 1, 0}, {LCD_IF_LVDS, 7, 1, 1, 0}, #if defined(DSI_VERSION_40) {LCD_IF_DSI, 4, 1, 4, 150000000}, #else {LCD_IF_DSI, 8, 1, 8, 0}, #endif /*endif DSI_VERSION_40 */ };
-
-
@q1215200171 赞,学习学习。
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号