高通安卓调试LCD几方面总结(二)
来源:互联网 发布:windows专业版激活工具 编辑:程序博客网 时间:2024/05/16 02:24
最近工作太忙了,而且经常出差,所以有一个多月没有来得及更新博客了,唉,之前一个项目LCD也遇到几个棘手的问题,压力山大。
闲话少说,直接进入正题了,在上一篇里写了高通平台android2.3里的kernel和bootloader(LK)里LCD驱动的移植,这一篇主要写一下在4.0里LCD驱动的移植。
(1) kernel
高通的android4.0和2.3在kernel里的LCD驱动是有区别的,主要在于4.0里少了latedisplay.c这个文件。这里我以renesas公司的r61408这颗IC来介绍。我使用的是RGB565的接口,由于kernel里有高通公司提供的其它家IC的代码,我同样是以truly的来作为参考的,代码的框架不变。首先就是在kernel\drivers\video\msm下以truly的代码为模板,创建一个名为lcdc_r61408.c的文件,文件里的内容照着truly的来做。
这里先来把Makefile和Kconfig文件修改好。在kernel\drivers\video\msm文件夹下的Makefile里添加:
在此目录下打开Kconfig文件,在里面添加:
还要在kernel\arch\arm\configs目录下的board config文件里添加:
在lcdc_r61408.c文件里主要就是要写向LCD用SPI发指令和发数据的函数,我们的这个项目里使用的是GPIO口模拟的SPI总线,所以SPI的时序一定要写正确,R61408在用SPI发指令的时候data和command是在写8bit数据前通过SDO口的高和低来判别的,但是有些LCD的IC,比如NT35510,需要在发8bit数据之前要发送R/W,H/L,D/C几个信号来区别接下来发的数据表示什么。所以一定要根据所选用的LCD的IC的spec严格的来写SPI的时序,否则有可能造成LCD的初始化都不成功。
在kernel里,LCD的驱动的调用的流程是:
在关闭LCD的时候,kernel里驱动调用流程刚好是和上面反向的。
这里有一点,因为我们使用的背光是通过PMIC的一个1号脚来控制的,使用PMIC管脚产生PWM的使用方法是,在board-display.c里初始化GPIO的函数里,加上这么一句:
然后在board-display.c里加上如下配置:
最后在lcdc_renesas_r61408.c的pmic_backlight这个函数指针就可以实现背光的控制和调节。
(2) bootloader(lk)
和上一篇一样,首先要在目录/bootable/bootloader/lk/target/$(Projec)下更改lcd的makefile文件rules.mk,在rules.mk下添加:
代码的流程可以跟着truly的例子来做,这里简单的介绍一下流程:
LCDC接口的LCD驱动在LK里相对MIPI的来说流程比较简单,SPI的时序参考KERNEL里的一般就没有什么问题的。
到这里,LCDC和MIPI的两种LCD在高通平台上的驱动也算是写完了,小弟也正处在学习的过程当中,写得不好。我再写一下在调试LCDC接口的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)使用irfanview软件显示cat /dev/graphics/fb0出来的raw数据,注意要正确设置分辨率及格式,否则显示花屏 iii)如果adb连接正常,可以使用豌豆莢等软件,查看fb中的数据是否正常
通过以上三种途径,如果确认fb中的数据正常显示,则很可能为lcd初始化代码的问题,或者clk极性的问题,如果fb数据不正常,则可能为lcd控制寄存器配置不正常导致
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(二)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结(一)
- 高通安卓调试LCD几方面总结
- 高通安卓调试LCD几方面总结
- 高通安卓调试LCD几方面总结
- 高通安卓调试LCD几方面总结
- 漫谈LCD调试(二)
- LCD 调试总结
- 【CSAPP】《深入了解计算机系统》笔记-第三章 程序的机器级表现
- adb命令模拟按键事件 KeyCode
- CCF 201604-1
- grunt 压缩合并,压缩css和js
- 2017.03.13回顾
- 高通安卓调试LCD几方面总结(二)
- 非托管com组件访问WebService
- 后端技术杂谈
- SVM -支持向量机原理详解与实践之四
- [IOS]对视频、音频播放器添加缓冲进度条
- 解决公务车Bug:加油管理中导入加油费用时,提示:操作失败
- 养成1分钟速重构的敏捷开发习惯
- 滚动数组
- 希尔排序实现(Java)