GT911触摸芯片

第1章 基础知识

1.1 芯片原理

1.2 硬件接口

GT911 一般通过 6 根线和主控(MCU)连接:

  • VDD / GND :供电。对应12号引脚/对应49号引脚。
  • SCL / SDA :I²C 通信。对应19号引脚和20号引脚。
  • INT :触摸中断,有触摸变化时通知主控。对应16号引脚。
  • RST :复位引脚。对应22号引脚。

1.3 GT911上电与复位流程

GT911 不是上电就能直接用,而是在上电之后需要在驱动里做如下步骤:

  1. 电源稳定后,控制 RST、INT 引脚时序。
  2. 通过 RST/INT 的组合决定 I²C 地址。
  3. RST 拉低一段时间,再拉高,完成硬件复位。
  4. 复位后延时,等待芯片就绪。
  5. 读取芯片 ID 寄存器,确认通信正常。
  6. 必要时写入配置参数,然后开始读取触摸数据。

比较关键的是:INT 在上电初始化阶段通常要先当输出用,用来设定地址;初始化完成后再改成输入,用来接收触摸中断。当然INT可以只是在初始化时,用来设定地址,以后就不用了。是否触摸,我们采用轮询的方式实现。




1.3.1 RST 和 INT 引脚时序

GT911 内部固化了 两组 I²C 从机地址 ,它不会让你像写寄存器那样"写入一个新地址",而是通过 上电/复位时 对RST 和 INT 引脚发起一个电平组合 ,从而激活GT911使用那组从机地址。通俗的将就是GT911出厂就固化了两个从机地址在芯片内部,用户在使用的时候需要控制RST 和 INT 引脚激活具体的哪一个从机地址。

两个从机地址如下:

7 位地址 8 位写地址 8 位读地址
0x14 0x28 0x29
0x5D 0xBA 0xBB

I²C 协议规定:设备真实地址只有 7 位,但总线上每次发送的地址字节是 8 位 。多出来的那 1 位,是读写方向位 R/W。

A6 A5 A4 A3 A2 A1 A0 \| R/W

↑ 7位从机地址 ↑ 读写位


写:0x14 << 1 | 0 = 0x28

读:0x14 << 1 | 1 = 0x29

(1)把RST、INT拉低,延时10ms,把INT拉高,延时100us,把RST拉高,就可以把IIC地址设为0x28/0x29;

(2) 把RST、INT拉低,延时10ms,把RST拉高,就可以把IIC地址设为0xBA/0xBB

1.3.2 读取芯片 ID 寄存器

GT911芯片内部的0x8140这个寄存器中存放着芯片的名字:"GT911"。我们通过I2C去读取这个寄存器的值来比较判断,是否通讯正常。

1.4 GT911寄存器的访问

GT911 内部有很多寄存器,驱动通过 I²C 读写这些寄存器来工作。几个常用寄存器:

1. 0x8040:命令寄存器,可写 2 做软件复位,写 0 恢复正常。

2. 0x8140~0x8143:产品 ID 寄存器,用来确认是不是 GT911。

3. 0x814E:触摸状态寄存器,表示当前有没有触点、有几个触点。

很重要的2个信息,很重要的2个信息,很重要的2个信息!!!!!!!!!!!

1. 读取完0x814E寄存器,一定要对这个寄存器写0。

2. 该寄存器你最快只能7~10ms来读取一次。读的太快数据都还没准备好,相当于做无用功。

4. 0x8150 起:各触点坐标数据,包括 X、Y、触点 ID、接触面积等。

由于GT911同时支持5点触摸。至此0x8150,0x8158、0x8160、0x8168、x8170分别存储着这5组坐标的起始地址。

写寄存器时,先发 16 位寄存器地址,再写数据;读寄存器时,先写寄存器地址,再发起读操作取回数据。

1.5 坐标读取方式

GT911 坐标读取一般有两种方式:

  • 中断方式:INT 引脚产生边沿,驱动进入中断处理函数,读取 0x814E 判断是否有触摸,再读取坐标寄存器。
  • 轮询方式:不用中断,定时读取 0x814E,判断是否有新触点。

每次读完触点数据后,通常要往 0x814E 写 0,清除状态,否则 INT 可能一直触发。

1.6 软件设计

第2章 工程实践

相关推荐
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_read调用流程与实战(七十五)
linux·运维·服务器·gstreamer音视频·gstreamer音视频进阶
一条破秋裤2 小时前
04_控制GPIO通用化_从寄存器到gpiod
linux
星恒随风2 小时前
Linux进程信号(二):深入理解信号阻塞、未决、sigaction、中断机制、可重入函数与SIGCHLD
linux·运维·服务器·笔记·学习
额额额对了3 小时前
Linux 驱动实战:ADXL345 驱动
linux·运维·服务器
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_delay调用流程与实战(七十二)
linux·运维·服务器·gstreamer音视频·音视频进阶
快乐的韭菜根根12 小时前
ubuntu 安装slurm并配置
linux·运维·ubuntu
倒头就睡的小比特13 小时前
Linux基础指令3
linux·服务器
梦帮科技14 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
半杯咖啡半行码15 小时前
Linux 驱动开发入门:内核模块编程基础
linux·服务器·网络