android底层驱动学习之focaltech触屏实例理解
2016-12-21 16:00
357 查看
android底层驱动学习之focaltech触屏实例理解
这个星期接触了具体的驱动实例-----focaltech公司的触控IC。下面总结下我个人对于触屏驱动的理解,分为两个方面:硬件方面和软件驱动方面
硬件方面:
1. 简单介绍下触摸屏的发展
随着计算机技术的普及,在20世纪90年代初,出现了一种新的人机交互作用技术--触摸屏技术。利用这种技术使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作,使人机交互更为直截了当。因此,触摸屏技术已成为当前最简便的人机交流的输入设备。
2. 那触摸屏都由什么组成?
对于我们开发人员来说,触摸屏其实是由显示屏+触控IC,平常的驱动开发指的是对针对触控IC,下面以一个简单的图来模拟下我个人对触摸屏的理解:
在我们的显示中触控IC是装在显示屏上的,然后触控IC通过排线与CPU的外围电路相连,然后驱动程序来建立CPU与触控IC的软件连接。
3. 那触摸屏是怎么工作的呢?
目前触摸屏有好几种,比如电阻、电容、红外线、表面声波等,目前用的比较多是电容触摸屏。
电容触摸屏由一块四层复合玻璃屏组成,四个角上引出四个电极,由于人是个导体,当人手触碰屏幕时,会造成电流从四个电极流程,那触控IC就可以通过检测四个电极流出的电流值得比例来确定触碰的位置。
示意图如下:触控IC通过读取1、2、3、4电极收到的电流比例,计算出触碰点A的位置,同时中断使能,将A点的位置信息上传给CPU.
4. 那触控IC是如何把数据传给CPU的呢?
目前电容触控IC用到的基本通讯接口有三种:IIC、UART、SPI,目前一般只用IIC接口,主要的接口引脚有:VDD、GND、SCL、SDA、INT、RESET、VDDIO。
还是比较用图来表达意思,个人比较喜欢这种方式,哈哈,下面是CPU与触控IC的电器连接图,注意箭头的方向。
5. 那想不想看下具体的内部硬件图呀,哈哈,满足你一下吧!
看不清楚是吗,那我们分别来看下局部图:
放大图一 放大图二
在放大图一中,我们可以先来看下中断的产生过程,流程:触碰显示屏--à位置信息传递给触控IC--à中断引脚TS_INT_N使能----执行软件中的中断服务程序
同理放大图二则是其他引脚的硬件连接图。其实对于触屏驱动,只需关心TS_INT_N中断接口,至于SDA、SCL这些是控制数据传输的,是显示驱动做的事,这块在后面可以慢慢了解,应该还是很有意思的。
以上就是这个星期对触屏原理及硬件连接的理解了。
软件驱动方面:
1. 了解了触屏硬件的实现,那下面是不是要来看下软件驱动方面的实现?
a) 注册初始化触控IC的I2C接口
b) 建立触控IC软件结构体并初始化内部参数(name、fw-name、irq-gpio、reset-gpio、上电,让触屏工作起来等)
c) 设置TP INT引脚,注册中断,装载中断向量表,创建中断服务程序
d) 创建各种debug方式(DEBUGFS、SYSFS等)
e) 等待中断信息,读取手指触摸坐标数据(通过I2C获取-接口是fts_I2C_read),并上报给系统
具体详细的请见下面:
(一). focaltech_core.c文件,触屏模块初始化及注册I2C driver。
(二)从设备树中读取各参数,赋值给触屏结构体,完成触屏内部参数的初始化
(三)注册input设备模拟IO口
(四)电源初始化及开启电源给触屏上电
(五)定义reset为输出口、irq为输入口,建立软件变量与硬件的链接
(六)注册中断将中断程序放入中断向量表中
(七)创建中断发生时需要report的触屏信息
(八)建立debugfs的调试方式
这个星期接触了具体的驱动实例-----focaltech公司的触控IC。下面总结下我个人对于触屏驱动的理解,分为两个方面:硬件方面和软件驱动方面
硬件方面:
1. 简单介绍下触摸屏的发展
随着计算机技术的普及,在20世纪90年代初,出现了一种新的人机交互作用技术--触摸屏技术。利用这种技术使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作,使人机交互更为直截了当。因此,触摸屏技术已成为当前最简便的人机交流的输入设备。
2. 那触摸屏都由什么组成?
对于我们开发人员来说,触摸屏其实是由显示屏+触控IC,平常的驱动开发指的是对针对触控IC,下面以一个简单的图来模拟下我个人对触摸屏的理解:
在我们的显示中触控IC是装在显示屏上的,然后触控IC通过排线与CPU的外围电路相连,然后驱动程序来建立CPU与触控IC的软件连接。
3. 那触摸屏是怎么工作的呢?
目前触摸屏有好几种,比如电阻、电容、红外线、表面声波等,目前用的比较多是电容触摸屏。
电容触摸屏由一块四层复合玻璃屏组成,四个角上引出四个电极,由于人是个导体,当人手触碰屏幕时,会造成电流从四个电极流程,那触控IC就可以通过检测四个电极流出的电流值得比例来确定触碰的位置。
示意图如下:触控IC通过读取1、2、3、4电极收到的电流比例,计算出触碰点A的位置,同时中断使能,将A点的位置信息上传给CPU.
4. 那触控IC是如何把数据传给CPU的呢?
目前电容触控IC用到的基本通讯接口有三种:IIC、UART、SPI,目前一般只用IIC接口,主要的接口引脚有:VDD、GND、SCL、SDA、INT、RESET、VDDIO。
定义 | 描述 |
VDD | 触控IC电源端口,为TP供电,一般为3.3V/2.8V |
GND | 触控IC的地线 |
SCL | I2C通讯接口时钟线,控制I2C总线传输速率 |
SDA | I2C通讯接口数据线,传输主机与TP之间的数据 |
INT | 触控IC中断信号接口,由触控IC端发出,用于通知主机读取坐标数据,一般为低电平触发 |
RESET | 触控IC的复位信号,由有主机端发出,一般为低电平时触控IC会复位 |
VDDIO | 触控IC的IO口电压,一般为2.8V/1.8V,须低于VDD |
还是比较用图来表达意思,个人比较喜欢这种方式,哈哈,下面是CPU与触控IC的电器连接图,注意箭头的方向。
5. 那想不想看下具体的内部硬件图呀,哈哈,满足你一下吧!
看不清楚是吗,那我们分别来看下局部图:
放大图一 放大图二
在放大图一中,我们可以先来看下中断的产生过程,流程:触碰显示屏--à位置信息传递给触控IC--à中断引脚TS_INT_N使能----执行软件中的中断服务程序
同理放大图二则是其他引脚的硬件连接图。其实对于触屏驱动,只需关心TS_INT_N中断接口,至于SDA、SCL这些是控制数据传输的,是显示驱动做的事,这块在后面可以慢慢了解,应该还是很有意思的。
以上就是这个星期对触屏原理及硬件连接的理解了。
软件驱动方面:
1. 了解了触屏硬件的实现,那下面是不是要来看下软件驱动方面的实现?
a) 注册初始化触控IC的I2C接口
b) 建立触控IC软件结构体并初始化内部参数(name、fw-name、irq-gpio、reset-gpio、上电,让触屏工作起来等)
c) 设置TP INT引脚,注册中断,装载中断向量表,创建中断服务程序
d) 创建各种debug方式(DEBUGFS、SYSFS等)
e) 等待中断信息,读取手指触摸坐标数据(通过I2C获取-接口是fts_I2C_read),并上报给系统
参数名称 | 参数含义 |
fts_Upgrade_Info info | 更新所需要的信息如CHIP_ID等 |
char *name | 触屏的名称如fts_ts |
char *fw_name | 软件版本名称 |
u32 irq_gpio | 对应中断口,初始化时就设好 |
u32 reset_gpio | 对应Reset口,初始化时会去设置 |
u32 family_id | |
u32 x_max, y_max, x_min, y_min | 显示的坐标范围 |
u32 panel_minx, panel_miny, panel_maxx, panel_maxy | 显示屏幕的坐标范围 |
u32 group_id | |
u32 hard_rst_dly, soft_rst_dly | Reset时硬件和软件的所需的delay值 |
u32 num_max_touches | 触屏支持的最大触摸点数 |
u32 button_map[4] | |
u8 num_button | 按键的数量 |
bool fw_vkey_support | |
bool no_force_update | |
bool i2c_pull_up | |
bool ignore_id_check | |
bool psensor_support | |
int (*power_init) (bool) | 电源初始化函数 |
int (*power_on) (bool) | 控制电源开关函数 |
具体详细的请见下面:
(一). focaltech_core.c文件,触屏模块初始化及注册I2C driver。
(二)从设备树中读取各参数,赋值给触屏结构体,完成触屏内部参数的初始化
(三)注册input设备模拟IO口
(四)电源初始化及开启电源给触屏上电
(五)定义reset为输出口、irq为输入口,建立软件变量与硬件的链接
(六)注册中断将中断程序放入中断向量表中
(七)创建中断发生时需要report的触屏信息
(八)建立debugfs的调试方式
相关文章推荐
- android底层驱动学习之linux输入子系统的理解
- android底层驱动学习之日志信息、printk的个人理解
- android底层驱动学习之I2C(二)---以C语言理解IIC
- android底层驱动学习之DebugFS的用法,以及对file_operations的进一步理解
- android底层驱动学习之工作队列work_queue相关参数
- 【1】android底层驱动开发学习及Ubuntu使用问题
- android底层驱动学习之java基本语法的学习(一)
- android底层驱动学习之从应用程序如何到底层driver的调用
- android底层驱动学习之内存初步
- 【2】android底层驱动开发学习及Ubuntu使用问题
- android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
- android底层驱动学习之 module_init的内核调用顺序
- android底层驱动学习之debug方法(proc、sysfs、debugfs)
- android底层驱动学习之内核信息的输出以及控制方式
- 【4】android底层驱动开发学习
- android底层驱动学习之java基本语法的学习(二)
- android底层驱动学习之log的输出
- android底层驱动学习之I2C概述及工作原理(一)
- android底层驱动学习之如何通过debugfs创建文件的方式来调试内核信息
- android底层驱动学习之设备树驱动及设备匹配过程