现在的位置: 首页 > 综合 > 正文

LCD 细节调整的一点体会

2013年07月18日 ⁄ 综合 ⁄ 共 1391字 ⁄ 字号 评论关闭

     这次调整背光和初始化加速真是让咱自尊心受挫啊,不过意气激昂的时候浇盆冷水也算是件好事,也许是经验不足的问题,但更多的还是自己看问题的眼光比较狭窄啊。

     首先说背光调整的问题,那真是九曲回肠,一曲悲歌啊。任何细节都是有原因的,出现问题的时候没有想原因,或者肤浅得自认为的原因,然后去瞎调整,结果总是不对,然后就这样陷入了while(1)循环。很明显白屏是因为suspend和上层的背光调整不同步造成的,找到了原因然后就执着在这个点,反而怎么处理都无法同步,其实眼睛放开一点就会发现出现问题的地方不一定要在出现问题的地方解决,通过其他地方的同步也能解决这个问题。然后在背光变成0的时候直接将初始化标志位置0就解决了问题,开始在上层和suspend之间添加各种标志位也无法实现同步,徘徊了那么长时间结果一个表达式解决了问题。。。

      这个初始化加速的过程可能凸现了自己的经验不足,但更多的还是粗心,不严谨。还有一个也是一样的,总是眼神被局限了一个部分看问题,没有想过去整体分析,某个BUG并不是它本身的BUG,而是其他隐藏在其他部分的问题造成了现在的问题。还有一个问题就是不能迷信,奇怪很不和常理的情况一般是没有道理的,现象的奇怪肯定是本身或者其他地方的问题造成了这部分问题的奇怪。所以不要迷信,任何现象都是有原因的,局部无法找到问题就要整体来看,是否其他地方看似正确的代码却造成另外一个依赖的地方的BUG的发生。

 

抛却这些理论的东西,整理一下具体的一定经验:

1、这次的背光闪两次,以及白屏都是因为suspend和应用对背光的调节不同步造成的。碰到这样的问题仔细得观察log就能很快地发现问题。至于同步的方式也不应该局限在一个发生问题的地方,两个方式不同步,可以直接在两个方式之间添加同步,也可以通过其他地方的同步来凑成这里的同步。这里的解决方法就是上层将背光关掉的时候,同时将屏幕的初始化标志位置0,这样没有resume将初始化标志位置1,背光调整就不会起作用了,间接得实现了同步。但是为什么直接添加同步标志位会造成背光忽亮忽暗的跳变还是值得研究的。

 

2、初始化加速的过程,开始就应该从末端下手,而不是从前端下手。意识是说首先是最后的初始化命令,然后再优化reset过程,最后再优化上电的过程,与panel的亮屏过程相反,要反过来优化。因为如果你从前面优化开始的话,很有可能不该短的时间被你短了,导致需要后面的时间来弥补,从而导致后面的时间降不下来。而且这个问题很隐蔽,你很有可能认为是后面的代码有问题,而不是认为前面的代码delay的时间太短,需要后面代码的delay去弥补。

 

3、然后是datasheet的问题,datasheet一定要保证其正确性,我调两块屏都是厂商给错了datasheet。。另外如果datasheet正确的话,一般里面的数据还是很权威的。比如我这次优化的初始化加速,datasheet明显提供的SPI时序是纳秒级的,但我delay到80uS还不够,这里很明显就是代码有问题,而我这边的问题就是因为前面delay的时间不够,导致后面的SPI时序必须空出时间来弥补前面的delay,从而导致SPI的时序消耗大量的时间。

 

4、看到现象的时候,尤其是比较诡异的问题的时候,应该多分析,多想想,画画草图,画画过程,不要盲目地去试,分析清楚了才能事半功倍。

抱歉!评论已关闭.