電容式觸摸屏技術(shù)是利用人體的電流感應(yīng)進(jìn)行工作的。電容式觸摸屏是一塊四層復(fù)合玻璃屏,玻璃屏的內(nèi)表面和夾層各涂有一層ITO,最外層是一薄層矽土玻璃保護(hù)層,夾層ITO涂層作為工作面,四個(gè)角上引出四個(gè)電極,內(nèi)層ITO為屏蔽層以保證良好的工作環(huán)境。 當(dāng)手指觸摸在金屬層上時(shí),由于人體電場(chǎng),用戶和觸摸屏表面形成以一個(gè)耦合電容,對(duì)于高頻電流來(lái)說(shuō),電容是直接導(dǎo)體,于是手指從接觸點(diǎn)吸走一個(gè)很小的電流。這個(gè)電流分別從觸摸屏的四角上的電極中流出,并且流經(jīng)這四個(gè)電極的電流與手指到四角的距離成正比,控制器通過(guò)對(duì)這四個(gè)電流比例的精確計(jì)算,得出觸摸點(diǎn)的位置。
這些采集和計(jì)算工作都由屏體上的電容觸摸芯片完成,i.MX6ULL通過(guò)中斷引腳、I2C接口與該芯片通信,獲取觸摸具體坐標(biāo)數(shù)據(jù)。下面來(lái)進(jìn)行電容觸摸支持的配置。
硬件原理
LCD接口上關(guān)于電容觸摸的引腳一共四個(gè):
IIC1_SDA、IIC1_SCL是I2C1的數(shù)據(jù)和時(shí)鐘引腳,用于與觸摸芯片通信,在I2C1的配置,在之前I2C章節(jié)已經(jīng)講過(guò),這里不再重復(fù)配置;TP_INT是觸摸芯片的中斷引腳,查表后知道,PAD NAME為SNVS_TAMPER1;TP_RST是觸摸芯片復(fù)位引腳,PAD NAME為SNVS_TAMPER0。
IOMUX配置
I2C1已經(jīng)配置過(guò),不再配置,只需配置TP_INT(SNVS_TAMPER1)、TP_RST(SNVS_TAMPER0),打開(kāi)arch/arm/boot/dts/imx6ull-pinfunc-snvs.h文件,搜索SNVS_TAMPER1和SNVS_TAMPER0:
在arch/arm/boot/dts/imx6ull-elf1-emmc.dts設(shè)備樹(shù)文件的&iomuxc_snvs節(jié)點(diǎn)下,增加子節(jié)點(diǎn)pinctrl_tsc_ic:
pinctrl_tsc_ic: tsc_icgrp { ???????fsl,pins = < ??????????????MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00 ?0x10b0 ??????????????MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 ?0x8000000 ???????>; }; |
注意:在設(shè)備樹(shù)文件中,有GPIO5_IO00的其他復(fù)用,我們注釋掉:
增加設(shè)備節(jié)點(diǎn)
ElfBoard搭配的電容屏使用的是goodix的GT9XX系列觸摸芯片,增加對(duì)goodix的GT9XX系列觸摸芯片的支持,在i2c1節(jié)點(diǎn)下增加子節(jié)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個(gè)引腳,“2”表示使用的中斷觸發(fā)方式為下降沿觸發(fā)。
goodix,rst-gpio = <&gpio5 0 ?GPIO_ACTIVE_LOW>;
goodix,irq-gpio = <&gpio5 1 ?GPIO_ACTIVE_LOW>;
分別表示復(fù)位和中斷連接的具體引腳。
goodix,cfg-group0和goodix,cfg-group1,表示芯片的配置數(shù)據(jù),芯片初始化的時(shí)候或者出現(xiàn)異常時(shí)需要重新對(duì)其寄存器進(jìn)行配置。
添加GT9xx驅(qū)動(dòng)
一、將ELF 1開(kāi)發(fā)板資料包