飞凌嵌入式ElfBoard ELF1板卡-开发板适配之电容屏触摸
其他
 
651 人阅读
|
0 人回复
|
2025-02-19 
 
 
 
 
| 
 | 
 
 
电容式触摸屏技术是利用人体的电流感应进行工作的。电容式触摸屏是一块四层复合玻璃屏,玻璃屏的内表面和夹层各涂有一层ITO,最外层是一薄层矽土玻璃保护层,夹层ITO涂层作为工作面,四个角上引出四个电极,内层ITO为屏蔽层以保证良好的工作环境。 当手指触摸在金属层上时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。 
这些采集和计算工作都由屏体上的电容触摸芯片完成,i.MX6ULL通过中断引脚、I2C接口与该芯片通信,获取触摸具体坐标数据。下面来进行电容触摸支持的配置。 
硬件原理 
LCD接口上关于电容触摸的引脚一共四个: 
 
 
 
IIC1_SDA、IIC1_SCL是I2C1的数据和时钟引脚,用于与触摸芯片通信,在I2C1的配置,在之前I2C章节已经讲过,这里不再重复配置;TP_INT是触摸芯片的中断引脚,查表后知道,PAD NAME为SNVS_TAMPER1;TP_RST是触摸芯片复位引脚,PAD NAME为SNVS_TAMPER0。 
IOMUX配置 
I2C1已经配置过,不再配置,只需配置TP_INT(SNVS_TAMPER1)、TP_RST(SNVS_TAMPER0),打开arch/arm/boot/dts/imx6ull-pinfunc-snvs.h文件,搜索SNVS_TAMPER1和SNVS_TAMPER0: 
 
在arch/arm/boot/dts/imx6ull-elf1-emmc.dts设备树文件的&iomuxc_snvs节点下,增加子节点pinctrl_tsc_ic: 
- pinctrl_tsc_ic: tsc_icgrp {
 
  
-        fsl,pins = <
 
  
-               MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00  0x10b0
 
  
-               MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01  0x8000000
 
  
-        >;
 
  
- };
 
  复制代码 
 
注意:在设备树文件中,有GPIO5_IO00的其他复用,我们注释掉: 
 
增加设备节点 
ElfBoard搭配的电容屏使用的是goodix的GT9XX系列触摸芯片,增加对goodix的GT9XX系列触摸芯片的支持,在i2c1节点下增加子节goodix_ts@5d: 
- goodix_ts@5d {
 
  
-                 compatible = "goodix,gt9xx";
 
  
-                 reg = <0x5d>;
 
  
-                 pinctrl-names = "default";
 
  
-                 pinctrl-0 = <&pinctrl_tsc_ic>;
 
  
-                 status = "okay";
 
  
-                 interrupt-parent = <&gpio5>;
 
  
-                 interrupts = <1 2>;
 
  
-                 goodix,rst-gpio = <&gpio5 0  GPIO_ACTIVE_LOW>;
 
  
-                 goodix,irq-gpio = <&gpio5 1  GPIO_ACTIVE_LOW>;
 
  
-                 goodix,cfg-group0 = [
 
  
-                         42 D0 02 00 05 05 75 01 01 0F 24 
 
  
-                         0F 64 3C 03 05 00 00 00 02 00 00 
 
  
-                         00 16 19 1C 14 8C 0E 0E 24 00 31 
 
  
-                         0D 00 00 00 83 33 1D 00 41 00 00 
 
  
-                         00 00 00 08 0A 00 2B 1C 3C 94 D5 
 
  
-                         03 08 00 00 04 93 1E 00 82 23 00 
 
  
-                         74 29 00 69 2F 00 5F 37 00 5F 20 
 
  
-                         40 60 00 F0 40 30 55 50 27 00 00 
 
  
-                         00 00 00 00 00 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 14 19 00 00 
 
  
-                         50 50 02 04 06 08 0A 0C 0E 10 12 
 
  
-                         14 16 18 1A 1C 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 00 00 00 1D 
 
  
-                         1E 1F 20 21 22 24 26 28 29 2A 1C 
 
  
-                         18 16 14 13 12 10 0F 0C 0A 08 06 
 
  
-                         04 02 00 00 00 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 00 9C 01];
 
  
-                 goodix,cfg-group2 = [
 
  
-                         48 D0 02 00 05 05 75 01 01 0F 24 
 
  
-                         0F 64 3C 03 05 00 00 00 02 00 00 
 
  
-                         00 16 19 1C 14 8C 0E 0E 24 00 31 
 
  
-                         0D 00 00 00 83 33 1D 00 41 00 00 
 
  
-                         3C 0A 14 08 0A 00 2B 1C 3C 94 D5 
 
  
-                         03 08 00 00 04 93 1E 00 82 23 00 
 
  
-                         74 29 00 69 2F 00 5F 37 00 5F 20 
 
  
-                         40 60 00 F0 40 30 55 50 27 00 00 
 
  
-                         00 00 00 00 00 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 14 19 00 00 
 
  
-                         50 50 02 04 06 08 0A 0C 0E 10 12 
 
  
-                         14 16 18 1A 1C 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 00 00 00 1D 
 
  
-                         1E 1F 20 21 22 24 26 28 29 2A 1C 
 
  
-                         18 16 14 13 12 10 0F 0C 0A 08 06 
 
  
-                         04 02 00 00 00 00 00 00 00 00 00 
 
  
-                         00 00 00 00 00 00 00 00 3C 01];
 
  
-         };
 
  复制代码 添加后效果如下: 
                                                  
