linux驱动开发:触摸屏的认识(FT5x06 IC的分析)

我们板子上的触摸屏是电容屏,当然也有电阻屏。不过目前绝大多数是电容屏。
原理:按下某个位置,得到某个位置的特定电阻/电容值,电阻屏(可能通过好几个adc去捕获这些电阻值),因为平面上一个点至少需要a(x,y)表示.

拆开LCD屏的板子,找到触摸屏那块的主控IC:FT5206.

所以我们现在研究这颗IC的SPEC就好了.

IIC总线/SPI总线
INT脚
wake up脚

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第1张图片

CTP – Capacitive touch panel
CTPM – Capacitive touch panel module

FT5x06 IC 介绍 :支持5点触摸最多
1.通讯方式:IIC ,SPI
具体到我的开发板沟通方式:
1.通过IIC总线传送数据
2.通过中断脚发送中断当存在有效触摸时
3.发送wakeup信号给CTPM.

如何获得touch的数据?
必须需要中断信号 和串口信号两者配合获得数据。
有两种时序方式:
1)中断轮询:有触摸信号,中断拉低,串口传送触摸位置数据
2)中断触发:有触摸信号,中断信号做一个周期性的方波信号,当中断信号为低,获取数据。

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第2张图片

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第3张图片

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第4张图片

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第5张图片

中断信号的作用:
当有触摸信号时,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:
不研究,用时再看

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第6张图片

CTPM FT5206 模块图:
linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第7张图片

知道了这些,我们便可以自己编写驱动,或者移植驱动.

获取哪些点按下了,即按下的位置,获取手势等,这就够了.

不过寄存器还真有点多,郁闷

下了两份SPEC,刚才翻看了另外一份,发现还不一样,擦~

FT5x06是可编程的,里面有一个51的微控制器,相当于一个51内核的单片机.LCD实际的线路图:

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第8张图片

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第9张图片
开发板的线路图的IC是FT5206GE1,而这边好像说只支持最高3.8英寸屏,而我的开发板是7寸屏,我觉得有问题啊。因为对不上啊!
我又把LCD拆开了,确认了下没错是5206,这真是见了鬼了。

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第10张图片
这边我们先不管,那我们的连接方式是IIC。那么slave的地址是:

linux驱动开发:触摸屏的认识(FT5x06 IC的分析)_第11张图片

剩下不明白的等真正研究驱动时,哪边写不下去了,再来看呗

你可能感兴趣的:(内核学习,linux驱动开发,触摸屏)