1、触摸屏基础:电阻屏与电容屏原理、触摸控制器IC介绍、I2C/SPI通信协议基础

做嵌入式GUI这么多年,我调试过的触摸屏少说也有几十种。说实话,很多人在TouchGFX上遇到卡顿、漂移、无响应,根子往往不在软件,而是对触摸屏本身的理解不够深。这一章,我们就从最底层开始,把触摸屏的底裤扒干净。

1.1 电阻屏 vs 电容屏:你该选谁?

先问个问题:为什么有些设备用指甲盖也能划,有些非得用手指肚?这就是电阻屏和电容屏的本质区别。

电阻触摸屏

结构很简单——两层透明导电层中间夹着微小的隔离点。你按下去,上层变形,碰到下层,控制器检测到电压变化,算出坐标。

  • 优点:便宜、抗干扰、戴手套能用、用笔尖也能操作。
  • 缺点:透光率低、不支持多点触控、容易磨损。
  • 典型场景:工业控制、医疗设备、老式PDA。
我的经验: 2018年做一个户外设备,电容屏在雨天乱跳,最后换成电阻屏反而稳了。电阻屏对恶劣环境的适应性,有时候比参数好看更重要。

电容触摸屏

利用人体电场感应。手指靠近时,屏幕表面的静电场被扰动,控制器检测电容变化来定位。

  • 优点:透光好、支持多点触控、寿命长、手感顺滑。
  • 缺点:戴普通手套不行、成本高、对水渍和电磁干扰敏感。
  • 典型场景:手机、平板、消费类产品。
对比项 电阻屏 电容屏
触控方式 压力感应 电场感应
多点触控 不支持 支持(2~10点)
透光率 约80% 约90%以上
戴手套操作 可以 需特殊手套
成本 低 中高
抗干扰能力 强 较弱
避坑: 我曾经在一个项目中选了电容屏,结果现场有强电磁干扰,触摸完全失控。后来加了屏蔽层才解决。选型时一定要考虑实际环境,别只看参数表。

1.2 触摸控制器IC:屏幕的翻译官

触摸屏本身只是一堆物理层,真正干活的是控制器IC。它负责扫描、采样、滤波、坐标计算,最后通过I2C或SPI把数据丢给主控。

常见控制器IC

  • FT5x06系列(FocalTech):电容屏常用,支持多点触控,I2C接口。我用的最多,驱动成熟,社区资料丰富。
  • GT911系列(Goodix):也是电容屏,性价比高,很多国产板子标配。
  • TSC2046(TI):电阻屏经典控制器,SPI接口,4线/5线电阻屏都能用。老项目里经常见到它。
  • ADS7846(TI):TSC2046的前身,基本兼容,但功耗略高。

选控制器时,我一般先看接口——I2C还是SPI?再看分辨率——12位还是10位?最后看驱动库——TouchGFX有没有现成的?

1.3 I2C与SPI通信协议基础

控制器和主控之间怎么说话?就靠I2C或SPI。这两个协议是嵌入式工程师的必修课,我简单梳理一下核心点。

I2C(Inter-Integrated Circuit)

两根线:SCL(时钟)和SDA(数据)。主从结构,每个设备有唯一地址。

  • 优点:引脚少、支持多设备、接线简单。
  • 缺点:速度相对慢(标准模式100kHz,快速模式400kHz,高速模式3.4MHz)。
  • 典型应用:触摸屏、传感器、EEPROM。
// I2C读触摸坐标示例(伪代码)
uint8_t addr = 0x38;  // FT5x06的I2C地址
uint8_t reg = 0x02;   // 触摸状态寄存器
I2C_Start();
I2C_SendByte(addr << 1 | 0);  // 写方向
I2C_SendByte(reg);
I2C_Stop();
I2C_Start();
I2C_SendByte(addr << 1 | 1);  // 读方向
uint8_t status = I2C_ReadByte();
I2C_Stop();

SPI(Serial Peripheral Interface)

四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。全双工,速度比I2C快得多。

  • 优点:高速(几十MHz)、全双工、协议简单。
  • 缺点:引脚多、不支持多主设备(需要多根CS线)。
  • 典型应用:显示屏、触摸控制器(尤其是电阻屏)、ADC。
// SPI读触摸坐标示例(伪代码)
uint8_t tx_buf[3] = {0x90, 0x00, 0x00};  // 命令+占位
uint8_t rx_buf[3];
CS_LOW();
SPI_Transfer(tx_buf, rx_buf, 3);
CS_HIGH();
uint16_t x = (rx_buf[1] << 4) | (rx_buf[2] >> 4);
对比项 I2C SPI
线数 2根 4根
速度 100kHz~3.4MHz 可达几十MHz
通信方式 半双工 全双工
多设备支持 地址寻址,方便 片选线,占用引脚
典型触摸IC FT5x06, GT911 TSC2046, ADS7846
核心观点: 在TouchGFX项目中,电容屏多用I2C,电阻屏多用SPI。I2C接线少但速度受限,SPI速度快但占用引脚多。选型时,先看主控的引脚资源,再看刷新率要求。

1.4 本章知识体系总览

下面这张图,把触摸屏从物理层到通信层的关系串起来了。你想想看,从手指按下去,到TouchGFX收到坐标,中间经历了多少环节?

触摸屏知识体系结构图 物理层 电阻屏 电容屏 控制器IC层 FT5x06 TSC2046 通信协议层 I2C SPI 数据流向:手指触摸 → 物理层感应 → 控制器采样计算 → I2C/SPI传输 → 主控接收 TouchGFX在应用层通过驱动读取坐标,完成校准与响应

嗯,这张图把三层结构讲清楚了。物理层决定你怎么按,控制器层决定怎么算,通信层决定怎么传。每一层都有坑,后面我们会逐个拆解。

1.5 小结

这一章我们聊了电阻屏和电容屏的原理差异,认识了几个主流控制器IC,也复习了I2C和SPI的基础。说白了,触摸屏不是什么玄学,就是物理+电路+协议的组合。你把这些基础打牢了,后面做校准和修复才能有的放矢。

个人建议: 如果你手头有开发板,建议用逻辑分析仪抓一下触摸控制器的I2C或SPI波形。亲眼看到坐标数据在线上跑,比看一百遍文档都管用。我当年就是这么入门的。