linux驅動開發:觸控式螢幕的認識(FT5x06 IC的分析)
我們板子上的觸控式螢幕是電容屏,當然也有電阻屏。不過目前絕大多數是電容屏。
原理:按下某個位置,得到某個位置的特定電阻/電容值,電阻屏(可能通過好幾個adc去捕獲這些電阻值),因為平面上一個點至少需要a(x,y)表示.
拆開LCD屏的板子,找到觸控式螢幕那塊的主控IC:FT5206.
所以我們現在研究這顆IC的SPEC就好了.
IIC匯流排/SPI匯流排
INT腳
wake up腳
CTP – Capacitive touch panel
CTPM – Capacitive touch panel module
FT5x06 IC 介紹 :支援5點觸控最多
1.通訊方式:IIC ,SPI
具體到我的開發板溝通方式:
1.通過IIC匯流排傳送資料
2.通過中斷腳傳送中斷當存在有效觸控時
3.傳送wakeup訊號給CTPM.
如何獲得touch的資料?
必須需要中斷訊號 和串列埠訊號兩者配合獲得資料。
有兩種時序方式:
1)中斷輪詢:有觸控訊號,中斷拉低,串列埠傳送觸控位置資料
2)中斷觸發:有觸控訊號,中斷訊號做一個週期性的方波訊號,當中斷訊號為低,獲取資料。
中斷訊號的作用:
當有觸控訊號時,CTPM用中斷告訴master device可以讀取資料了
中斷引腳變低,提醒主機讀資料
wake up訊號:
主機喚醒IIC的從裝置
reg:
device mode val(reg字首)
Operating(op) 000b read touch point and gesture
Test (Te) 100b read raw data
system info(sy) 001b read system info
關心的REG:
DEVICE_MODE: op,00h//三種工作模式設定
GEST_ID: op,01h :手勢touch獲取
TD_STATUS: op,02 h: 同時偵測到幾個點:1-5
TOUCHn_XH (n:1-5): Op,03h~Op,39h:第n個按下點的x座標的高位[11:8],和按下,釋放,接觸的狀態等 event flag
TOUCHn_XL (n:1-5):Op,04h~Op,3Ah: 第n個按下點的x座標的低位[7:0],單位畫素
TOUCHn_YH (n:1-5) :Op,05h~Op,3bh:第n個按下點的y座標的高位[11:8], 和當前按下點的touch id
TOUCHn_YL (n:1-5) :Op,06h~Op,3ch:第n個按下點的y座標的低位[7:0]
ID_G_THGROUP: op 80h:電容觸控時判斷有效觸控的閾值/門限 ,要求4的整數倍,預設 280/4
ID_G_THPEAK: op 81h:峰值檢測 閾值 預設 60
ID_G_ THCAL: op 82h: 計算觸控焦點時的閾值 預設 16
ID_G_ THWATER: op 83h: 描述表面有水時的閾值 預設 60
ID_G_ THTEMP: op 84h: 描述溫度補償的閾值 預設 10
ID_G_ THDIFF: op 85h: 描述一個座標的精度閾值(獲得電容值在誤差偏差多少算是同一個點) 預設 20
ID_G_ CTRL : op 86h:執行模式控制器 0 :no auto jump 1:auto jump
ID_G_ TIMEENTERMONITOR:op 87h: 輸入資料的輸入延時:預設 2
ID_G_ PERIODACTIVE:op 88h: 本暫存器描述了活躍狀態期間,不應小於12 range :3-14
ID_G_ PERIODMONITOR: op 89h:本暫存器描述了監視狀態的狀態,它不應小於30
ID_G_ AUTO_CLB_MODE: op a0h: 該暫存器描述了自動校準模式 00:enable ff ;disable
ID_G_ LIB_VERSION_H: op a1h: 庫版本 高位元組
ID_G_ LIB_VERSION_L: op a2h: 庫版本 低位元組
ID_G_ CIPHER: op a3h : 供應商 晶片ID
ID_G_ MODE : op a4H: 描述主機中斷狀態 0 :enable int 1: disable int
ID_G_ PMODE : op a5h: CTPM 執行時的功耗模式 0:active 1:監聽,測定 3: sleep
ID_G_ FIRMWARE_ID: op a6h: 應用程式的韌體標識
ID_G_ STATE : OP a7h: 配置TPM的執行模式: 0:configuare 1:work 2:校準 3:工廠 4:自動校準
ID_G_ FT5201ID : op a8h: 廠商晶片IC號
ID_G_ ERR : op a9h: 執行時的error code:
8’h00:OK
8’h03:chip register writing inconsistent with
reading
8’h05:chip start fail
8’h1A:no match among the basic input(such as
TX_ORDER) while calibration
ID_G_ CLB : op aah:用來配置TPM當校準 :
Mapping the Array of G_Bank1, total length is
NUM_TX+NUM_RX+1. the array address
increases 1 after every write
Te mode:
不研究了,等寫的時候有用到再看
sys mode:
不研究,用時再看
CTPM FT5206 模組圖:
知道了這些,我們便可以自己編寫驅動,或者移植驅動.
獲取哪些點按下了,即按下的位置,獲取手勢等,這就夠了.
不過暫存器還真有點多,鬱悶
下了兩份SPEC,剛才翻看了另外一份,發現還不一樣,擦~
FT5x06是可程式設計的,裡面有一個51的微控制器,相當於一個51核心的微控制器.LCD實際的線路圖:
開發板的線路圖的IC是FT5206GE1,而這邊好像說只支援最高3.8英寸屏,而我的開發板是7寸屏,我覺得有問題啊。因為對不上啊!
我又把LCD拆開了,確認了下沒錯是5206,這真是見了鬼了。
這邊我們先不管,那我們的連線方式是IIC。那麼slave的地址是:
剩下不明白的等真正研究驅動時,哪邊寫不下去了,再來看唄