【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前我们测试过lcd屏幕驱动以及触控驱动时,当时确实是成功的。但是由于这个屏幕是直接从旗舰店买的,价格略贵,有点超出成本。后来,陆陆续续从其他店家买了3块lcd,测试的时候,发现有的时候屏幕是没问题的,有的时候是有问题的,整个故障没有一定的规律。
正确显示的时候,屏幕略暗。如果出现花屏,就会立马出现很多的花屏图案,整个显示的过程是非常杂乱无章的。就如下面截图所示,
为了解决这个问题,我们不得不修改内核设备树、修改内核代码、测量时钟频率、升级内核版本,通过各种各样的办法寻找解决问题的可能性。
1、尝试修改时钟频率
相对而言,lcd屏幕的显示不算太复杂。一般就是长*宽*帧率,这样算出来一个时钟带宽。看之前sun8i-v3s.dtsi文件中的assigned-clock-rates已经被修改成了60m,想想是不是如果换成了24m就好了,这也是通常的一个做法。但是很遗憾的是,结果失败的,屏幕有的时候还会出现花屏。
2、尝试修改代码解决
配置文件修改没有对,下面我们就尝试修改内核代码试试。目前关于v3s显示这部分,主要是由driver/gpu/drm/sunxi这部分的代码来完成的。而时钟处理的部分,又是由sun4i_dotclock.c处理的。所以,这里也对clock做了修改,也就是把sun4i_dclk_round_rate的起步从6变成了1,这样可以尽可能匹配我们设置的频率。不过很遗憾,问题并没有解决。
3、升级内核
之前,我们为了解决网络的问题,升级了一下内核,当时是把内核从4.10升级到了4.14。看分支信息上说,目前很多人已经升级到5.*、6.*。为了解决屏幕的问题,当然不必那么冒进,能解决问题就好,所以还是选择了5.2.y。此外,我们还参考上面的1和2,对时钟进行了修改。但是5.2.y中代码的位置发生了变化,我们尝试在sun4i_tcon.c中把tcon->dclk_min_div = 6修改成tcon->dclk_min_div = 6=1。本以为按照别人的方法,就可以一下子解决问题,但是还是很失望,问题没有解决。
4、无心插柳的发现
从2-3月份第一次发现问题,到现在差不多由4个多月了,这个问题一直陆陆续续发生,有的时候花屏,有的时候又不发生,实在是令人懊恼的很,网上的方案,大部分和自己发生的情况又不太一样。这个时候,我们不得不重新整理一下,从发生问题到现在,分析一下什么情况比较容易出现这种情况,什么情况下又不太容易出现这种情况。
经过统计,我们惊讶地发现,出现问题的时候,基本usb转232的串口都连在电脑上面,而似乎稳定可以显示的时候,串口是没有插上的。有了这个想法之后,马不停蹄地把后来买的三块板子找过来进行验证,果然发现了这个规律真的具有普适性。
插上usb转232串口之后,lcd屏幕起来,有可能是好的,也有可能是不好的,这中间有一定的概率。但是如果没有usb串口,那么lcd屏幕肯定是好的,不管重启多少次,结果都是一样的。想来想去,之前我们clock也调试过了,那么目前唯一能解释的原因,就是这个usb串口,对lcd屏幕的信号产生了干扰。之前厂家的屏幕做的比较好,这种干扰几乎可以忽略不计,但是后面买的屏幕,可能由于成本的原因,或者是工艺方面不达标,在这方面就差一点,一旦外界有一些干扰的话,就会产生花屏。
至此,电路方面虽然还没有修改,至少找到了原因,提供一种新的解决办法,不会像之前一样束手无策了。
5、问题总结
硬件本身由于种类多、门类多,出问题的原因也是五花八门。有电压的,有频率的,有信号完整性的,基本就是这样。对于开发者来说,稳定复现的故障往往是最好解决的,那种接触不良,一会有、一会没有的问题最麻烦。不过这个时候不要灰心,还是要回归问题的起点,所有做过的实验都用笔记下来,尝试重新找出规律,哪怕一开始找不到,只要不放弃,肯定会慢慢找出最终的解决办法的。