开发TSC2046触摸芯片驱动问题分析(触摸测量值分析阶段)

背景

该触摸芯片的指令组成虽然比较简单,仅由8位组成,但是该指令的每一位的含义却非常多样,但是常用的两个测量指令是0xD0用来测量X坐标,0x90用来测量Y坐标(以上两个测量指令都是12位数据模式)。
这一阶段最严重的问题就是一旦发送测量指令(在初始化时连续发送了两个测量指令),就会导致程序死掉(无法响应点击),并且重新烧写程序(不再发送指令),也无法恢复正常工作,只有重新断电再上电,才会恢复正常。

分析过程

这里首先看一下该芯片的测量指令的含义,如图1所示,对于该指令在使用过程中需要注意的点并不多,需要注意的是该指令的发送顺序,高位在前。

在这里插入图片描述

1.第一位为起始位,是恒为1的,也就是从空闲的低电平状态切换成指令发送起始;
2.A2 - A3是测量通道的选取,如图2所示,各个数值对应不同的测量对象;
3.Mode是用来选择ADC测量精度,该位为高电平1时表示8位数据精度,低电平0时表示12位数据精度,我们使用12位数据精度;
4.SER/DFR 是测量输入模式的选择,该模式位的不同选择对应的不同测量模式(单端参考模式和差分参考模式),我们这里使用差分参考模式;
PD1-PD0 是电源低功耗使能位,仅是控制触摸状态检测的引脚的触发时刻;

在这里插入图片描述

现在再回过头分析这一阶段遇到的问题,这里存在一个误区,就是在进行测量之前(初始化时),向芯片发送一个测量指令或是禁止测量指令,经过测试,在初始化时如果发送测量指令以外的其他指令,会导致图6的触摸探测引脚的电平被锁住(恒为高电平),并且需要注意的是在差分参考测量模式时是不存在关闭测量的指令的,这一阶段就由于错误发送了单端参考测量模式下的指令(实际上使用的差分参考测量模式),导致触摸芯片无法响应点击。
除了不能在初始化时发送一个禁止指令,还需要注意,该芯片初始化时不需要发送测量指令,如果仅发送一条测量指令,该触摸芯片依旧可以使用,但是如果连续发送两次测量(即使是不同的测量指令)指令也会导致该芯片将触摸芯片锁住,分析框图和图7所示的说明,可以看到,在我们测量的时候,PENIRQ引脚的输出是无效的且为低。

为能够保证芯片正常使用其数据测量和状态检测功能,需要注意以下几点:
1.初始化时不需要发送禁止测量指令,因为在初始化完成之后,只有当我们发送测量指令时,该芯片才会执行测量;
2.初始化时不需要发送测量指令进行激活,如果发送了,那就还要发送一个完整的时钟信号,让芯片完成测试,恢复到触摸状态检测模式;
3.发送测量指令时,低四位应该全为0;

关于触摸引脚之所以会变低,以及该芯片之所以在测量阶段触摸无效这一原理的理解也可以参考数据手册里的描述。

总结

到这里,做出如上修改,基本上已经可以稳定执行测量了,刚一开始使用中断方式(外部中断Exit6),不太频繁的点击并不会影响emWin的显示,或是其他任务的显示,但是太过频繁的点击就会导致卡屏和程序死机的情况。
查询资料也可知道,过多使用中断来实现事务的处理,会增加系统的负担,并且较任务实现方式,要更占据系统资源。
所以,我们改用任务,并且将与该中断引脚(触摸芯片)相连的F429芯片的对应引脚配置成普通IO输入引脚,在该任务中不断查询/读取该引脚上的电平值,来判断是否处于点击状态,如果是点击状态,就向触摸芯片发送测量指令(X、Y坐标测量指令)执行测量操作。
程序可以正常使用,测量指令的发送也没有使触摸失效,但是获取的结果却一直为0,针对这个问题,当时是对该芯片的时序不太了解,并且设置的时钟电平维持频率为8us(最高频率为125KHz,对应电平维持时间为4微妙)。
当时由于没有考虑到发送测量指令后的ADC测量时间或是转换时间,导致在芯片还未准备就绪的情况下,再次发送时钟信号,最终获取的数据就是串行数据线上的空闲电平(低电平),也就是最终获取的测量值0。
如图9所示是该芯片的一个时序详图,从图中可以看出,在发送完测量指令之后,还需要首先等待该芯片的Busy脚变为高电平,然后再次恢复低电平之后,才可以读取数据脚上的串行数据(当然这个过程中是需要提供完整的时序的),一般这段时间为4us以上6us以下。

下一阶段预告

由于硬件并没有将该BUSY引脚连接到单片机,所以我们只能使用一个us延时来延时6us,最终获取的测量值恢复正常,并且通过五个特殊点和相应两点间的中点验证,发现测量值合理,而且线性也很不错,测量值和计算值完全吻合。
解决了测量值问题后,就要开始尝试将模拟SPI替换成物理SP。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值