您的位置:首页 > 其它

LCD驱动快速调试

2017-06-15 21:25 281 查看
LCD就是一个一个的点嘛,每个点有分16bit  24bit  32bit   一般都8 : 8 : 8 的红绿蓝  基本原理就是这样,一个一个的点。一个LCD的图就是这样一般换屏调的比较多的是Timing,就是上面的那个图,调什么呢,就是调 “打点”。打点不能太快,也不能太慢!看上面那个图,left_margin  Right margin   Hsync 这些东西是什么鬼? 叫做: 行切换的回扫时间,水平同步时间  什么意思?就是说我打点的时候有时间拖延,比如我打个  长为1366  宽为768  的屏幕,一个屏幕是不是就是1366×768=1049088个点,但是事实上我要花大于  1049088 的打点时间,为什么要用点来算时间?因为人家的数据手册 就是 点频率为主要参数。那OK?我们来算算一张图真正需要的打点单位时间。一张图单位时间 = (Left_margin + right_margin + hsync + xres) × (Upper_margin + low_margin + vsync + yres)                             这些数据可以在数据手册的Timing参数上面这个是1920 × 1080的LCD但是,实际打一张图的单位时间却不是 1920 *1080 因为有拖延的时间嘛上图所知道是  实际的一张图的单位时间 2142 * 1100  还有这个LCD的打点频率是141.4M,记得,是点频率OK,Timing参数基本上就已经知道了开源上面说个例子:/arch/arm/boot/dts/imx6dl-tx6u-811x.dts
display-timings {
107			native-mode = <&lvds_timing0>;
108			lvds_timing0: hsd100pxn1 {
109				clock-frequency = <65000000>;
110				hactive = <1024>;
111				vactive = <768>;
112				hback-porch = <220>;
113				hfront-porch = <40>;
114				vback-porch = <21>;
115				vfront-porch = <7>;
116				hsync-len = <60>;
117				vsync-len = <10>;
118				de-active = <1>;
119				pixelclk-active = <1>;
120			};
121		};
hback-porch = <220>;  hfront-porch = <40>;  hsync-len = <60>; 这个三个参数加起来就是水平的拖延时间。
这个是开源初始的水平拖延时间 =  220 +40 +60 = 320 但是我们这个屏幕的水平拖延时间是  2142 - 1920 = 222与320不相等耶,如果不改的话,打一张图的时间会太快,到时肯定会出现波纹或者轻微闪屏,肯定改一下好啦 怎么改?只要
hback-porch + hfront-porch +  hsync-len  = 222 就可以了,随便你怎么搭配 比如
100 + 100 +  22
hback-porch = <100>;  hfront-porch = <100>;  hsync-len = <22>;
随便一个组合的数据,只要加起来222就行了,你也可以  50  50  122垂直的拖延时间类似!然后 
clock-frequency = <65000000>; 这个频率再换一下就可以了,141.4M
改成
clock-frequency = <141400000>;
最后
display-timings {107			native-mode = <&lvds_timing0>;108			lvds_timing0: hsd100pxn1 {109				clock-frequency = <141400000>;110				hactive = <1920>;111				vactive = <1080>;112				hback-porch = <100>;113				hfront-porch = <100>;114				vback-porch = <2>;115				vfront-porch = <9>;116				hsync-len = <20>;117				vsync-len = <9>;118				de-active = <1>;119				pixelclk-active = <1>;120			};121		};
de-active = <1>;
pixelclk-active = <1>;
这些参数不用管,一般没出现什么大问题,或者颜色图需要反转的时候再调。
那么这个  设置的 fps 就 =141400000 / 2142 /1100 = 60.011HZ一般都是60HZ 的 ,android支持嘛,不过有时自己需要调低或者调高一点,有时使用两个屏幕时有干扰,实际的频率没那么高。还有就是 看看LCD使能脚 位选脚, 看看有没有复用,看看pinctrl的dtsi 有没有同时打开嘛。或者你看到漆黑的一片就看看背光,/drivers/video/backlight/一般都是pwm驱动没有打开,或者是管脚又被复用了,经常都是复用的问题用示波器借 BL背光引脚有没有pwm或者高电平输出一般是先看背光,然后再调打点频率,还有其它的一些怪问题就看看 fb 的节点/drivers/video/fbdev/core/fbmem.c 在kernel加载的时候一开始就创建了fb的节点,而且很早呢,subsys_initcall (fbmem_init) ;
#define subsys_initcall(fn)		__define_initcall(fn, 4)
优先级为 4 节点在 sys/class/fb  各种都可以用各种 echo  cat 命令来调试。忘了说了,还有mipi 的频率有时也要算一下  =  DCLK *24 / 4 24是你支持的24位图显示,4是mipi有四条线传输 ,最后bit_clk = DCLK * 6 rockchip,dsi_hs_clk  =  DCLK * 6 如果是其他芯片转的话会上下调一下,一般都是加减30 ,比如 mipi 转edp 用了外接的芯片就还需另外测试。不过一般都是在这个数据的上下波动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: