1. GT911触摸芯片与Linux驱动开发概述
第一次接触GT911触摸芯片是在为一个工业平板项目做驱动移植时遇到的。这款由Goodix公司生产的电容式触摸控制器,凭借其高精度和低功耗特性,在嵌入式领域应用广泛。与常见的ft5x06等触摸芯片相比,GT911最大的特点是支持最多5点触控,并且内置了196个可配置寄存器,能灵活适配不同尺寸的屏幕。
在Linux系统中驱动GT911主要涉及三个层面的工作:首先是设备树配置,需要正确描述芯片的I2C地址、中断引脚和复位引脚;其次是I2C通信驱动,要完成寄存器读写和初始化流程;最后是Input子系统集成,将触摸坐标转换为标准输入事件。我遇到过最典型的问题就是中断触发异常,后来发现是设备树中中断触发方式配置错误导致的。
整个开发流程中,设备树的修改往往是第一步,也是容易出错的地方。GT911通常采用I2C接口通信,标准模式下时钟频率为100kHz,快速模式下可达400kHz。芯片支持两个从机地址:0x28和0xBA(7位地址格式),实际使用时需要根据硬件设计选择对应的地址。在设备树中,我们不仅需要配置I2C总线参数,还要声明中断引脚和复位引脚的电平特性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备树节点配置详解
2.1 I2C总线基础配置
在i.MX6ULL平台上配置GT911时,我通常会先检查I2C控制器的状态。以常见的I2C2总线为例,首先要确保总线控制器已启用:
dts复制&i2c2 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
};
这里有几个关键参数需要注意:
clock-frequency设置为100kHz,这是GT911的标准工作频率pinctrl-0指定了I2C引脚复用配置status必须设为"okay"才能使能控制器
实际项目中遇到过总线无法通信的情况,后来发现是pinctrl配置中漏掉了SCL线的上拉电阻设置。正确的引脚控制配置应该包含如下内容:
dts复制pinctrl_i2c2: i2c2grp {
fsl,pins = <
MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
>;
};
2.2 GT911设备节点添加
在确认I2C总线正常工作后,就可以添加GT911的设备节点了。根据芯片手册,我们需要配置以下几个关键属性:
dts复制gt911@5d {
compatible = "goodix,gt911";
reg = <0x5d>; // 0xBA >>
