Android LCD调试实例流程
调试前的参考文档:
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)使用i易做图nview软件显示cat /dev/graphics/fb0出来的raw数据,注意要正确设置分辨率及格式,否则显示花屏 iii)如果adb连接正常,可以使用豌豆莢等软件,查看fb中的数据是否正常
通过以上三种途径,如果确认fb中的数据正常显示,则很可能为lcd初始化代码的问题,或者clk极性的问题,如果fb数据不正常,则可能为lcd控制寄存器配置不正常导致。
LCD调试注意事项 tips:
1 lcd接口的数据位数一定要匹对,否则会出现花屏。
2 TE_ON根据平台需要打开,否则会出现开机界面卡掉,一直停在logo区。
3 lcd配置一定要正确,在u-boot(开机logo需要)和kernel配置都要注意,整个工程配置更加需要注意。
4.各种主要的lcd寄存器需要主要设置正确,主要包括各种电压配置,data format,inte易做图cepixel format,te_on,madctl。。。否则会出现各种问题。
5. Pix clock是否在规定的范围内。
6. Pclk是否极性正确。上升沿还是下降沿。
7. 变频引起的闪屏问题。可以通过锁定频率来试验是否是变频引起。
上周调试**-**的lcd,将厂商提供的初始化代码加入到工程中,简单修改后,然后修改z7_wvga_hs_af.mak中lcd模组配置,编译生成烧写文件,烧如到主板,出现花屏,且停留在开机logo处…第一次调屏就这么的纠结…
经老大初步检查,lcd屏幕接口数据位数不对,而且TE_ON必须打开,应该改为十六位。。。
修改源码,编译生成烧写文件,烧机….
问题依旧….
仔细检查源码,TE_ON是否打开,VCOM设置,MADCTL设置是否正常,仔细阅读其提供的官方LCD DataSheet,开始怀疑各种设置电压是否正确…
重复修改源码,编译,烧机,验证的步骤,情况还是依旧…
到晚上还是没搞定,思考如何获取u-boot驱动log,分析一下,或许可以找到答案,于是焊接RX(绿色),TX(白色),GND(黑色),在ubuntu下正确设置minicom获取u-boot启动log…
[ 18.162000] registered taskstats version 1
[ 18.166000] rtc-sprd rtc-sprd.0: settingsystem clock to 2013-01-01 00:08:00 UTC (1356998880)
[ 18.177000] serial_open tty addr =0xcf36f800, filp = 0xcf0b7440, port = 0xc4ac2d08
[ 18.182000] Freeing init memory: 144K
[ 18.209000] Failed to execute /init
[ 18.209000] Failed to execute /init. Attempting defaults...
[ 18.219000] Kernel panic - not syncing: Noinit found. Try passing init= option tokernel. See Linux Documentation/init.txt for guidance.
[ 18.231000] [<c45330e0>](unwind_backtrace+0x0/0xfc) from [<c48e7714>] (panic+0x60/0xe4)
[ 18.231000] [<c48e7714>](panic+0x60/0xe4) from [<c452c514>] (init_post+0x88/0xdc)
[ 18.246000] [<c452c514>](init_post+0x88/0xdc) from [<c4508414>] (kernel_init+0x124/0x168)
[ 18.246000] unwind: Unknown symbol addressc4508414
[ 18.250000] unwind: Index not found c4508414
经老大分析发现是RAM各种地址偏移不正常,仔细发现z7_wvga_hs_af.mak中配置平台为4+4,而这台机器是4+2平台,各种偏移不正常导致kernel死掉,修改编译,烧机,发现开机log正常了,系统启动正常。
….
曲折而又突然,lcd调试就基本成功了!
,经测试发现帧率偏大,修改Frame Rate寄存器,这个让我在DataSheet中找了很久,居然就是我之前早看到过的那个寄存器,纠结,修改正常后,经老大发现有细微横纹出现,修改VCOM即可,也顺利搞定!
补充:移动开发 , Android ,