電容式觸摸屏技術(shù)是利用人體的電流感應(yīng)進行工作的。電容式觸摸屏是一塊四層復(fù)合玻璃屏,玻璃屏的內(nèi)表面和夾層各涂有一層ITO,最外層是一薄層矽土玻璃保護層,夾層ITO涂層作為工作面,四個角上引出四個電極,內(nèi)層ITO為屏蔽層以保證良好的工作環(huán)境。 當(dāng)手指觸摸在金屬層上時,由于人體電場,用戶和觸摸屏表面形成以一個耦合電容,對于高頻電流來說,電容是直接導(dǎo)體,于是手指從接觸點吸走一個很小的電流。這個電流分別從觸摸屏的四角上的電極中流出,并且流經(jīng)這四個電極的電流與手指到四角的距離成正比,控制器通過對這四個電流比例的精確計算,得出觸摸點的位置。
這些采集和計算工作都由屏體上的電容觸摸芯片完成,i.MX6ULL通過中斷引腳、I2C接口與該芯片通信,獲取觸摸具體坐標(biāo)數(shù)據(jù)。下面來進行電容觸摸支持的配置。
硬件原理
LCD接口上關(guān)于電容觸摸的引腳一共四個:
IIC1_SDA、IIC1_SCL是I2C1的數(shù)據(jù)和時鐘引腳,用于與觸摸芯片通信,在I2C1的配置,在之前I2C章節(jié)已經(jīng)講過,這里不再重復(fù)配置;TP_INT是觸摸芯片的中斷引腳,查表后知道,PAD NAME為SNVS_TAMPER1;TP_RST是觸摸芯片復(fù)位引腳,PAD NAME為SNVS_TAMPER0。
IOMUX配置
I2C1已經(jīng)配置過,不再配置,只需配置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設(shè)備樹文件的&iomuxc_snvs節(jié)點下,增加子節(jié)點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è)備樹文件中,有GPIO5_IO00的其他復(fù)用,我們注釋掉:
增加設(shè)備節(jié)點
ElfBoard搭配的電容屏使用的是goodix的GT9XX系列觸摸芯片,增加對goodix的GT9XX系列觸摸芯片的支持,在i2c1節(jié)點下增加子節(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個引腳,“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ù),芯片初始化的時候或者出現(xiàn)異常時需要重新對其寄存器進行配置。
添加GT9xx驅(qū)動
一、將ELF 1開發(fā)板資料包 潼南县| 泾源县| 临泽县| 西城区| 元氏县| 渑池县| 含山县| 六枝特区| 棋牌| 台南市| 陆川县| 日喀则市| 兴隆县| 晋城| 兴城市| 西宁市| 宾阳县| 海伦市| 邛崃市| 沾化县| 肇州县| 彭泽县| 东海县| 大理市| 阿巴嘎旗| 德保县| 石阡县| 丁青县| 库伦旗| 东光县| 广汉市| 敖汉旗| 长子县| 广安市| 普兰店市| 神池县| 南澳县| 汶上县| 白银市| 昭平县| 桂阳县|