lcd 调试经验

    4.2.1开机时,在开机logo和开机动画之间会闪一下屏

         现象分析:开机时,在kernel起来前是LK在支持LCD的显示,kernel起来后会关掉LK那边的电源和clk,然后打开

         kernel这边的电源和clk等,这个时候如果点亮背光的接口的调用比LCD初始化接口的调用早,就会引起屏幕闪烁一下的现象

         解决方法:调整背光接口和LCD初始化接口的调用顺序,在需要的地方加上适当的延时

 

    4.2.2做LCD兼容功能时,读取到的ADC值老是有波动

            问题定位:因为LK从共享内存中读取到的ADC值是modem那边读取后存到共享内存里面的,因此首先检查共享内存的配置和使用是否正常

            (1) 若共享内存的设置和读取没有问题

          现象分析:说明不是共享内存传值是OK的,那么应该是ADC读取接口的问题,有波动说明可以读取到数据但是不准确,那么应该是adc通道的初始化没有完成或者不正确引起的;

             解决方法:将adc通道的初始化代码放到比较靠前的地方,保证在调用adc接口读取adc值时,adc通道已经被正确的初始化了;

            (2) 若共享内存的设置和读取有问题

          解决方法:检查共享内存的申请和使用,注意,目前高通平台支持三个id可以被客户使用,分别是vendor0,vendor1和vendor2;

   

    4.2.3修改开机logo后,系统起不来,串口没有任何log输出

             现象分析:系统启动时,会给变量分配内存,若开机logo太大,有可能在分配开机logo的内存空间时将系统的

某些重要内存区域覆盖掉,这样就会造成系统无法启动了

             解决方法:修改开机logo时,要控制转换后logo数组的大小,使数组尽可能的小,这样还可以节省刷logo的时间,如果logo的背景是黑色的,则需要要显示logo的彩色区域就可以了;

 

    4.2.4开机logo和开机动画之间有一段较长的黑屏时间

          现象分析:kernel启动时,会关掉所有的clk,然后重新初始化需要使用的clk,Mdp相关的clk会在kernel启动时被关掉,而在mdp初始化时才被打开,因此存在一段空白期;

             解决方法:在kernel中对mdp相关的clk进行设置,使其不被关闭;

 

调试小结:

1)调试lcd背光,背光主要分为PMIC自带的和单独的DCDC,如果为PMIC自带的背光,一般平台厂商已经做好,直接调用接口即可,如果为单独的DCDC驱动,则需要用GPIO控制DCDC的EN端

2)确认lcd的模拟电,io电是否正常

3)根据lcd的分辨率,RGB/CPU/MIPI等不同的接口,配置控制寄存器接口

4)根据lcd spec配置PCLK的频率,配置PCLK,VSYNC,HSYNC,DE等控制线的极性

5)使用示波器测试所有clk的波形,确认频率,极性是否符合要求

6)使用示波器测试data线,看是否有数据输出,bpp的设置是否正确

7)如果lcd需要初始化,配置spi的接口,一般分为cpu自带的spi控制器,和gpio模拟的spi。

8)根据lcd spec中的初始化代码进行lcd的初始化

9)用示波器测量lcd的spi clk及数据线,确认是否正常输出

10)正常情况下,此时lcd应该可以点亮。如果没有点亮,按照上述步骤1到9,逐项进行检查测试,重点检查第5项,clk的极性

11)如果lcd点亮,但是花屏。则需要先确认数据格式是否正确,然后确认fb里的数据是否正常,有以下几种方法确认fb里的数据

i)cat /dev/graphics/fb0 > /sdcard/fb0,然后将/sdcard/fb0 >到另一台相同分辨率及相同格式的手机上,看图片显示是否正常

ii)使用irfanview软件显示cat /dev/graphics/fb0出来的raw数据,注意要正确设置分辨率及格式,否则显示花屏

iii)如果adb连接正常,可以使用豌豆莢等软件,查看fb中的数据是否正常

通过以上途径,如果确认fb中的数据正常显示,则很可能为lcd初始化代码的问题,或者clk极性的问题,如果fb数据不正常,则可能为lcd控制寄存器配置不正常导致

 

小结二

其实点亮lcd很简单必须保证以后几个步骤正确:

1:确认Lcd信息所在文件被编译进去,并且lcd 和board name里面注册一质,倘若这部正确,那么log里面应该有对应分辨率的一段framebuffer同时调到相对应的power_on函数。对于lcdc panel对应文件在lcdc_xx.c,对于mipi panel对应文件在mipi_xx.c(下序列操作)和mipi_xxxx.c(timing pll clk等初始化操作)。

2:仔细检查上电同时测量,同时将28根rgb interface对应gpio设为lcdc func。对于传统的lcd不需要RST操作只需拉高即可,对于mipi和需要下code的RGB panel需要RST高低高操作,这样code才生效。注意一般sleep out(0x11)和display on(0x29)之间需要mdelay(100)左右,貌似这个对于大部分panel是必须的。

3:最后还要确认是否有framebuffer输出,要是改动了display这块的clk很有可能没有buffer输出的,可以通过cat /dev/graphyics/fb0查看有没有输出字符。曾经调试开机logo连续显示时遇到过好几次没有buffer输出导致kernel卡住,屏也不亮按power键没有反映的情况。

4:如果以上操作正常同时序列正确,那么屏幕应该可以点亮。对于遇到的有以下显示问题:

a:屏幕呈花屏状态,说明lcd初始化成功,但是没有rgb刷过来。认真检查之后发现pclk时序不对,由于是新的平台所以设对以后,以后的屏就好办了。

b:RGB pane内容l闪烁通常由pclk设置不对导致还有可能与porch有关。通常wvga 16bit的panel使用24.5M的PCLK,qhd的24bit panel 30M PCLK。至于porch我们可以多替换几组试试或者找FAE发个可以点亮的。一般屏对porch要求不高,几乎都可以点亮的。

c:FPC没有贴好也有可能导致屏幕不亮。

d:rest有问题,一定仔细测量使用示波器看出波形,比如lk下面有时可能就没有控制对。

e:许多kernel里面实现的但是在lk下面由于代码比较少,就不好实现,比如pm上电,vibrator等等,其实在kernel里面归根也是写对应寄存器的,很简单,最好使的办法就是在kernel里面读出来,在在lk里面写进去,这样就好办了。8x平台许多上电我就是这样做的,还有mipi的dsi相关设置clk的REG。

f:屏幕经常唤醒只显示灰色底面,最后查明寄存器没有使能外部升压电路。

g:唤醒屏幕闪白光问题,说白了是背光早亮了,很有可能是下序列mdelay太久,改小点就没有这个问题了。根本原因屏幕初始化序列下慢了。亲身经历的。

h:lcd唤醒闪屏问题,这个是由于每次重新RST下序列过程delay久了导致,适当减少delay时间即可。

i:用厂商给的序列要么屏点不亮要么界面有水波纹,这些通常都是rgb interface polarity导致,需要调整pclk hsync vsync de极性使之符合平台极性。

j:结束开机logo至android动画出现之间好多屏会出现闪屏或者闪白光的情况。原因:在这个时间点kernel会会对屏再次初始化,我们可以软件上屏蔽第一次初始化动作从而解决。

你可能感兴趣的:(kernel,dispaly)