Linux下编写GT911触摸驱动(Download)
問題一:資源獲取Gt911數據手冊
在韋老師給的資料里,路徑為\06_Datasheet\Extend_modules\7寸LCD模塊\電容觸控芯片GT911 Datasheet_121120(海威思.pdf
問題二:需要準備哪些知識
1.能夠修改設備樹
2.能夠編寫字符設備驅動
3.能夠在linux下編寫中斷程序
4.能夠在linux下編寫IIC收發程序
5.了解input子系統
6.移植tslib(用于校準,測試觸摸屏)
gt911硬件連接(韋老師的板子):
可以看到gt911只需要4個IO來控制
SDA:IIC數據線———–UART5_RXD
SCL:IIC時鐘線———–UART5_TXD
RST:復位引腳———–SNVS_TAMPER2
INT:中斷引腳————GPIO1_IO05
問題三:如何修改設備樹
UART5_RXD和UART5_TXD引腳屬于IIC2,在原廠的設備樹中已經幫我們做好了IIC2的初始化,因此我們需要在i2c2節點下添加gt911設備
&i2c2{
clock_frequency=<100000>;
pinctrl-names=“default”;
pinctrl-0=<&pinctrl_i2c2>;
status=“okay”;
codec:wm8960@1a{
compatible=“wlf,wm8960”;
reg=<0x1a>;
clocks=<&clksIMX6UL_CLK_SAI2>;
clock-names=“mclk”;
wlf,shared-lrclk;
};
gt9xx@5d{
compatible=“goodix,gt9xx”;
reg=<0x5d>;
pinctrl-names=“default”;
pinctrl-0=<&pinctrl_tsc_gt9xx>;
interrupt-parent=<&gpio1>;
interrupts=<5IRQ_TYPE_EDGE_FALLING>;
reset-gpios=<&gpio52GPIO_ACTIVE_LOW>;
irq-gpios=<&gpio15GPIO_ACTIVE_LOW>;
irq-flags=<2>;/*1:rising2:falling*/
/*7*/
goodix,cfg-group0=[
002003E001050D000108
280F5032030500000000
000000000000008A2A0C
45470C0800000002022D
00000000000364320000
00286494C50207000004
9C2C008F3400843F007C
4C00775B007700000000
00000000000000000000
00000000000000000000
00000000000000000000
000018161412100E0C0A
08060402FFFF00000000
00000000000000000000
000016181C1D1E1F2021
22241312100F0A080604
0200FFFFFFFFFFFF0000
00000000000000000000
000000002401
];
status=“okay”;
};
reg:IIC從設備地址
pinctrl-0:使用的引腳(中斷引腳和復位引腳)
goodix,cfg-group0:gt911需要配置的寄存器的默認值
然后我們還需要在設備樹中添中斷引腳的復位引腳
在iomux節點下添加以下內容
pinctrl_tsc_gt9xx:gt9xx_tscgrp{
fsl,pins=<
MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO020x10B0
MX6UL_PAD_GPIO1_IO05__GPIO1_IO050x10B0
>;
};
其中中斷引腳和復位引腳都配置為上拉模式
問題四:gt911初始化流程
gt911地址配置
gt911地址可以配置為0x28和0xBA
這里我們選擇0xBA地址,因此上電時序為
INT=0
RST=0
延時10ms
RST=1
延時10ms
依據手冊,還有一步是要將INT腳轉為懸浮輸入態
由于linux的IIC地址在低7位,因此gt911的實際地址是0xBA>1=0x5d,這就是為什么我們在設備樹中將GT911的地址配置為0x5d
gt911需要配置的寄存器
gt911需要配置186個寄存器,分別為0x8047-0x8100
在配置流程為
軟件復位
配置寄存器0x8047-0x8100
結束軟件復位
其中軟件復位由0x8040寄存器控制:
寫入 2 即可復位 GT911,在硬復位之后,一般要往該寄存器寫 2 實行軟復位。然后寫入 0,即可正常讀取坐標數據(并且會結束軟復位)。
0x8047-0x8100寄存器中以下寄存器比較重要
這里共186個寄存器,用于配置GT9147的各個參數,這些配置一般由廠家提供給我們(一個數組),所以我們只需要將廠家給我們的配置,寫入到寄存器中即可。
3.初始化中斷
寄存器配置過后我們需要將INT引腳初始化為中斷模式,下降沿觸發。
4.讀取坐標
坐標寄存器地址為0x8140-0x8177
0x8140~0x8143 是產品ID寄存器,用于保存產品ID,對于GT9147,這4個寄存器讀出來是:9、1、4、7四個字符(ASCII碼格式)。一次可以通過這四個寄存器的值來判斷驅動IC的型號,從而判斷是OTT2001A還是GT9147,以便執行不同的初始化。
其中0x814E (狀態寄存器) 比較重要,
我們僅關心最高位和最低四位,最高位用于表示buffer狀態,如果有數據(坐標/按鍵),buffer就會是1,最低四位用于表示有效觸點的個數,范圍是:0~5,0表示沒有觸摸,5表示有5點觸摸。
當中斷發生時我們需要讀取這個寄存器的值,bit7告訴我們是否可以讀取,當我們讀取完成之后還要將bit7清零,否則中斷一直觸發。
0x814F-0x8177(共30個寄存器)為坐標點,讀取相應的寄存器即可獲取坐標。
這里共分成5組(5個點),每組6個寄存器存儲數據,以觸點1的坐標數據寄存器組為例,一般只用到觸點的x,y坐標,所以只需要讀取0x8150~0x8153的數據,組合即可得到觸點坐標。其他4組分別是:0x8158 0x8160 0x8168 和0x8171等開頭的16個寄存器組成,分別針對觸點2~4的坐標。同樣GT9147也支持寄存器地址自增,只需要發送寄存器的首地址,然后連續讀取即可,GT9147會地址自增,從而提高讀取速度。
結語:其實網上由gt911的官方庫,可以很方便的移植,但是由于這個驅動相對簡單,所以自己寫收獲會更多。
參考于:http://bbs.100ask.net/article/35
總結
以上是生活随笔為你收集整理的Linux下编写GT911触摸驱动(Download)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 蓝牙音频传输格式:ACC,SBC,APT
- 下一篇: 深度学习(TensorFlow)环境搭建
