热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

「技术干货」工业触摸屏之驱动开发及异常分析(连载)

触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏

触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏的异常分析。


1.1 测试环境

处理器:AM335x

内核版本:Linux-3.2

硬件条件:四线电阻屏、五线电阻屏


1.2 驱动组成部分

触摸屏的处理流程离不开,响应中断上报事件,对于电容屏同样有效的。所以对于触摸屏,只需仅仅把握中响应中断上报事件的流程,即可定位是软件还是硬件故障。

以AM335x的电阻屏为例,涉及的驱动子系统列表如表1.1所示。触摸子系统是对触摸屏的抽象层,输入子系统提供符合上层应用使用的接口,中断子系统负责接收外设的中断信号,ADC子系统负责提供电场信号以及采集电压值。

表1.1 电阻屏相关驱动



1.3 AM335x电阻屏驱动

相关代码位置如表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 异常五线屏电极分布



推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
author-avatar
改改我的坏_155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有