对于触摸屏的基础理解

您所在的位置:网站首页 威纶通触摸屏通讯线引脚定义 对于触摸屏的基础理解

对于触摸屏的基础理解

#对于触摸屏的基础理解| 来源: 网络整理| 查看: 265

Ft5x06的实现

分为两部分整理————硬件接口与驱动注册+驱动执行部分

硬件接口目的:

1、知道硬件与cpu的接口,在dts/dtsi匹配设置参数,使得硬件被连接打通

2、知道tp芯片的寄存器设定,了解触点数目+触点坐标的寄存器,用于获取数据

驱动注册:驱动注册代码部分分析,对于实际的工作无太多意义。

————硬件接口设计

1):INT引脚,这个脚是一个中端信号,它用来通知HOST端FT5X06已经准备好,可以进行读操作了。

2):WAKE引脚:这个功能主要的作用是将FT5X06从睡眠状态转换到工作状态。

3):/RST引脚:FT5X06的芯片复位信号。

如何来设计硬件接口呢,这个我们可以从FT5X06的datasheet看出来,首先我们来看下FT5X06的上电时序,如下图所示:(主要是INT、RST、I2C的两根线)

将引脚进行匹配,在dtsi文件中设置

————接下来就是确定I2C的从地址,如下图所示:

从地址高位必须为:3,低位必须根据i2ccon设定的值来确定。

————根据FT5406数据手册上的指令,我们先了解下驱动如何实现电容屏的多点触摸,其实很简单,主要需要触摸屏ICFT5406 能够捕获多点数据,这点电容屏基本多能支持到捕获2点以上,而FT5406可以捕获5个触摸点,编写驱动时,只要去获取这几个点的数据,然后上报就可以了。

在手册上面有具体的存储点的个数+具体点的x、y坐标的说明。

驱动注册:

在driver注册之前,bus、device都已经准备好了,所以driver在注册完之后,会通过名字与bus下面的device进行匹配,这个操作在driver结构中定义,在probe执行之前完成,匹配之后probe的参数就不是空的了,会自动被写入部分相关的数据。

了解完之后,开始看代码:

1、分析注册过程:

加载/卸载代码:

static int __init ft5x06_ts_init(void)

{

return i2c_add_driver(&ft5x06_ts_driver);

}

module_init(ft5x06_ts_init);

static void __exit ft5x06_ts_exit(void)

{

i2c_del_driver(&ft5x06_ts_driver);

}

module_exit(ft5x06_ts_exit);

MODULE_DESCRIPTION("FocalTech ft5x06 TouchScreen driver");

MODULE_LICENSE("GPLv2");

return i2c_add_driver(&ft5x06_ts_driver);//注册驱动,struct i2c_driver ft5x06_ts_driver

看一下struct i2c_driver ft5x06_ts_driver的结构定义,理解如何注册的:

static struct i2c_driver ft5x06_ts_driver = {

.probe= ft5x06_ts_probe,              //probe函数

                  作用:总线驱动类似于用轮训方法探测总线上的所有设备,将设备的识别型信息和关键数据结构传递给probe函数,probe就会识别是否是自己负责驱动的设备,并负责完成该设备的初始化操作。

.remove= ft5x06_ts_remove,         //remove函数 ,卸载操作

.driver= {                                    //driver结构

.name = "ft5x06_ts",                    //驱动名字,与设备名字相同,进行匹配

.owner = THIS_MODULE,            //不解释

.of_match_table= ft5x06_match_table, //与dts或dtsi的设备匹配,用来获取数据

#ifdef CONFIG_PM                     //判断是否需要配置pm这个属性,CONFIG_PM一般定义为1

.pm = &ft5x06_ts_pm_ops, //这里包含两个函数,suspend、resume,前者为机器休眠的操作函数,后者为休眠唤醒的操作函数

#endif

},

.id_table= ft5x06_ts_id, //与设备去匹配,这里一个驱动可以匹配多个设备(二维数组)

};

到此,注册结束,开始实现probe、remove、suspend、resume这四个函数

触摸屏操作的流程:

驱动加载完成之后,进入probe函数:

注意:在这里dts/dtsi文件起了作用,它把设备的信息,通过总线传送到具体硬件设备进行初始化设定。

dtsi文件应该定义的数据:i2c定义、中断、四个引脚(vcc也许要定义上电)、初始化数据(初始化ft5x06这个硬件芯片)等

看一下触屏的dtsi的结构:

compatible = "goodix,gt9xx";                                   //名字,通过这个才能找到             reg = ;                                             //设备注册号             interrupt-parent = ;               //中断定义             interrupts = ;             reset-gpios = ;          //reset引脚             interrupt-gpios = ;    //中断引脚             vdd-supply = ;                    //vdd             vcc-i2c-supply = ;                 //vcc             pinctrl-names = "pmx_ts_active","pmx_ts_suspend";             pinctrl-0 = ;             pinctrl-1 = ;             goodix,panel-coords = ;         //坐标参数等,剩下的几乎都是 硬件触摸屏初始化参数             goodix,display-coords = ;             goodix,button-map= ;             goodix,product-id = "9137";             goodix,rawdata-key0 = ;             goodix,rawdata-key1 = ;             goodix,cfg-data0 {... ... ...}

probe里面做了哪些操作呢???

1、分配触摸屏结构内核空间;

pdata= devm_kzalloc(&client->dev,

sizeof(structft5x06_ts_platform_data), GFP_KERNEL);

2、读取dtsi的数据,放到触摸屏结构中 

err= ft5x06_parse_dt(&client->dev, pdata);

3、分配input驱动内核空间;

4、挂接到data,因为pdata等都是局部变量,在probe执行完之后就消失,需要挂接到data上

data->input_dev= input_dev;//系统分配的input子系统

data->client= client; //系统的client

data->pdata= pdata; //系统的pdata数据(第2步的数据保存在这里)

5、i2c_set_clientdata(client,data);//屏幕硬件初始化设定

6、触摸屏复位,拉高;//pdata->power_init

7、中断申请,TS_INT就是我们所设定的中断脚;//申请中断引脚与中断号

8、input初始化参数设定,我们在前面提到Linux与Android多点触摸协议里有对这部分说明;

9、check the controllerid;//检查i2c与触屏硬件能否顺利通信

10、触摸屏版本信息;//通过i2c读取触摸板的信息

11,中断的休眠唤醒;

到此,完成了probe操作。

ft5x06_ts_interrupt函数:————中断函数

if(data->suspended){

…… ...

}else{

ft5x06_fetch_touchdata(data); //i2c得到触屏设备发来的数据

ft5x06_adjust_touchdata(data); //调整数据

ft5x06_report_touchdata(data); //报告数据,通过input子系统

}

注册中断的时候,没有使用工作队列、tasklet等,而是使用了request_threaded_irq函数,以线程模式来开启中断操作!!!

至于更多的细节操作:

像suspend如何操作、resume如何操作、代码内的具体函数的原理 不甚明白,以后理解了再说吧。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3