AM335x(TQ335x)学习笔记——触摸屏驱动编写
在之前移植TQ210时,我已经编写过TQ210的触摸屏驱动,我的TQ335x还是使用的TQ210的屏,因此,难度不是很大。这里需要说明一点,在TQ210驱动移植时对多点触摸协议的理解还不够深入,当时编写的驱动单点触摸是可以正常使用的,但是多点触摸不对(这次编写TQ335x的触摸驱动是才意识到的)。但是编写的TQ210驱动多点触摸实际上使用的多点触摸的A协议,但是用错了一些地方,本文基于TQ335x的重新编写的触摸驱动是按照多点触摸B协议编写,使用tslib测试正常,文章末尾有效果图。
TN92触摸屏使用的触控芯片是GT811,下面我们来分析下触摸屏驱动的编写。
(1) 查看原理图
从触摸屏原理图中可以看到,GT811与开发板相连的引脚有四条,分别是SDA、SDL、INT和RESET。其中,I2C_SDA和I2C_SDL是连接到AM335x的I2C1端口上的,用来与SoC通信;INT引脚是连接在GPIO1的27号引脚上的,在检测到触摸时GT811通过该引脚向SoC发起中断请求;RESET引脚接到SoC的GPIO1的26号引脚上的,是用来接收SoC复位操作,对于本文,SoC就是AM335x。
其中,GT811与SoC的管脚连接信息可以从底板原理图中找到,SDA和SCL的我就不往外贴了,INT和RESET的连接关系如下:
YP连接到了GT811的RESET脚上,然后通过短路帽与GPIO1_26链接,YM连接到GT811的INT脚上,通过短路帽与GPIO1_27链接,因此,需要将GPIO1_27配置为终端输入引脚,GPIO1_26配置为输出引脚。此外,查看GT811的芯片手册可获得INT和RESET的操作信息:
- 1.GT811检测到触摸时会拉低中断引脚,因此,GPIO1_27需要配置为下降沿触发。
- 2.GT811的RESET脚为低电平有效,因此,上电时需要拉低RESET引脚。
- 3.GT811的RESET引脚自带上拉,因此,使用GPIO1_26将GT811的RESET拉低复位后切换为悬浮输入太即可。
(2) DTS配置Platform信息
通过前面的分析,我们知道需要配置AM335x的四条引脚才能使GT811正常工作。其中,GT811通过I2C接口连接到AM335x的I2C1上,因此,需要配置AM335x的I2C1的两条引脚为I2C功能;GPIO1_27需要配置为中断输入、下降沿触发,中断号也可以确定下来了,就是GPIO1的27号角(内核能将引脚转换为中断号);最后就是RESET脚,驱动初始化GT811时需要操作RESET引脚,且GT811为拉低复位,故可将GPIO1的26角设为输出电平状态。通过前面几篇文章的学习,我们知道DTS可以配置pinmux,然后分析内核自带的DTS文件可以,DTS也可以将连接信息传递给内核。经过分析及参考,我最TQ335x.dts文件做了如下修改:
Step1. 检查I2C引脚的pinmux配置
查找i2c1可以找到i2c1节点,该节点的pinctrl-0只想的phandler对i2c1的两个引脚进行了相关的配置,因此,不需任何修改。
Step2. 配置INT和RESET引脚
在am33xx_pinmux节点内添加引脚配置信息,具体内容如下:
- gt811_ts_pins:gt811_ts_pins{
- pinctrl-single,pins=
- 0x68(PIN_INPUT_PULLUP|MUX_MODE7)
- 0x6c(PIN_INPUT_PULLUP|MUX_MODE7)
- >;
- };
GT811的设备节点内需要提供以下信息,i2c设备地址、pinmux配置、中断信息、屏幕大小等,具体如下(这里就不细说了,有什么不清楚的可以留言讨论)。
- gt811_ts@5d{
- compatible="gt811,gt811_ts";
- pinctrl-names="default";
- pinctrl-0=<>811_ts_pins>;
- reg=<0x5d>;
- interrupt-parent=<&gpio1>;
- interrupts=<272>;
- gpios=<&gpio1260>;
- touchscreen-size-x=<800>;
- touchscreen-size-y=<480>;
- touchscreen-swap=<1>;
- touchscreen-revert-x=<1>;
- touchscreen-revert-y=<1>;
- };
(3)驱动编写
驱动编写根之前TQ210相比,没有多少变化,都是采用的新式I2C设备驱动架构,重要的区别在于支持了多点触摸,驱动的详细分析我就不多说了,具体可以参考韦东山老师的视频教程(绝对物有所值)。下面是GT811的多点触摸驱动源码。从GT811设备节点中获取坐标信息的部分我直接贴出来了,完整的代码还是请到资源里下载,还是有点贵哈,不过这个驱动可以直接拿去使用了,不需要任何修改。下面是不完整的代码,可以打印出触摸点坐标,该代码已经把本驱动的核心的部分都写出来了。其实很多朋友不需要下载源码就可以补充完善这个
AM335xTQ335x触摸屏驱动编 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)