第4章:触摸屏驱动与校准

好,到了这一步,你的平板系统已经能点亮屏幕了。但光能看不行,得能摸。触摸屏驱动与校准,说白了就是让系统听懂你的手指在说什么。

我刚开始做这个项目时,以为接上触摸屏就能用。结果呢?点上去完全没反应。后来才发现,驱动没装对,校准也没做。嗯,这节课我们就来搞定它。

4.1 触摸屏的硬件连接

先说说硬件。市面上常见的触摸屏接口就那么几种:I2C、SPI、USB。我用的最多的是I2C接口的电容触摸屏,比如FT5x06系列。

连接时要注意几点:

  • 电源:触摸屏一般需要3.3V供电,别接5V,会烧
  • I2C地址:每个触摸芯片都有默认地址,比如FT5x06是0x38
  • 中断引脚:触摸屏会通过中断通知CPU有触摸事件

我在项目中遇到过一个问题:触摸屏偶尔没反应。查了半天,发现是中断引脚没接上拉电阻。加上4.7kΩ上拉后,问题就解决了。你想想看,这种小细节最容易坑人。

4.2 安装触摸屏驱动

驱动这块,我推荐用evdev。它是Linux内核的标准输入子系统,支持绝大多数触摸屏。

具体步骤:

  1. 确认内核支持evdev:CONFIG_INPUT_EVDEV=y
  2. 加载触摸屏驱动模块:比如modprobe ft5x06_ts
  3. 检查设备节点:ls /dev/input/,应该能看到event0event1

如果你用的是fbtft(帧缓冲驱动),也可以。但说实话,evdev更通用,兼容性更好。我个人习惯用evdev,省心。

驱动加载示例:

# 加载触摸屏驱动
sudo modprobe ft5x06_ts

# 查看设备节点
ls /dev/input/
# 输出示例:event0  event1  mice  mouse0

# 测试触摸事件
sudo evtest /dev/input/event0

运行evtest后,用手指触摸屏幕,终端会输出事件信息。如果没反应,说明驱动没加载成功。

4.3 触摸校准

驱动装好了,但触摸不准怎么办?比如你点左上角,光标却跑到中间去了。这就是校准问题。

校准的原理很简单:把触摸屏的物理坐标映射到屏幕的逻辑坐标。说白了,就是算一个转换矩阵。

我常用的校准工具是tslib。它提供了一套完整的校准流程。

安装tslib:

sudo apt-get install tslib libts-bin

校准步骤:

  1. 运行ts_calibrate,屏幕上会出现5个校准点
  2. 依次点击每个点,系统会记录坐标
  3. 校准完成后,生成校准文件/etc/pointercal

我曾经遇到过一个问题:校准后触摸还是不准。后来发现,是屏幕分辨率设置错了。触摸屏的坐标范围是0-4095,而屏幕分辨率是1024x600。如果映射关系不对,怎么校准都没用。

注意:校准文件/etc/pointercal是二进制文件,不要手动编辑。如果校准失败,删除它重新校准即可。

4.4 验证触控精准度

校准完成后,怎么知道准不准?我一般用ts_test来测试。

# 运行触摸测试
ts_test

这个工具会显示一个十字光标,你手指点到哪里,光标就跟到哪里。如果偏差在1-2像素以内,就算合格了。

如果发现某个区域不准,比如屏幕边缘有偏移,可以重新校准一次。我建议校准两次,取平均值,效果更好。

4.5 常见问题与避坑指南

做触摸屏驱动,有几个坑我踩过,分享给你:

  • 触摸没反应:先检查硬件连接,再检查驱动是否加载。我曾经因为I2C地址写错,折腾了一下午。
  • 触摸漂移:通常是电源干扰。触摸屏的电源要单独滤波,别和电机共用电源。
  • 多点触摸失效:有些驱动默认只支持单点触摸。需要在内核配置中开启CONFIG_TOUCHSCREEN_MULTITOUCH

嗯,这里要注意:触摸屏的驱动和校准,看似简单,但细节很多。我建议你每做完一步,都验证一下。别等到最后才发现问题,那时候排查起来就麻烦了。

4.6 总结

这一章我们做了三件事:连接触摸屏、安装驱动、进行校准。说白了,就是让系统听懂你的手指。

我个人觉得,触摸屏驱动是平板系统里最需要耐心的部分。硬件连接、驱动加载、校准参数,任何一个环节出问题,触摸就不准。但只要你按步骤来,一步步验证,一定能搞定。

下一章,我们会把触摸和显示结合起来,做一个简单的交互界面。到时候,你就能用手指在屏幕上画画了。