关于调试lcd

刚入门学习调试LCD驱动,在同事的教导下一步步学习LCD驱动调试:

 (R61581)

R_lcd驱动调试比较简单,现将具体的调试过程,及调试过程中出现的问题记载如下,已备参考。

 

1,首先是将项目ixxxx代码拉下,使用命令:

    ssh git@192.x.x.x 找到代码后拉回本地,使用命令:git clonegit@192.x.x.x:pXxxxx.git  克隆远程分支;然后使用命令: git branch -a  查看分支,再创建自己的分支:使用命令: git checkout -b ixxx origin/ixxx;创建了一个本地分支;在本地分支上修改就可以了。

2,修改以后如何提交,具体过程如下:

   git status | more  查看哪些文件被修改过

   git  add /被修改文件的全路径

   git commit -am "备注"

   git pull --rebase

   git push origin xxxxx 推到远程分支上 

   gitk 确认

 

3具体的调试过程中出现的问题:

1) 首先就是修改文件以后出现各种错误,慢慢细心修改,需要修改的有: 1、分辨率;2、查看GPIO口是否有改动,3先修改OBM里的文件,这里面是用开开机时调用,主要是logo.c,logo.h和屏的初始化代码等。 在调试过程中主要出现了两个问题: 1 是GPIO口有改动,但是硬件原理图上却没有显示,修改了无数遍,就是 只有背光没有别的。最后在公司高手的帮助下,解决该问题。2 是上面问题解决以后,出现了花屏的问题,首先确定是初始化代码给错,改了各个地方就是不对,最后发现在B4H下的PM位中是用来确定是什么接口,其中 DPI对应的是RGB接口,选择这个模式即可出现了开机画面 长舒一口气。

2) 开机画面出现后开始修改kernel里面的内容,主要是屏的.c文件,makefile,ttc等。修改的也是一些参数问题,初始化代码等,成功后即可开机进入kernel中

3) 由于所用的屏幕是320x480的 ,而该分支以前是高分辨率的 在 vendor/marvell/dkb/dkb.mk  有这样一串代码

+#Add for support High dpi

+PRODUCT_PROPERTY_OVERRIDES += \

+           persist.service.pp.enable = 1 \

+ro.sf.lcd_density = 240

+CUSTOM_LOCALES += hdpi mdpi 

 

该代码作用以前说过 主要是

1,launcher 无法加载第三方的高清icon,效果很模糊。

2,第三方应用运行的效果对比p1000差太多,完全不是pad的布局。

 

而本屏的分辨率本来就很小,加上这串代码以后反而起到了反作用, 注释掉以后 make 

 4): lcd读id的问题,在sdk中 看到device code read(BFH)中有lcd屏的ID可以读取,利用gpio_read_form_lcd() 和gpio_spi_sent_to_lcd()来读取该寄存器数据,得到lcd_id的读数,LCD_ID的读取可以在adb shell 中看到,进入,add shell 以后命令: cat  /proc/cmdline查看就可以看见lcd屏的ID号了。

5): lcd 硬件图要注意的地方是:首先看GPIO口有没有接错,注意的是LCD上的out,in管脚要分别对应芯片上的in,out管脚。

 

继续补充:

6): t调试出现LCD屏底部一块白色横条,左侧从上到下一小块闪动的条状竖纹分布,初步以为是margin的原因,修改了很多不对,最后发现时时钟刷新率太高,导致上述的原因。

7): lcd调试出现字体变大,文字下移到底部等问题,原因是由于初始化代码中 在初始化分辨率的时候没有初始化正确,

8):文字方向问题一般都是由于相关寄存器扫描方向,输出方向等没有设置好(B6H,ILI9486)

9): ILI9486的ID在D3H中。

9486LCD驱动调试出现的问题比较多,一:在obm中出现的问题有:

      1、时钟频率的问题,这个时钟频率比较重要,首先就是要考虑的问题。

      2、lcd_bmp_log.c中需要读取lcd的id值,这个可以参考spk中的d3h reg。

    3、成功出现图片之后,开机时会产生一个白色的闪屏,主要原因是由于图片还没有显示之前背光已经打开了,解决的办法由多种,可以延迟背光时间的开始,或者在log没出现之前打入一帧全黑的图片。

二 在kernel中出现了较大的问题,主要是进入了kernel之后,屏幕产生了抖动现象,左侧出现梳妆条纹,不停的闪动,下面出现了白色的块状斑纹。浪费了我一个星期才找到问题的来源:

主要原因是9486所需要的时钟频率和1581,在9486中的sclk_div的地址要设置成0x4000001f, 这个问题的具体原因还有待与细节的解决。

 

 

 

10) lcd调试过程中出现个问题: 连续按两次power键,会出现短暂的白屏现象。这个问题比较麻烦,查看log发现流程是对的,即第一次按power时 开lcd、开背光。第二次按power键时关背光,关lcd。出现了白屏现象说明,此时背光没关,但是lcd关了。查看代码分别在:

1) kernel/kernel/driver/video/pxa168f.c

2)     kernel/kernel/arch/arm/mach-mmp/onboard/lcd_Rxxx.c   lcd开关

3)      kernel/kernel/drivers/video/backlight/88pm860x_bl.c    背光开关

在背光suspend()函数最后添加关背光代码,解决问题。

关背光代码: mutexl_lock(&bn_lock)

                          gpio_direction_output(gpio51_bl,0)

                           mdelay(3)

                           mutex_unlock(&bn_lock)

问题理解:

          1、按开机关机键的时候,系统会建立两个list,suspend_list,resume_list,lcd_suspend,lcd_resume,backlight_suspend,backlight_resume等都会被插入这个list,系统会在按power键之后遍历这个list,根据按键之后的状态时要开机还是关机,来选择遍历哪个list,注意的是,在resume_List中的_func_和suspend_list中的_func_

是顺序相反的。这样在运行resume_list是遍历的顺序是lcd_resume,backlight_resume。再按power之后,开始遍历suspend_list中的顺序为: backlight_suspend,lcd_suspend。

            2、在连续按两次power之后首先会出现一次屏幕的画面,然后跳转到白屏现象,分析应该是在按第二次power之后,本来因该是先关背光然后再开始关屏幕,但是在关背光到一半的时候转到关lcd,而lcd也没有关闭完全,但是log之后发现log的流程是正确的,为什么会出现白屏现象还不明确。

            3、

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值