第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 不是上电就能直接用,而是在上电之后需要在驱动里做如下步骤:
- 电源稳定后,控制 RST、INT 引脚时序。
- 通过 RST/INT 的组合决定 I²C 地址。
- RST 拉低一段时间,再拉高,完成硬件复位。
- 复位后延时,等待芯片就绪。
- 读取芯片 ID 寄存器,确认通信正常。
- 必要时写入配置参数,然后开始读取触摸数据。
比较关键的是: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 软件设计
