觸摸屏作為嵌入式產(chǎn)品中常用的交互設(shè)備,具有交互直觀,編程簡易等特點,本系列文章將以多種角度分析如何選擇合適的觸摸屏方案及常見的故障解決方法。本文主題為電阻屏的驅(qū)動組成以及多數(shù)觸摸屏的異常分析。 1.1 測試環(huán)境處理器:AM335x 內(nèi)核版本:Linux-3.2 硬件條件:四線電阻屏、五線電阻屏 1.2 驅(qū)動組成部分觸摸屏的處理流程離不開,響應(yīng)中斷上報事件,對于電容屏同樣有效的。所以對于觸摸屏,只需僅僅把握中響應(yīng)中斷上報事件的流程,即可定位是軟件還是硬件故障。 以AM335x的電阻屏為例,涉及的驅(qū)動子系統(tǒng)列表如表1.1所示。觸摸子系統(tǒng)是對觸摸屏的抽象層,輸入子系統(tǒng)提供符合上層應(yīng)用使用的接口,中斷子系統(tǒng)負責接收外設(shè)的中斷信號,ADC子系統(tǒng)負責提供電場信號以及采集電壓值。 表1.1 電阻屏相關(guān)驅(qū)動 1.3 AM335x電阻屏驅(qū)動 相關(guān)代碼位置如表1.2所示。 表1.2 電阻屏代碼路徑 板級文件記錄下ADC模組中哪些通道用作觸摸功能,哪些通道用作模數(shù)轉(zhuǎn)換功能,如代碼清單1.1所示。 代碼清單1.1 板級描述文件 路徑:arch/arm/mach-omap2/board-am335xevm.c ADC模塊驅(qū)動是對ADC通道的抽象整理,會涉及部分觸摸的寄存器。例如《【應(yīng)用技術(shù)】觸摸屏技術(shù)之二:原理分析》中提到CTRL Register的AFE_Pen_Ctrl Bits用于選擇中斷觸發(fā)信號輸入腳,如代碼清單1.2所示。 代碼清單1.2 ADC模塊驅(qū)動 路徑:drivers/mfd/ti_tscadc.c 最后就來介紹負責抽象整個觸摸設(shè)備的觸摸屏驅(qū)動文件,觸摸驅(qū)動內(nèi)封裝了中斷、ADC模組的寄存器操作、輸入事件的上報工作。 設(shè)置X軸采集時的配置如代碼清單1.3所示。結(jié)合《【應(yīng)用技術(shù)】觸摸屏技術(shù)之二:原理分析》的《四線屏寄存器配置》和《五線屏寄存器配置》內(nèi)容可知,stepconfigx為X軸采集時的通用配置,當系統(tǒng)設(shè)備為四線模式時,開啟XPP、XNN形成電場,INP值代表采集引腳為AN2。當系統(tǒng)設(shè)備為五線模式時,開啟XPP、YNN、XNN、YPP形成電場,INP_5代表采集引腳為AN4。 代碼清單1.3 X軸ADC配置 路徑:drivers/input/touchscreen/ti_tsc.c 設(shè)置Y軸采集時的配置如代碼清單1.4所示,stepconfigy為Y軸采集時的通用配置,當系統(tǒng)設(shè)備為四線模式時,開啟YPP、YNN形成電場,INP值沒有設(shè)置,默認使用AN0。當系統(tǒng)設(shè)備為五線模式時,開啟XPP、YNN、XNP、YPN形成電場,INP_5代表采集引腳為AN4。 代碼清單1.4 Y軸ADC配置 路徑:drivers/input/touchscreen/ti_tsc.c 處理器完成ADC采集后,需要觸發(fā)一個中斷,中斷處理函數(shù)的注冊代碼如代碼清單1.5所示。對于用戶層來說,最直觀的就是查看此中斷在系統(tǒng)中觸發(fā)幾次,所以此時的中斷名就是request_irq內(nèi)傳入的中斷名參數(shù)。 代碼清單1.5 中斷函數(shù)設(shè)計 路徑:drivers/input/touchscreen/ti_tsc.c 最后一點就是對輸入子系統(tǒng)的封裝,在觸摸屏代碼內(nèi)必不可少的就是input子系統(tǒng)的調(diào)用,代碼如代碼清單1.6所示,input_report即為輸入子系統(tǒng)上報函數(shù)族,上報事件包括:按鍵按下、按鍵彈起、絕對坐標、相對坐標等。所以對于系統(tǒng)來說,最終只要input_report能順利執(zhí)行,那么觸摸信號就能正常獲取。 代碼清單1.6 輸入子系統(tǒng)設(shè)計 路徑:drivers/input/touchscreen/ti_tsc.c 1.4 用戶空間的排查方法 此處整理了電阻屏的問題定位方法,如表1.3所示。 表1.3 用戶空間排查方法 接下來我們結(jié)合一些具體案例來具體看看如何排查觸摸問題。 1.4.1 觸摸沒反應(yīng)問題:接上觸摸屏沒反應(yīng)。 分析步驟:
問題:使用ts_test查看,發(fā)現(xiàn)光標在不停閃爍。 分析思路:通過cat /proc/interrupts,查看中斷計數(shù),若一直有增加,再用hexdump命令查看輸出信息,一般這種不規(guī)則情況,是由于中斷信號輸入引腳接到錯誤位置,例如五線屏的感應(yīng)引腳,接到地之后,相當于屏幕一直被按下,所以會不斷上報錯誤事件。也有可能是感應(yīng)引腳接到不穩(wěn)定的電平,一直產(chǎn)生高低變化的擾動,系統(tǒng)把這種高低變化的擾動當作觸摸屏被按下的信號。 1.4.3 觸摸不準問題:使用五線屏?xí)r,四個邊角總有一個無法觸摸得到。 分析思路:ADC模組有一個輸入的參考電壓,一般接1.8V,但有些意外情況,將其接到GND,相當于采集點一直無法采集到正常數(shù)據(jù)。 1.4.4 觸摸異常問題:使用五線屏?xí)r,數(shù)據(jù)亂跳。 分析思路:由上篇文章“【應(yīng)用技術(shù)】觸摸屏技術(shù)之原理分析”分析可知,五線屏的正常四個角如圖1.1所示,(H,H)與(L,L)形成對角分布,在這樣X、Y軸的電場才能形成相互垂直的分布,但如果出現(xiàn)圖1.2中(H,H)與(L,L)在同一個方向時,就無法形成相互垂直的電場,此時采集出來的感應(yīng)點數(shù)據(jù)就是紊亂的。 圖1.1 正常五線屏電極分布 圖1.2 異常五線屏電極分布 |