LCD 调试问题总结

来源:互联网 发布:进销存系统数据库设计 编辑:程序博客网 时间:2024/05/17 07:57

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时候背光亮之前的延时相应的加长一点。


    这里记录的是在TFT类型的LCD驱动的调试中我所遇到过的一些问题,因为具体硬件平台和环境不同,有些问题,现象和原因可能不一定与你的实际情况相同,仅供参考。 

无法正确完成初始化

  • 症状
    往LCD的串行总线发送初始化数据后,LCD模块没有任何反应
  • 分析
    通常在嵌入式领域中使用的中小型LCD模组都会需要在上电后进行初始化设置,而后才能正常工作。常见的通讯接口有CPU接口和串行总线接口,而串行总线接口又以SPI接口居多。
 
    导致无法初始化的原因通常是两方面:
    
    没有遵循正确的上电RESET流程
    SPI通讯控制不符合LCD模组驱动芯片SPEC的要求
 
    造成后者的原因也是多种多样的
    
    首先,虽然都是SPI接口,但是,不同的LCD模组,在控制信号的要求上往往都会有细小的不同,有时候,CPU的SPI接口甚至都无法产生LCD模组所需要的特定波形时序。有些LCD模组可能还会有特定的使能信号线控制SPI接口的工作与否。
    其次,多数LCD驱动芯片其实都是具有读取寄存器和ID号的功能的,但是很多模组在封装的时候往往没有把芯片SPI接口的SDO信号线引出来,导致无法通过读取寄存器和ID号的方式判断SPI总线的通讯协议是否正确。增大了调试的难度。
  • 解决
    首先当然是要保证上电顺寻,RESET,使能信号等的正确,而后,如果CPU所提供的SPI接口无法配置到完全和LCD模组要求的时序波形相同,可以采用GPIO口模拟SPI信号的方式来初始化LCD,毕竟初始化地工作量并不多,也不需要经常做,所以通过GPIO模拟,对CPU占用率几乎没有影响。
    
    最后,如果能够将SDO口引出,尽量引出,能给前期调试带来很大方便,也有利于将来自动判断LCD类型,根据不通模组自动加载不同驱动。

图像错位

  • 症状
    常见的症状如图像左右位移几个像素,上方或下方有一条彩色条纹,或黑色条纹等等
  • 分析
    毫无疑问,这种现象肯定是初始化参数设置不对,位置错位,和场同步型号或行同步信号有关,不外乎就是LCD模组和CPU上的LCD控制器的行场同步信号的宽度,前后延迟时间,极性等属性的匹配。这其中,对于图像错位,又以行场前后延迟时间的不匹配可能性最高。
 
    另外,这种情况,通常错位的像素数不会太大,如果出现错位了1/2屏之类的情况,通常就是由别的原因照成的了。
  • 解决
    精确适配行场信号,有时候,有些LCD的行场信号的设置还和LCD驱动芯片的部分电压参数的取值设置相关。要协同修改。

工作一段时间后,部分屏幕数据显示错位,花屏

  • 症状
    某个型号的LCD使用一段时间后,屏幕下方会出现部分屏幕上方的数据类似隔行的叠加显示出来,而且随着时间的推移,从开始底部的几行慢慢向上拓展越来越多,越来越严重。有时候很长一段时间不用,突然又好了。
  • 分析
    不确定的问题最麻烦了,偏色,错位数据混乱花屏等,常常可能是LCD的connector接触的问题。但是这次,反复确认connector的良好接触也无济于事。经过仔细调试,最终发现这次的问题和硬件的初始化顺序有关,需要先将CPU这端的LCD控制器相关的寄存器设置正常以后,再初始化LCD模块内部的寄存器,否则,当LCD屏初始化完成开始工作后,再修改CPU端的控制寄存器,会对这个型号的LCD模块照成不可预知的影响。这个例子中,麻烦的就是这个影响并没有马上体现出来,而是在经过一段时间后才出现,这点比较奇怪。
  • 解决
    修改初始化顺序后,问题再也没有出现。


初始化完成后,显示数据无法写入LCD

  • 症状
    某厂商的一款LCD驱动芯片,初始化完成后无法写入显示数据
  • 分析
    仔细研究spec,发现在RGB接口上写入数据前,需要先通过串行接口在某寄存器地址上写入一特殊值,但是实际上初始化代码中已经包含了该寄存器的设置,即使写入该值以后RGB数据口上依然写入不了数据。最后发现,对该寄存器修改以后,不能再写其它的寄存器,否则就会出现上诉问题。
 
    理论上通讯串口和RGB数据接口是不应该互相影响的,而且其它厂商的LCD驱动芯片根本就不存在这种需要先写入特殊指令的问题,只能说这款芯片真的很特殊了。
  • 解决
    把对该寄存器的设置放在初始化代码的最后。


大范围的图像错位,叠加,重复等

  • 症状
    通常的症状包括一幅图像在LCD上显示时显示为水平或垂直方向的重复,同时可能伴随着这些方向上的压缩,抽行等现象。
  • 分析
    这种现象通常是由于用于LCD数据传输的DMA控制器的参数设置不对造成的。
 
    但是有一次,我遇上一个很奇怪的现象,某个型号的LCD驱动芯片,上半部分显示的图像是并排的两幅缩小的图像,而下半部分,是上一次初始化的时候送进去的图像的下半部分。最后,在系统关闭前的一瞬间,图像能够正确显示。
    首先,不像时序的问题,因为这种现象和场扫描,行扫描信号不匹配所会表现的现象图像偏移翻滚错位等现象完全不吻合。
    其次,该款芯片提供了抽样等功能,但是仔细察看程序也没有错误的设置这些参数,而且,抽样应该是发生在数据从CPU到LCD缓存的传输存储过程中,该例中缓存中的数据应该是正确无误的,所以也排除这方面的设置错误的可能
    最终发现在该驱动芯片工作在RGB接口模式的时候,有一个设置高速写入模式的寄存器设置需要修改,厂家提供的初始化代码里没有设置这个寄存器,厂家自己测试也能正常工作,应该是因为用于驱动LCD的硬件平台不同,在时序和时钟频率上有一些区别。
  • 解决
    仔细计算DMA传输参数,通常都能解决问题。其它问题要具体情况具体分析解决。
 

图像偏灰,颜色细节丢失等等

  • 症状
    通常的症状包括图像颜色的细节变化丢失,整体图像偏暗偏灰等情况。
  • 分析
    一般来说,LCD模块内部都有一系列的寄存器用于控制各个灰阶的电压水平,也会有一些寄存器用来控制整体的电压偏置范围。调节这些寄存器也就是调节我们所谓的颜色饱和度,对比度等。这些寄存器相对容易调整,但对图像颜色细节影响最大的,通常是Gamma曲线相关的寄存器,实际就是通过控制前面所说的各个灰阶的偏置电压水平来实现。
  • 解决
    对于Gamma曲线,要计算Gamma曲线相关采样点上的数值,设置相应的寄存器,有一点需要注意,通常理论计算的Gamma曲线参数并不能和实际LCD模块的实际显示效果很好的匹配,需要做一些局部的调整,但是要保证整体曲线的平滑,否则可能会出现颜色怪异的跳变的现象。
2 0