问题一:资源获取Gt911数据手册

在韦老师给的资料里,路径为\06_Datasheet\Extend_modules\7寸LCD模块\电容触控芯片GT911 Datasheet_121120(海威思.pdf

问题二:需要准备哪些知识

1.能够修改设备树

2.能够编写字符设备驱动

3.能够在linux下编写中断程序

4.能够在linux下编写IIC收发程序

5.了解input子系统

6.移植tslib(用于校准,测试触摸屏)

gt911硬件连接(韦老师的板子):

可以看到gt911只需要4个IO来控制

SDA:IIC数据线-----------UART5_RXD

SCL:IIC时钟线-----------UART5_TXD

RST:复位引脚-----------SNVS_TAMPER2

INT:中断引脚------------GPIO1_IO05

问题三:如何修改设备树

UART5_RXD和UART5_TXD引脚属于IIC2,在原厂的设备树中已经帮我们做好了IIC2的初始化,因此我们需要在i2c2节点下添加gt911设备

&i2c2 {

clock_frequency = <100000>;

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_i2c2>;

status = "okay";

codec: wm8960@1a {

compatible = "wlf,wm8960";

reg = <0x1a>;

clocks = <&clks IMX6UL_CLK_SAI2>;

clock-names = "mclk";

wlf,shared-lrclk;

};

gt9xx@5d {

compatible = "goodix,gt9xx";

reg = <0x5d>;

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_tsc_gt9xx>;

interrupt-parent = <&gpio1>;

interrupts = <5 IRQ_TYPE_EDGE_FALLING>;

reset-gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;

irq-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;

irq-flags = <2>;                /*1:rising 2: falling*/

/*7*/

goodix,cfg-group0 = [

00 20 03 E0 01 05 0D 00 01 08

28 0F 50 32 03 05 00 00 00 00

00 00 00 00 00 00 00 8A 2A 0C

45 47 0C 08 00 00 00 02 02 2D

00 00 00 00 00 03 64 32 00 00

00 28 64 94 C5 02 07 00 00 04

9C 2C 00 8F 34 00 84 3F 00 7C

4C 00 77 5B 00 77 00 00 00 00

00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00

00 00 18 16 14 12 10 0E 0C 0A

08 06 04 02 FF FF 00 00 00 00

00 00 00 00 00 00 00 00 00 00

00 00 16 18 1C 1D 1E 1F 20 21

22 24 13 12 10 0F 0A 08 06 04

02 00 FF FF FF FF FF FF 00 00

00 00 00 00 00 00 00 00 00 00

00 00 00 00 24 01

];

status = "okay";

};

reg:IIC从设备地址

pinctrl-0:使用的引脚(中断引脚和复位引脚)

goodix,cfg-group0:gt911需要配置的寄存器的默认值

然后我们还需要在设备树中添中断引脚的复位引脚

在iomux节点下添加以下内容

pinctrl_tsc_gt9xx: gt9xx_tscgrp {

fsl,pins = <

MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02        0x10B0

MX6UL_PAD_GPIO1_IO05__GPIO1_IO05           0x10B0

>;

};

其中中断引脚和复位引脚都配置为上拉模式

问题四:gt911初始化流程

gt911地址配置

gt911地址可以配置为0x28和0xBA

这里我们选择0xBA地址,因此上电时序为

INT=0

RST=0

延时10ms

RST=1

延时10ms

依据手册,还有一步是要将INT脚转为悬浮输入态

由于linux的IIC地址在低7位,因此gt911的实际地址是0xBA>1=0x5d,这就是为什么我们在设备树中将GT911的地址配置为0x5d

gt911需要配置的寄存器

gt911需要配置186个寄存器,分别为0x8047-0x8100

在配置流程为

软件复位

配置寄存器0x8047-0x8100

结束软件复位

其中软件复位由0x8040寄存器控制:

写入 2 即可复位 GT911,在硬复位之后,一般要往该寄存器写 2 实行软复位。然后写入 0,即可正常读取坐标数据(并且会结束软复位)。

0x8047-0x8100寄存器中以下寄存器比较重要

这里共186个寄存器,用于配置GT9147的各个参数,这些配置一般由厂家提供给我们(一个数组),所以我们只需要将厂家给我们的配置,写入到寄存器中即可。

3.初始化中断

寄存器配置过后我们需要将INT引脚初始化为中断模式,下降沿触发。

4.读取坐标

坐标寄存器地址为0x8140-0x8177

0x8140~0x8143 是产品ID寄存器,用于保存产品ID,对于GT9147,这4个寄存器读出来是:9、1、4、7四个字符(ASCII码格式)。一次可以通过这四个寄存器的值来判断驱动IC的型号,从而判断是OTT2001A还是GT9147,以便执行不同的初始化。

其中0x814E (状态寄存器) 比较重要,

我们仅关心最高位和最低四位,最高位用于表示buffer状态,如果有数据(坐标/按键),buffer就会是1,最低四位用于表示有效触点的个数,范围是:0~5,0表示没有触摸,5表示有5点触摸。

当中断发生时我们需要读取这个寄存器的值,bit7告诉我们是否可以读取,当我们读取完成之后还要将bit7清零,否则中断一直触发。

0x814F-0x8177(共30个寄存器)为坐标点,读取相应的寄存器即可获取坐标。

这里共分成5组(5个点),每组6个寄存器存储数据,以触点1的坐标数据寄存器组为例,一般只用到触点的x,y坐标,所以只需要读取0x8150~0x8153的数据,组合即可得到触点坐标。其他4组分别是:0x8158 0x8160 0x8168 和0x8171等开头的16个寄存器组成,分别针对触点2~4的坐标。同样GT9147也支持寄存器地址自增,只需要发送寄存器的首地址,然后连续读取即可,GT9147会地址自增,从而提高读取速度。

结语:其实网上由gt911的官方库,可以很方便的移植,但是由于这个驱动相对简单,所以自己写收获会更多。

参考于:http://bbs.100ask.net/article/35

Linux下编写GT911触摸驱动相关推荐

  1. Linux运行911,韦东山-Linux下编写GT911触摸驱动 - 百问网嵌入式问答社区

    源码在最下面 问题一:资源获取Gt911数据手册 在韦老师给的资料里,路径为\06_Datasheet\Extend_modules\7寸LCD模块\电容触控芯片GT911 Datasheet_121 ...

  2. Linux下编写ENC28J60网卡驱动,完善网络设备框架

    一.框架模型 linux下设备驱动都有一套标准的结构,字符设备,块设备,网络设备都是自己的一套框架.编写驱动只需要把内核的框架搞清楚,然后照着结构填入参数,注册进内核,在应用层就可以按照标准的形式调用 ...

  3. 如何编写Linux 下的 USB 键盘驱动

     如何编写Linux 下的 USB 键盘驱动 1. 指定 USB 键盘驱动所需的头文件: #include <linux/kernel.h>/*内核头文件,含有内核一些常用函数的原型定 ...

  4. 什么是 Linux 下的 platform 设备驱动

    Linux下的字符设备驱动一般都比较简单,只是对IO进行简单的读写操作.但是I2C.SPI.LCD.USB等外设的驱动就比较复杂了,需要考虑到驱动的可重用性,以避免内核中存在大量重复代码,为此人们提出 ...

  5. 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程

    实验5  嵌入式Linux下LED报警灯驱动设计及编程 一.实验目的 理解驱动本质,掌握嵌入式Linux系统下驱动开发相关知识,包括端口寄存器访问.接口函数编写.和文件系统挂接.注册及相关应用编程等知 ...

  6. Linux下笔记本禁用触摸板

    转自http://hi.baidu.com/hixiaoqi/item/fb01b340a31797eba5c06683 Ubuntu Linux下笔记本禁用触摸板的方法在笔记本电脑上打字,总是不小心 ...

  7. 在Linux下编写Daemon

    在Linux下编写Daemon 转自:http://blog.163.com/prevBlogPerma.do?host=manyhappy163&srl=164476831201071811 ...

  8. Linux下的USB总线驱动 mouse

    Linux下的USB总线驱动(03)--USB鼠标驱动 usbmouse.c USB鼠标驱动 usbmouse.c 原文链接:http://www.linuxidc.com/Linux/2012-12 ...

  9. 专业的LaTeX: 在Linux下编写高质量的文档

    专业的LaTeX: 在Linux下编写高质量的文档 Linux下的OpenOffice.KWord等字处理软件虽然在功能上与Microsoft Word类似,但目前在易用性和可用性方面仍然存在许多不足 ...

  10. Linux下编写UDP/TCP版本的服务器和客户端的流程

    Linux下编写UDP/TCP版本的服务器和客户端的流程 文章目录 Linux下编写UDP/TCP版本的服务器和客户端的流程 一:UDP和TCP的区别 二.UDP编写服务器的步骤 三.UDP编写客户端 ...

最新文章

  1. Python使用matplotlib可视化多个时间序列数据、在同一个可视化图像中可视化多个时间序列数据(Multiple Time Series)
  2. 前谷歌董事长施密特:美国AI领导地位岌岌可危,科研预算投入得翻倍
  3. python数据类型-第三篇:Python基本数据类型
  4. tabBar颜色改动
  5. c# opencv 轮廓检测_C#中OpenCVSharp实现轮廓检测
  6. Java开发人员的升级之路
  7. LeetCode 911. 在线选举(二分查找)
  8. Python生态概览(二):网络爬虫、web信息提取、网站开发、网络应用开发
  9. iOS ffmpeg + libfdk-aac
  10. sql server 排名函数:DENSE_RANK
  11. FPGA实验记录一:1位全加器设计
  12. 四元数与欧拉角之间的换算关系
  13. 朱嘉明《火药:改变了人类历史演变模式》
  14. 计算机单位换换算,时间单位换算表与计算机单位换算
  15. docker部署xxl-job2.3.0
  16. 偷得浮生半日闲:手写数字的识别
  17. html5 斜边,css斜切角 斜边 倒角
  18. cookie是什么?有什么用?
  19. indexeddb_深入IndexedDB
  20. 遥感(1):遥感是什么?

热门文章

  1. 基于安卓/android/微信小程序的自来水收费系统app-#计算机毕业设计
  2. aliez歌词_【aLIEz】附平假名歌词(完整)
  3. 【网络安全】物理层(网线、接口、信号、MB/s和Mb/s)
  4. 关于学历与面试的一些看法
  5. A级学科计算机技术,东南大学a类学科排名!附东大a类学科名单
  6. 爱加密和梆梆加固的破解方法
  7. 通过URL链接将文件下载到本地
  8. 如何实现施耐德Twido系列PLC远程上下载
  9. 实对称矩阵的基本性质
  10. XAMPP最详细的安装及使用教程