LCD点不亮——无法正确完成初始化:
LCD点不亮问题的原因有很多,但出现这个问题后,首先应该判断LCD是否正确完成初始化。最简单的判断方法就是测量LCM的FPC上的电容两端电压。(具体的值可以和模组供应商沟通)
如果经过上一步,检测出没有正确完成初始化,接下来首先和模组、IC一起确认初始化代码是否有问题。
确认好代码以后还是点不亮,说明是模组无法进行初始化,而不是初始化出错。重新理一遍流程:上电->初始化。上电这个步骤一般不会有问题,如果没有遵循正确的上电时序和RESET的流程的话也比较好排查。
那么还能存在哪些问题呢?
在上电成功以后,BB会通过LCD串行总线发送LCD的初始化数据,如果这个环节出现问题,那肯定初始化不能成功。在这个过程中能出现问题的就只有SPI的通讯控制这一块了,(通常LCD的通讯接口有CPU和串行总线接口等,手机中较常用的就是串行总线接口,串行总线接口又以SPI接口居多),其实造成SPI通讯不符合LCD模组驱动芯片的要求的原因也是多种多样的:
1、 虽然都是SPI接口,但是,不同的LCD模组,在控制信号的要求上往往都会有细小的不同,有时候,CPU的SPI接口甚至都无法产生LCD模组所要求的特定波形时序。有些LCD模组可能还会有特定的势能信号来控制SPI接口工作与否。
2、 多数LCD驱动芯片其实都是具有读取寄存器和ID号的功能的,但是很多模组在封装的时候往往没有吧芯片的SPI接口的SDO信号线引出来。导致无法通过读取寄存器和ID的方式来判断SPI总线上的通信协议是否正确。
那么,如果确定了是SPI通讯控制不满足要求的话,就可以通过修改SPI的读写控制来适配LCD模组IC的要求。
如果CPU所提供SPI接口实在没有办法配置到完全和LCD模组要求的时序波形相同,可以采用CPIO口模拟SPI信号的方式来初始化LCD。
最后,如果模组能够将SDO引出就尽量引出,不仅方便调试,而且可以很方便的做不同IC的LCD自适应的兼容。
初始化成功,LCD点不亮
有的时候LCD点不亮,通过上面讲的方法,测量LCM的FPC上的电容的电压确认初始化正常。即有时候初始化已经成功了,但是LCD还是没有被点亮。这个时候就要仔细的对照LCD模组的规格书来检查了,是否是一些非常规的原因,例如串口和RGB数据接口相互影响或者别的什么原因。
见过别人讲的一个案例:某厂商的一款LCD驱动芯片,初始化成功了以后LCD还是点不亮,经查发现,在RGB接口上写入数据前,要通过串口对某一寄存器写入特殊值,但实际上在初始化的代码中已经包含了对该寄存器写值,即使写入这一特殊值以后RGB数据口上仍然写入不了数据。最后发现,对暖气修改以后,不能再写其它的寄存器,否则就会出现问题。当然这也是极个别的现象,不过当你在调试过程中遇到此类问题无法解决的时候,不妨在这个方向上进行检查。
LCD图像错位
LCD显示在水平方向发生位移,或者在上面或底部有一条几个像素的彩色、白色或黑色条纹。一般来说,出现这种情况,都是因为初始化参数设置不对,和行同步或者场同步信号有关。
显示位置有位移或者错位,就检查LCD模组和CPU上的LCD控制器的行同步与场同步信号的宽度、前后延时、极性的匹配。最可能的就是回扫的前后延时时间不匹配。
另外,这种情况通常错位不会很多,如果出现错位了一半的图像之类的情况,通常就是别的原因造成的了。而且有时候,有的LCD的行信号、场信号的设置还和LCD驱动芯片的部分电压参数的取值设置有关。
LCD大片图片错位、叠加、重复
LCD显示上大范围的图像出现错位、叠加或者重复,出现这种情况一般不会是行同步或者场同步信号的延时引起的,基本可以排除这方面的影响。可以间检查下抽样等功能的参数是否正常,还有就是因为LCD的硬件平台不同,而在时序或者时钟频率上存在差异引起的。碰见这种情况首先应该做的就是先仔细计算DMA传输参数。其它的情况要具体问题具体分析。
UBOOT过程中LCD不显示
开机的时候在UBOOT过程中LOGO不显示,只有背光亮。这种情况出现的时候如果其它都正常,不妨检查下FLASH的配置。我碰见这个问题的原因最后是FLASH的MCP没有设置正确。FLASH换小以后MCP只有CS0这一片封装,而在配置文件里还是沿用以前的CS0和CS1两片的配置,从而可能会引起各种意想不到的问题。
开机LCD亮的瞬间有花屏
出现这种问题,一般都是由于LCD在初始化完成后刷新第一副图像未完全准备好的时候背光已经亮了。解决的办法就是在UBOOT时候背光亮之前的延时相应的加长一点。