当前位置:网站首页>【技术干货】工业触摸屏之驱动开发及异常分析(连载)
【技术干货】工业触摸屏之驱动开发及异常分析(连载)
2022-07-20 10:58:00 【武汉万象奥科】
触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏的异常分析。
1.1测试环境
处理器:AM335x
内核版本:Linux-3.2
硬件条件:四线电阻屏、五线电阻屏
1.2驱动组成部分
触摸屏的处理流程离不开,响应中断上报事件,对于电容屏同样有效的。所以对于触摸屏,只需仅仅把握中响应中断上报事件的流程,即可定位是软件还是硬件故障。
以AM335x的电阻屏为例,涉及的驱动子系统列表如表1.1所示。触摸子系统是对触摸屏的抽象层,输入子系统提供符合上层应用使用的接口,中断子系统负责接收外设的中断信号,ADC子系统负责提供电场信号以及采集电压值。
表1.1 电阻屏相关驱动
1.3AM335x电阻屏驱动
相关代码位置如表1.2所示。
表1.2 电阻屏代码路径
板级文件记录下ADC模组中哪些通道用作触摸功能,哪些通道用作模数转换功能,如代码清单1.1所示。
代码清单1.1 板级描述文件
路径:arch/arm/mach-omap2/board-am335xevm.c
ADC模块驱动是对ADC通道的抽象整理,会涉及部分触摸的寄存器。例如《【应用技术】触摸屏技术之二:原理分析》中提到CTRL Register的AFE_Pen_Ctrl Bits用于选择中断触发信号输入脚,如代码清单1.2所示。
代码清单1.2 ADC模块驱动
路径:drivers/mfd/ti_tscadc.c
最后就来介绍负责抽象整个触摸设备的触摸屏驱动文件,触摸驱动内封装了中断、ADC模组的寄存器操作、输入事件的上报工作。
设置X轴采集时的配置如代码清单1.3所示。结合《【应用技术】触摸屏技术之二:原理分析》的《四线屏寄存器配置》和《五线屏寄存器配置》内容可知,stepconfigx为X轴采集时的通用配置,当系统设备为四线模式时,开启XPP、XNN形成电场,INP值代表采集引脚为AN2。当系统设备为五线模式时,开启XPP、YNN、XNN、YPP形成电场,INP_5代表采集引脚为AN4。
代码清单1.3 X轴ADC配置
路径:drivers/input/touchscreen/ti_tsc.c
设置Y轴采集时的配置如代码清单1.4所示,stepconfigy为Y轴采集时的通用配置,当系统设备为四线模式时,开启YPP、YNN形成电场,INP值没有设置,默认使用AN0。当系统设备为五线模式时,开启XPP、YNN、XNP、YPN形成电场,INP_5代表采集引脚为AN4。
代码清单1.4 Y轴ADC配置
路径:drivers/input/touchscreen/ti_tsc.c
处理器完成ADC采集后,需要触发一个中断,中断处理函数的注册代码如代码清单1.5所示。对于用户层来说,最直观的就是查看此中断在系统中触发几次,所以此时的中断名就是request_irq内传入的中断名参数。
代码清单1.5 中断函数设计
路径:drivers/input/touchscreen/ti_tsc.c
最后一点就是对输入子系统的封装,在触摸屏代码内必不可少的就是input子系统的调用,代码如代码清单1.6所示,input_report即为输入子系统上报函数族,上报事件包括:按键按下、按键弹起、绝对坐标、相对坐标等。所以对于系统来说,最终只要input_report能顺利执行,那么触摸信号就能正常获取。
代码清单1.6 输入子系统设计
路径:drivers/input/touchscreen/ti_tsc.c
1.4用户空间的排查方法
此处整理了电阻屏的问题定位方法,如表1.3所示。
表1.3 用户空间排查方法
接下来我们结合一些具体案例来具体看看如何排查触摸问题。
1.4.1触摸没反应
问题:接上触摸屏没反应。
分析步骤:
1.查看dmesg | grep touch,查看系统是否有加载触摸驱动;此部分有内核配置选择,没有信息则定位为驱动异常,查看内核配置或初始化函数。
2.查看/proc/interrupts文件,看中断计数是否有变化。若点击屏幕,中断计数没变化,根据之前所说的中断输入引脚,说明此情况下中断引脚没有接到对应引脚上。
1.4.2触摸抖动
问题:使用ts_test查看,发现光标在不停闪烁。
分析思路:通过cat /proc/interrupts,查看中断计数,若一直有增加,再用hexdump命令查看输出信息,一般这种不规则情况,是由于中断信号输入引脚接到错误位置,例如五线屏的感应引脚,接到地之后,相当于屏幕一直被按下,所以会不断上报错误事件。也有可能是感应引脚接到不稳定的电平,一直产生高低变化的扰动,系统把这种高低变化的扰动当作触摸屏被按下的信号。
1.4.3触摸不准
问题:使用五线屏时,四个边角总有一个无法触摸得到。
分析思路:ADC模组有一个输入的参考电压,一般接1.8V,但有些意外情况,将其接到GND,相当于采集点一直无法采集到正常数据。
1.4.4触摸异常
问题:使用五线屏时,数据乱跳。
分析思路:由上篇文章“【应用技术】触摸屏技术之原理分析”分析可知,五线屏的正常四个角如图1.1所示,(H,H)与(L,L)形成对角分布,在这样X、Y轴的电场才能形成相互垂直的分布,但如果出现图1.2中(H,H)与(L,L)在同一个方向时,就无法形成相互垂直的电场,此时采集出来的感应点数据就是紊乱的。
图1.1 正常五线屏电极分布
图1.2 异常五线屏电极分布
边栏推荐
- 运算符优先级与求值次序(从上至下)
- 静态页面和动态页面的原理及区别详解
- [cloud resident co creation] full scene software development production line, end-to-end efficiency improvement, full link security
- was安装报错解决方法
- Windows Server 2022获7月非安全更新:修复因Defender导致的卡死问题
- Wps2019 all macros are forbidden. You have to pay for enabling macros. How to use them for free
- 第一章第八节:简单了解数据类型
- Excel VBA quick start (IX. jump, exit, error, with in VBA)
- “我放弃编程,写了一本130万字的硬科幻小说”
- Anacona环境太多??jupyter中如何查看自己当前在哪个环境
猜你喜欢
Multithreading and high concurrency day08
Industrial control safety PLC firmware reverse I
Flink memory model of Flink series: analyze the memory management of Flink from the perspectives of macro (Flink memory model), micro (Flink memory structure), data transmission, etc
[kubernetes]-批量修改镜像tag后导出
“我放弃编程,写了一本130万字的硬科幻小说”
Circular linked list of leetcode simple problem
第一章第七节:常量
6-11漏洞利用-利用搭建环境发送邮件
Are there any interesting web games website recommendations?
在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
随机推荐
工控安全PLC固件逆向三
基于Tensorflow GPU2Ascend工具的TensorFlow网络模型迁移
Custom persistence layer framework myormframework (III) - framework implementation
第一章 第六节:变量
工控安全PLC固件逆向一
MySQL数据库执行SQL查询语句时,底层实现原理(超详细)
[问题已处理]-helm提示kubernetes configuration file is group-readable
《网络安全测试实验室搭建指南》—第1章1.5节关键术语
jenkins pipeline下载代码到指定workspace
(Note)神经网络中的特征融合方式(add/concate)
基于MCU通用GUI大盘点
华为机试:学生方阵
历史上的今天:Kotlin 语言首次被公开;IMAP 协议之父出生;CT 成像实现新突破...
IDEA手动编写Servlet详解
DDR 6 内存已经投入研发
第二章 第一节:基础数据类型详解
web漏洞
关于父进程和子进程的关系(UAC 绕过思路)
解密方舟的高性能内存回收技术——HPP GC
【Go开源宝藏】基于 Golang 语法的性能调优技巧(数组的遍历)