你好,游客 登录 注册 搜索
背景:
阅读新闻

Android LCD调试实例流程

[日期:2013-08-10] 来源:Linux社区  作者:fantasyhujian [字体: ]

调试前的参考文档:

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调试注意事项 tips:

1 lcd接口的数据位数一定要匹对,否则会出现花屏。 

2 TE_ON根据平台需要打开,否则会出现开机界面卡掉,一直停在logo区。 

3 lcd配置一定要正确,在u-boot(开机logo需要)和kernel配置都要注意,整个工程配置更加需要注意。 

4.各种主要的lcd寄存器需要主要设置正确,主要包括各种电压配置,data format,interfacepixel 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即可,也顺利搞定!

推荐阅读:

S3C6410裸机驱动5'TFT LCD  http://www.linuxidc.com/Linux/2013-03/81957.htm

AT91SAM9260下的U-Boot移植和添加LCD驱动支持 http://www.linuxidc.com/Linux/2013-01/78473.htm

linux-3.6.6重新移植LCD及触摸屏驱动 http://www.linuxidc.com/Linux/2012-12/75487.htm

Linux LCD驱动分析 http://www.linuxidc.com/Linux/2012-07/64857.htm

更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11

linux
相关资讯       Android实例  Android调试 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款