驱动调试常见问题_LCD

Posted 彩色蚂蚁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了驱动调试常见问题_LCD相关的知识,希望对你有一定的参考价值。

 

作者:刘旭晖 Raymond转载请注明出处

Emailcolorant@163.com

BLOGhttp://blog.csdn.net/colorant/

主页:http://sites.google.com/site/rgbbones/

 

    这里记录的是在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模块的实际显示效果很好的匹配,需要做一些局部的调整,但是要保证整体曲线的平滑,否则可能会出现颜色怪异的跳变的现象。

以上是关于驱动调试常见问题_LCD的主要内容,如果未能解决你的问题,请参考以下文章

一款特殊的LCD屏幕驱动调试

一款特殊的LCD屏幕驱动调试

一款特殊的LCD屏幕驱动调试

Linux MIPI DSI驱动调试笔记-LCD时序参数配置

LCD屏背光驱动调试心得---血的教训

Linux MIPI DSI LCD设备驱动开发调试细节学习笔记