其中reg=<0x5d>是该芯片的i2c地址; 
interrupt-parent = <&gpio5>表示使用中断控制器为GPIO5; 
interrupts = <1 2>属性中的“1“表示使用中断控制器的第1个引脚,“2”表示使用的中断触发方式为下降沿触发。 
goodix,rst-gpio = <&gpio5 0  GPIO_ACTIVE_LOW>; 
goodix,irq-gpio = <&gpio5 1  GPIO_ACTIVE_LOW>; 
分别表示复位和中断连接的具体引脚。 
goodix,cfg-group0和goodix,cfg-group1,表示芯片的配置数据,芯片初始化的时候或者出现异常时需要重新对其寄存器进行配置。 
添加GT9xx驱动 
一、将ELF 1开发板资料包\02-Linux 源代码\02-1 驱动源码\04_gt9xx\gt9xx.c拷贝到内核源码的drivers/input/touchscreen/路径下: 
二、将ELF 1开发板资料包\02-Linux 源代码\02-1 驱动源码\04_gt9xx\gt9xx.h拷贝到内核源码的include/linux/路径下: 
三、修改Kconfig: 
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/input/touchscreen/Kcon\fig
 
  复制代码 添加以下内容: 
- config TOUCHSCREEN_GT9xx
 
  
-         tristate "GT9xx I2C Touchscreen support"
 
  
-         depends on I2C
 
  
-         help
 
  
-           Say Y here if you have an  touchscreen based
 
  
-           on the  GT9xx family of controllers connected to
 
  
-           your system.
 
  
 
 
-           If unsure, say N.
 
  
 
 
-           To compile this driver as a module, choose M here: the
 
  
-           module will be called gt9xx.
 
  复制代码 添加后效果如下: 
 
四、修改Makefile: 
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/input/touchscreen/Mak\efile
 
  复制代码 添加以下内容: 
- obj-$(CONFIG_TOUCHSCREEN_GT9xx)         += gt9xx.o
 
  复制代码 添加后效果如下: 
 
另外,需要在Makefile最后一行添加: 
- EXTRA_CFLAGS += -Wno-error=date-time    # Fix compile error on gcc 4.9 and later
 
  复制代码 
 
五、将GT9xx驱动编译进内核: 
使用make menuconfig打开图形化配置界面: 
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig
 
  复制代码 找到以下位置,我们可以在这里选择Y编译进内核,或者M编译成模块,或者N选择不编译。选择编译进内核: 
- Device Drivers 
 
  
- -> Input device support
 
  
- -> Touchscreens
 
  复制代码 
 
六、替换配置文件 
通过make menuconfig修改的内容写入到了.config文件,当使用make imx6ull_elf1_defconfig配置内核源码时,.config文件会被覆盖,因此,需要替换原有的imx6ull_elf1_defconfig。 
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp .config arch/arm/configs/imx6ul\l_elf1_defconfig
 
  复制代码 
 
编译测试 
编译内核和设备树并拷贝到开发板: 
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh
 
  
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage   root\@172.16.0.175:/run/media/mmcblk1p1/
 
  
- elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/
 
  复制代码 进行sync操作后断电,开发板连接好800x480 LCD电容屏之后,启动后可以正常触摸。 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |