gt8105电容屏驱动分析

电容屏驱动调试先了解Linux电容屏驱动中几个常用的概念:
中断下半部-工作队列;
input机制;
Linux与Android 多点触摸协议。
一、中断下半部-工作队列
1、中断
先看一下宋宝华先生的《linux设备驱动开发详解》里面对中断的描述吧。这本书个人感觉 写的比较好,从开始学驱动到现在,还能从中得到不少知识。
设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。如下图描述了Linux内核的中断处理机制。为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux将中断处理程序分解为两个半部:顶半部(top half)和底半部(bottom half)。顶半部完成尽可能少的比较紧急的功能,它往往只是简单地读取寄存器中的中断状态并清除中断标志后就进行“登记中断”的工作。“登记中断”意味着将底半部处理程序挂到该设备的底半部执行队列中去。这样,顶半部执行的速度就会很快,可以服务更多的中断请求。现在,中断处理工作的重心就落在了底半部的头上,它来完成中断事件的绝大多数任务。底半部几乎做了中断处理程序所有的事情,而且可以被新的中断打断,这也是底半部和顶半部的最大不同,因为顶半部往往被设计成不可中断。底半部则相对来说并不是非常紧急的,而且相对比较耗时,不在硬件中断服务程序中执行。尽管顶半部、底半部的结合能够改善系统的响应能力,但是,僵化地认为Linux设备驱动中的中断处理一定要分两个半部则是不对的。如果中断要处理的工作本身很少,则完全可以直接在顶半部全部完成。
其实上面这一段大致说明一个问题,那就是:中断要尽可能耗时比较短,尽快恢复系统正常调试,所以把中断触发、中断执行分开,也就是所说的“上半部分(中断触发)、底半部(中断执行)”,其实就是我们后面说的中断上下文。下半部分一般有tasklet、工作队列实现,触摸屏中中断实现以工作队列形式实现的,所以我们今天重点讲工作队列。

gt8105电容屏驱动分析

由于多点触摸技术需要采集到多个点,然后再一起处理这些点,所以在软件实现中需要保证每一波点的准确性和完整性。因此,Linux内核提供了input_mt_sync(struct input_dev * input)函数。在每波的每个点上报后需要紧跟一句input_mt_sync(),当这波所有点上报后再使用input_sync()进行同步。

1.例如一波要上报3个点:
2. ……
3. input_mt_sync(input);
4. ……
5. input_mt_sync(input);
6. ……
7. input_mt_sync(input);
8. input_sync(input);
9. 注:即使是仅上报一个点的单点事件,也需要一次input_mt_sync。

以goodix的gt8105为例
一、总体架构
硬件部分:先看一个总体的图吧,其实触摸屏原理也比较简单,触摸屏和主控芯片间的联系,如下主要有三部分:

这里写图片描述
二、电容触摸屏的主要参数(这部分面试的时候也许有人会问的)
记得刚出来找工作时有人问我一些问题,我答不上来,现在感觉很清晰(那时候刚毕业IIC我都说不全)
1、IIC
(1)、clk370KHz~400KHz;
(2)、触摸屏工作在从模式,这个比较简单;
2、电容检测频率,也就是每秒检测的次数:(大概)
(1)、单指≥100Hz;
(2)、五指≥80Hz;
(3)、十指≥60Hz。
3、手指按下,没抬起时触发多少中断
中断个数也就是检测频率,按下没提起一直有中断。这样我们就可有判断单点、划线之类的操作;
4、校准功能、自动校准(有个别电容屏没有的,用软件校准)
(1)、初始化校准
不同的温度、湿度及物理空间结构均会影响到电容传感器在闲置状态的基准值。一般电容触摸屏会在初始化的 200ms内根据环境情况自动获得新的检测基准。完成触摸屏检测的初始化。
(2)、 自动温漂补偿
温度、湿度或灰尘等环境因素的缓慢变化,也会影响到电容传感器在闲置状态的基准值。实时检测各点数据的变化,对历史数据进行统计分析,由此来修正检测基准。从而降低环境变化对触摸屏检测的影响。
5、推荐工作条件(环境温度为 25°C,VDD=2.8V)
参数 最小值 典型值 最大值 单位
模拟AVDD(参考AGND) 2.5 2.8 3.6 V
数字DVDD(参考DGND) 2.5 2.8 3.6 V
电源纹波 50(注意电池、充电器的影响) mV
工作温度 -20 +25 +85 度
工作湿度 – – 95 %
三、硬件接口电路:
如下图:
这里写图片描述

SDA IIC数据 要上拉电阻,为1K;
SCL IIC 时钟(400KHz)
TP_EN 使能脚(gt8105为高电平)
INT 中断(一直点到触摸屏时中断是一直发出的)
VCC 3.3V 这个电压一直有
GND 地

三、IIC配置
设备到芯片的数据、初始化值都是从这条总线上传输的,首先我们要配置这个条总线,
/linux/arch/arm/mach-exynos/mach-smdkv310.c,这个因平台而已,地址右移也跟情况而定,如果本来就是7bit的地址就不用移位。

四、电源、复位(使能脚)
1、电源
3.3V的电源是一直有的,这个硬件上给就行了。
2、复位(时能脚),这个因触摸屏而已,gt8105工作时要高电平。
在:linux3.0/drivers/input/touchscreen/goodix_touch.h中

来源:阿木阿木

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年6月18日
下一篇 2015年6月18日

相关推荐