Android/Linux设备驱动调试指南:触摸屏


触摸屏作为电子产品的主要输入设备,应用非常广泛,而且工艺和技术都十分成熟,并且其调试也已经形成明显的产业分工的,驱动调试和firmware调试都有各自的专业人员负责。因此这里主要针对驱动调试部分进行说明,firmware调试因为涉及到各自厂商的特点和工具不一样,无法统一说明。

触摸屏的分类和行业现状说明:

触摸屏按照原理设计分为:电阻式触摸屏,电容式触摸屏,红外式触摸屏,电磁式触摸屏还是其他比较特殊的工艺的触摸屏。其基本原理都是通过在触摸位置产生可探测电变化(包括电压,电流等),通过2个或者3个数据确定触摸位置。

触摸屏按照产品工艺分为:G+G(glass + glass) ,P+G(plastics + glass)等,主要涉及到盖板的材质和价格导致,目前来说G+G是主流的,廉价的一般采用P+G,这主要是电容式触摸屏,电磁式触摸屏主要是PFC的方式增加在普通触摸屏的底部,作为第3轴的感应输入。

现在触摸屏行业比较成熟,常用的驱动IC 包括:思立微,敦泰等各种选择都很多,而且现在的触摸屏在手机上都是采用和LCD进行全贴合的进行出货,对于手机等对产品外观厚度有苛刻要求的产品,是必不可少的选择。

对于驱动工程来说,触摸屏一般分为2种:COF( Chip On Flex or Chip On Film,常称覆晶薄膜)和COB( Chip On Broad )。

COF一般firmware置于触摸IC内部,且一般采用内置ROM的IC芯片,其特点为:触摸屏可以单独调试,准确性相对较高,但单价较高。这类触摸屏常用在手机上,而且适配性较高,只要使用相同芯片,只要调试好触摸屏本体就可以替换使用。

COB一般firmware都是在开机的过程中写入到IC,且一般选用不带ROM的芯片,其特点为价格低廉,但由于所有的触摸屏都采用同样的firmware,不能单独调试,所以准确性有所折扣。这类触摸屏常用在低价的平板产品上,且更换触摸屏通常要单独调试firmware。


触摸屏的工作原理

前面大致讲了触摸屏的分类,但是所有触摸的工作原理都是相似的,主要是靠sensor去捕捉电信号的变化,然后转化成ADC值输出给IC,通过计算转换成可用的数据,最后上报给系统形成有效输入。这里以电容式触摸屏为例进行说明,具体如下图:


这个单触点的示意图,其原理为:通过人体作为导体,在接近触摸屏时,形成一个电容,改变电场,从而在接受电极产生了变化的电场,接受电极接受到此变化,通过adc的方式进行数模转化成可识别的数据,输送给主CPU。

整体原理图如下:

说明:
1、 对于驱动调试一般需要处理的都是IC与主CPU之间的数据传输和计算。
2、 一般触摸屏使用I2C做为主要的通信端口,然后使用Int脚位来通知主CPU来取数据。
3、 对于COF和COB设计,软件调试大同小异,但是硬件设计有很大差异,而且要考虑对sensor的干扰。

特别说明:I2C调试的相关内容,请参考:常用硬件接口简述及调试要点:I²C


触摸的驱动调试一般步骤:

一、 检查硬件电路设计,接口部分的5个脚位连接情况,确认重点如下:

1、 VDD 电源检查:首先检查电压匹配,根据接线的电源和触摸IC的电压需求,检查电压值是否匹配,然后检查电源电流是否足够,使用PMU电源时需要注意在其他驱动是否改变此电压,使用外挂DCDC时,主要开关GPIO口是否被占用,然后记录下值供后续调试时使用。

2、 I2C组检查:检查I2C组是否电压匹配,记录I2C组位,供后续调试使用。

3、 INT脚位检查:检查INT脚触发方式,电平高低门限,记录下中断脚位连接,确定中断方式为软件或者硬件中断,供后续调试使用。

二、编写驱动程序:

触摸屏作为一个输入设备,其在Linux系统上表现为一个char型的设备,按照:Android Linux内核驱动编写简要步骤说明. 增加一个char型的设备,其主要需要实现的功能如下:

1、 电源的开启与关闭,根据电路设计,在init函数或者在probe函数中打开VDD的电源输出,并且在在rusume和suspend及remove函数中增加电源控制内容。

2、 注册I2C设备,注册touchpanel到系统。

3、 注册中断到系统,并编写好中断服务函数,在中断服务函数中加入数据的获取计算和上报的机制。

4、 若是COB的设计,还需要增加firmware烧写和检查的动作,并在init或者probe函数中调用,且必须要有BIN文件或者二进制数据firmware数据可供烧写到触摸IC中。

5、 涉及到系统级别的,可能还会有芯片兼容,其他模式数据等特殊接口需要提供。

三、编译调试:

在Android平台成功编写好设备驱动,编译kernel烧录到系统中,若是触摸屏无法使用,需要按照如下方式进行调试。

1、 首先打开Android系统的开发者模式,打开触摸点显示,检查是否有数据上报,若有,但是数据不准确,此时可以单独调试firmware即可保证触摸功能调试完成,若没有,则需要进一步分析。

2、 使用 adb 工具检查touchpanel设备是否在系统正常注册,首先在getevent时检查是否有touchpanel或者对应IC名称的输入设备挂载,且点击是是否有点上报,若有,则需要检查是否数据异常,不合理的数据一般是由于firmware错误或者sensor部分电路设计错误,此时需要分别检查,若无,则需要进一步分析。

3、 进入系统dev目录,检查是否有对应触摸IC的设备挂载,检查系统的i2c设备下是否对应的触摸IC的设备挂载,若有,则检查是否于firmware错误或者中断配置错误,包括:中断脚位,中断触发方式,可配合示波器检查中断输出情况。若无则需要进一步分析。

4、 检查触摸IC电源是否正常供给,检查I2C的上拉是否正常,脚位是否连接正确,可配合在不同代码段增加打印,来判断软件需要配置的地方都有正确配置。且需要硬件工程师配置检查电路和各电压情况。


总述

触摸屏调试一般作为驱动工程师第一个调试的设备,内容少但是并不简单,在实际的工作过程中,通常会有各种意想不到的异常情况需要处理。这里介绍一些简单的经验供参考:

1、 逻辑分析仪,这个是在低速数字电路领域超越示波器的存在,可以分析常用的接口,图像直观。最主要的是价格便宜。

2、 触摸屏作为成熟的产品,通常很多是否不需要编写驱动,只是需要调试驱动,所以检查电路和检查配置需要是否仔细,很多是否错误往往藏在细节。

3、 Android作为一个庞大的系统,而且分支众多,修改配置需要根据平台的特点,多检查和参看原生系统自带的驱动。必要的时候,可以采用驱动内写死配置先调试。确认无误之后再去适配系统。

 

 

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/android-linux-devices-drivers-touchpanel.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注