• 正文
    • 硬件原理
    • IOMUX配置
    • 增加设备节点
    • 添加GT9xx驱动
    • 编译测试
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之电容屏触摸

02/19 09:00
530
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

电容式触摸屏技术是利用人体的电流感应进行工作的。电容式触摸屏是一块四层复合玻璃屏,玻璃屏的内表面和夹层各涂有一层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开发板资料包2-Linux 源代码2-1 驱动源码4_gt9xxgt9xx.c拷贝到内核源码的drivers/input/touchscreen/路径下:

二、将ELF 1开发板资料包2-Linux 源代码2-1 驱动源码4_gt9xxgt9xx.h拷贝到内核源码的include/linux/路径下:

三、修改Kconfig:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/input/touchscreen/Kconfig

添加以下内容:

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/Makefile

添加以下内容:

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/imx6ull_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-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

进行sync操作后断电,开发板连接好800x480 LCD电容屏之后,启动后可以正常触摸。

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录