android底层驱动学习之focaltech触屏实例理解

来源:互联网 发布:linux ssh localhost 编辑:程序博客网 时间:2024/06/06 00:49

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。

定义

描述

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的调试方式

 

0 0
原创粉丝点击