首页 >> 新闻中心 >> 行业资讯 >> 触摸屏 I²C 接口概述-触摸屏源头厂家解答-中触股份

触摸屏 I²C 接口概述-触摸屏源头厂家解答-中触股份

2025-12-17

1. I²C 总体原理  

I²C(Inter‑Integrated‑Circuit)是一种两线式同步串行总线,使用 SCL(时钟) 与 SDA(数据) 两根信号线完成主从通信。主机(通常是 MCU/SoC)发起 START,随后发送 7 位设备地址 + R/W 位,目标器件应答 ACK,随后进行字节级读写,最后以 STOP 结束。I²C 支持多主机、多从机,地址空间 7 位(0x00‑0x7F)或 10 位,常用时钟频率为 100 kHz(标准模式)或 400 kHz(快速模式)。


2. 触摸屏控制器的 I²C 接口特点  

- 专用触摸 IC(如 FT5x0x、GT911、NS2009/NS2016 等)内部集成 ADC、坐标计算、电容/电阻检测电路,只通过 I²C 与上位机交互。  

- 数据格式:一次读取通常包括 INT 中断状态 + X、Y 坐标(有时还有 Z/压力、触点数量)。读取过程为:主机先写寄存器地址(如 0x00),随后发起读操作,IC 按顺序返回多字节数据。  

- 中断机制:触摸发生时 IC 拉低 INT 引脚,提示主机读取坐标;若不使用中断,也可以轮询方式读取。  

- 供电与复位:除 SDA、SCL 外,还需 VDD、GND 供电,部分芯片提供 RESET 引脚用于软复位。  


3. 常见 I²C 触摸屏控制器芯片  


| 芯片 | 触摸类型 | 分辨率 | 工作电压 | I²C 地址 | 关键特性 |

| FT5x0x 系列(如 FT5201) | 电容式 | 480 × 272 以上 | 2.8‑3.3 V | 0x38(默认) | 支持多点触摸、内置手势识别,Linux 驱动成熟 |

| GT911 | 电容式 | 800 × 480 及更高 | 2.7‑5.5 V | 0x5D/0x14(可配置) | 低功耗、支持 5‑点触摸,常见于 7‑15 寸工业屏 |

| NS2009 | 4 线电阻式 | 12 bit ADC | 2.0‑5.5 V | 0x48(可编程) | 支持触摸压力测量、自动省电功能 |

| NS2016 | 4 线电阻式 | 12 bit ADC | 2.0‑5.5 V | 0x28(默认) | 具备温度、BAT、AUX 端口,适合移动终端 |

| HM2003 | 4 线电阻式 | 12 bit ADC | 2.0‑5.5 V | 0x48(可配置) | 采用 SAR ADC,内部参考电压,可做电池监测 |


4. 硬件接线要点  


| 引脚 | 功能 | 常见电平 |

| SDA | I²C 数据线 | 3.3 V(或 1.8 V,视芯片而定) |

| SCL | I²C 时钟线 | 同上 |

| INT | 触摸中断输出(低电平有效) | 3.3 V |

| RESET | 复位(低电平复位) | 3.3 V |

| VDD | 电源供给 | 2.8‑3.3 V(部分芯片 5 V) |

| GND | 地 | — |


典型的 6‑针排线布局如下(参考多款产品的引脚表):INT‑SDA‑SCL‑RESET‑VDD‑GND[[7]][[8]]。在实际布线时,SDA/SCL 需要加 上拉电阻(一般 4.7 kΩ),以保证总线空闲时为高电平。


5. 软件驱动要点(以 Linux 为例)  


1. 设备树(Device Tree)  

   ```dts

   i2c_touch: touch@38 {

       compatible = "focaltech,ft5x06";

       reg = <0x38>;

       interrupt-parent = <&gpio1>;

       interrupts = <17 IRQ_TYPE_EDGE_FALLING>;

       reset-gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;

   };

   ```


2. 驱动初始化 

   - 在 `probe` 中获取 `i2c_client`,分配 `input_dev`,设置 `BUS_I2C`、`input->name` 等字段。  

   - 注册中断处理函数,使用 `request_threaded_irq` 监听 INT。  

   - 在中断或轮询工作队列中调用 `i2c_smbus_read_i2c_block_data` 读取坐标数据。  


3. 坐标解析  

   - 读取的字节通常为 `[XH, XL, YH, YL]`,坐标 = `(XH<<8) | XL`,同理 Y。  

   - 对于多点触摸,后续字节依次对应每个触点的坐标与压力。  


4. 功耗管理  

   - 部分芯片(如 NS2009)支持 auto power‑down,可在空闲时发送特定寄存器写入进入低功耗。  


6. 调试建议  


| 步骤 | 工具/方法 |

| 总线检测 | 使用示波器或逻辑分析仪观察 SDA/SCL 的时序,确认 START/STOP、ACK 正常。 |

| 地址确认 | 用 `i2cget -y 1 0x38`(Linux)或 `i2cdetect -y 1` 检测芯片是否响应。 |

| 中断验证 | 将 **INT** 连接到 MCU 的外部中断口,使用示波器捕获低电平脉冲。 |

| 坐标读取 | 编写简易 I²C 读取程序,打印返回的 4‑字节数据,核对是否在屏幕分辨率范围内。 |

| 驱动日志 | 在内核中打开 `CONFIG_INPUT_TOUCHSCREEN`,使用 `dmesg` 查看驱动加载与错误信息。 |


 7. 小结  


- I²C 为触摸屏提供了简洁的两线通信方式,适合资源受限的嵌入式系统。  

- 常见的 电容式(FT5x0x、GT911)和 **电阻式**(NS2009/NS2016)控制器均遵循相同的总线协议,只是寄存器映射和功能略有差异。  

- 硬件上只需 SDA、SCL、INT、RESET、VDD、GND 六根线,配合上拉电阻即可。  

- 软件层面,Linux 驱动的核心流程是 i2c_client → input_dev → 中断/轮询 → 坐标解析,参考已有开源驱动可快速移植。  


掌握以上要点后,基本可以完成从硬件连线到系统驱动的完整实现,并在实际产品中进行可靠的触摸交互。祝项目顺利!