1. 程式人生 > >linux驅動開發:觸控式螢幕的認識(FT5x06 IC的分析)

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的地址是:

這裡寫圖片描述

剩下不明白的等真正研究驅動時,哪邊寫不下去了,再來看唄