飞凌嵌入式ElfBoard ELF1板卡-开发板适配之电容屏触摸
其他
649 人阅读
|
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电容屏之后,启动后可以正常触摸。
|
|
|
|
|
|
|
|
|