开发TSC2046触摸芯片驱动问题分析(触摸状态检测分析阶段)

背景

在为电阻触摸板的触摸芯片编写驱动代码时,按照阶段遇到如下问题:
1.在编写驱动的第一天遇到的问题是:
a)一旦初始化TSC2046整个程序都会卡住,不再向下运行(物理、模拟SPI都进行了测试);
b)初始化成功后,无法响应点击,示波器测量电平一直为高电平;
c)可以正常响应点击后,点击多次后(每次点击都调用了测量函数),程序会死掉(查询方式和中断方式都进行了测试);
2.第二天遇到的问题是:
a)使用查询方式正常响应触摸后,经过硬件确认,TSC2046的时钟引脚虚焊了,补焊之后,程序又开始死在初始化触摸芯片的地方,移开时钟引脚后,程序又恢复正常;
b)修改程序只读12位数据(该芯片支持8位和12位ADC测量)时,程序又开始死掉,错开时序后,点击屏幕左半区无测量值返回,点击右半区有测量值返回;
c)将测量数据显示在显示屏上,发现使用物理SPI和使用模拟的SPI采集到的数据差别很大,并且物理SPI接口采集到的测量值大多都是0;
d)经过对四个角的点击,获取测量值,发现触摸板的坐标原点在右上角;

触摸状态检测分析阶段

作为触摸芯片的TSC2046,具备两个主要功能,即触摸状态检测和触摸值测量。最简单的就是触摸状态检测功能,所谓的检测,实际上就是当有触摸时,触摸引脚的电平会变低,平时无触摸时该引脚上的电平为高电平。
我们就是根据这一特性进行状态检测的,
如图1所示是显示屏使用的TSC2046的引脚接线图,从图中可以看出,该引脚可以作为一个外部中断触发引脚,也可以通过查询方式进行状态检测。

在这里插入图片描述

一开始使用的是物理SPI驱动该芯片,但是在初始化时,程序就卡死了,但是在驱动TSC2046前,该SPI的数据已经使用示波器进行测量,波形都很正常。
和触摸芯片结合一起使用后,程序就死掉了,调试发现程序并没有死掉,只是一直在SPI的等待接收数据状态(该部分是使用while()进行死等的),说明触摸芯片未回应数据。
于是暂时将物理SPI换成模拟的SPI来驱动触摸芯片,同样的在初始化时向触摸芯片发送一个禁止测量指令,看看触摸状态能否正常检测,结果程序恢复正常,当时对这个现象无法理解,后面会有分析。
此时的触摸状态检测引脚配置为了GPIO输入口,通过调试可以观察点击时电平的变化,但是每次点击通过调试并不能看到引脚电平变为低电平。
首先猜测是每次点击电平变化过快,导致无法检测到,由于我们使用的触摸芯片与大彩的一样,所以就拿大彩显示板进行测试,通过示波器发现每次触摸都会产生一个可以识别的低电平,然后才恢复为高电平,而我们的显示屏仅有上电后第一次触摸会产生一个很短的低电平,然后后面再点击也无法看到这个低电平的变化。
然后就对硬件引脚进行逐个分析,最终发现触摸芯片的时钟脚虚焊,并且偶然的机会发现硬件的触摸板接线端子用错了,导致触摸板放反了,所以才会出现一直点击都没有反应的问题。

将虚焊的引脚焊上之后,使用模拟SPI触摸驱动也导致程序死掉了。在一次偶然的机会将时钟引脚撬开后,触摸板的触摸指示灯(是在程序中为了方便观察而使用的一个LED灯,只有点击状态才会亮)亮起来了,并且每次点击都会亮,松开后又熄灭,一切又正常了,但是重新焊好时钟脚后,又恢复以前的状态(程序死掉)。
后面为了排除是指令导致的,就将初始化时发送的指令、在触摸处理函数中发送的测量指令注释掉,重新运行程序,焊上时钟引脚后,点击状态测量又恢复正常。
中断方式和查询方式这两种方式分别测试,都恢复正常,由此可以猜测出是触摸测量指令存在问题。

总结

到此解决了TSC2046芯片的触摸状态的采集问题,后续会对触摸坐标采集进行分析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值