调试驱动思路--MTK调试CTP

拿到CTP和相应的驱动代码,原厂的驱动代码差别很大,有的厂家的驱动代码写得规规矩矩,注释清楚,有的写的就是一团糟,甚至还存在着逻辑错误。

拿到CTP 驱动代码后,直接将代码合进去,然后看效果,不管怎么触摸,CTP的打印一直不出来。。看了看,代码也没什么问题,最后用示波器看中断脚电平,
发现一直为高,高为无效。然后用万能表看了看CTP的VCC,发现居然为低,,原来CTP的电源都有问题,根本就没起来工作。

1 解决电源问题
然后看原理图,发现CTP的VCC脚不是直接接电源,而是接CPU的引脚,这引脚必须用代码控制才能拉高。。然后在poweron 和init函数里加上了启动电源脚2.8V
的代码,在poweroff里加上了取消电源脚2.8V的代码,,然后编译,烧录,开机,用手触摸,发现打印出现了,但是坐标有问题。。

2 转换坐标
CTP的坐标范围是2880*2880,而lcd是240*240,这就需要将CTP的原始坐标转换为LCD的坐标,转换很简单,因为CTP和lcd的原点都一样,都是在左上角,
转换算法: new = old * 240 / 2880; 这样,坐标转换就OK了。

3 调试滑动效果
打印是有了,但是滑动界面,有时可以滑动,有时不行,,以为是MMI的应用有问题,但是看了很久,也没发现什么问题,而且MMI touch panel代码是MTK自带的。
后来发现MMI touch panel 代码中有个函数是用来判断 CTP事件是Down还是Up,
TRUE 表示Down;
FALSE 表示Up;

用手触摸CTP,发现打印中只有Down事件,没有Up事件。
忽然想起左边同事说,每次只有CTP driver发生错误,才会正常滑动。。心中便有了个疑问,驱动代码是不是还有问题,是不是在read all point那里没有正常地返回FALSE,
导致Up事件一直出现不了。

对照MTK 代理商Coretek给的另一套CTP驱动代码,发现,原厂的代码确实没有在正确读到坐标时返回FALSE,原厂作者应该是把FALSE当成错误了,其实FALSE表示Up事件。
在读取正确坐标后,添加 return FALSE; 编译,烧录,滑动,效果终于正常了。。。。


总结一下,调试硬件驱动不能一上来就直接看效果,总结一下,大致的步骤如下:
1 在代码中配置好相关的引脚(MTK使用DrvTool来配置)
2 添加代码后,先看硬件的VCC和其他状态脚是否正常。
3 如有中断产生,用示波器看中断的电平变化。
4 驱动调好后,再看应用层的效果。

如果驱动一直调不好,可以请原厂的FE过来看看。

你可能感兴趣的:(MTK)