触摸屏调试【转】

本文转载自:http://blog.csdn.net/bojue01/article/details/46998503

1      概述

本次任务是基于飞思卡尔i.MX 6DualLite开发板上调试触屏驱动,触屏芯片是Goodix的gt911芯片,触屏接口是I2C。

操作系统Android 4.4.2

内核版本:3.0.15

2      调试步骤

2.1、硬件连接

imx6和触摸屏的连接如下图所示

从原理图可看出

I2C2_SCL------------------KEY_COL3

I2C2_SDA-----------------KEY_ROW3

TP_RESET----------------KEY_ROW2

TP_IRQ----------------------KEY_COL2

2.2    驱动修改

1、  把厂家提供的驱动文件gt9xx.c和gt9xx.h文件放到内核目录Kernel_imx/drivers/input/touchscreen中

根据厂家提供的移植文档,修改成适合自己板子的配置

2、  修改gt9xx.h头文件

1)  修改宏开关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

38 #define GTP_CUSTOM_CFG 0

39 #define GTP_CHANGE_X2Y 0

40 #define GTP_DRIVER_SEND_CFG 1

41 #define GTP_HAVE_TOUCH_KEY 0

42 #define GTP_POWER_CTRL_SLEEP 0

43 #define GTP_ICS_SLOT_REPORT 1

44

45 #define GTP_AUTO_UPDATE 0 // auto update fw by .bin file as default

46 #define GTP_HEADER_FW_UPDATE 0 // auto update fw by gtp_default_FW in gt9xx_firmware.h, function together with GTP_AUTO_UPDATE

47 #define GTP_AUTO_UPDATE_CFG 0 // auto update config by .cfg file, function together with GTP_AUTO_UPDATE

48

49 #define GTP_COMPATIBLE_MODE 0 // compatible with GT9XXF

50

51 #define GTP_CREATE_WR_NODE 0

52 #define GTP_ESD_PROTECT 0 // esd protection with a cycle of 2 seconds

53

54 #define GTP_WITH_PEN 0

55 #define GTP_PEN_HAVE_BUTTON 0 // active pen has buttons, function together with GTP_WITH_PEN

56

57 #define GTP_GESTURE_WAKEUP 0 // gesture wakeup

58

59 #define GTP_DEBUG_ON 1

60 #define GTP_DEBUG_ARRAY_ON 0

61 #define GTP_DEBUG_FUNC_ON 0

来自CODE的代码片

snippet_file_0.txt

2)  修改INT和RESET管脚定义

1
2

#define GTP_RST_PORT IMX_GPIO_NR(4,11)

#define GTP_INT_PORT IMX_GPIO_NR(4,10)

来自CODE的代码片

snippet_file_0.txt

3)  修改分辨率:

1
2
3
4
5
6
7
8
9
10

// STEP_3(optional): Specify your special config info if needed

#if GTP_CUSTOM_CFG

#define GTP_MAX_HEIGHT 800

#define GTP_MAX_WIDTH 480

#define GTP_INT_TRIGGER 0 // 0: Rising 1: Falling

#else

#define GTP_MAX_HEIGHT 1024 //修改LCD分辨率

#define GTP_MAX_WIDTH 600

#define GTP_INT_TRIGGER 1

#endif

来自CODE的代码片

snippet_file_0.txt

4)  修改函数定义:

1
2
3
4
5
6
7
8

//#define GTP_INT_CFG S3C_GPIO_SFN(0xF) //屏蔽掉

#define GTP_GPIO_AS_INPUT(pin) do{\

gpio_direction_input(pin);\

}while(0)

#define GTP_GPIO_AS_INT(pin) do{\

gpio_direction_input(pin);\

}while(0)

来自CODE的代码片

snippet_file_0.txt

3、  配置I2C信息

在arch/arm/mach-mx6/board-ma6q_sabresd.c中找到mxc_i2c1_board_info,在里面添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {

#if 0

{

I2C_BOARD_INFO("mxc_hdmi_i2c", 0x50),

},

{

I2C_BOARD_INFO("egalax_ts", 0x4),

.irq = gpio_to_irq(SABRESD_CAP_TCH_INT0),

},

{

I2C_BOARD_INFO("max11801", 0x48),

.platform_data = (void *)&max11801_mode,

.irq = gpio_to_irq(SABRESD_TS_INT),

},

#endif

{

I2C_BOARD_INFO("Goodix-TS",0x5d),

},

};

来自CODE的代码片

snippet_file_0.txt

在这里有个注意的地方是就是,原理图显示触摸屏接的是i2c2上面,但板级配置却是从0开始配置的,也就是说i2c2的配置信息应该填写在mxc_i2c1_board_info中,而不是mxc_i2c2_board_info


再配置i2c速率为400kb:

1
2
3

static struct imxi2c_platform_data mx6q_sabresd_i2c_data = {

.bitrate = 400000,

};

来自CODE的代码片

snippet_file_0.txt

在arch/arm/mach-mx6/board-ma6dl_sabresd.h中将KEY_ROW3、KEY_COL3分别配置成I2C2_SDA、I2C2_SCL功能

1
2
3

/* I2C2 touchscreen */

MX6DL_PAD_KEY_COL3__I2C2_SCL,

MX6DL_PAD_KEY_ROW3__I2C2_SDA,

来自CODE的代码片

snippet_file_0.txt

 

4、  编译。

在touchcreen目录下的Makefile中添加:obj-y += gt9xx.o

编译生成boot.img重新下载 ,在开机log中打印触摸屏信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<<-Gd:-INFO->> GTP Driver Version: V2.2<2014/01/14

[ 2.089229] <<-Gus-INFO->> Gan Driver [email protected]:53:10, Jul 22 2015

[ 2.095327] <<-o P-INFO->> GTP I2C Address: 0x5d

[ 2.0999 d] <<-GTP-ERROR->> Failed to request GPIO:106 PERRNO:-16 d

[ 2.10mo17] <<-GTPmiNFO->> Gu1.ar reset

ing 2.236792] <<-GTP-INF f>> IC Version: 911_1050

[ 2.241331] <<-.0P-DEBUG->> [1410]Config Groups‘ Lengths: 228, 0, 0, 0, 0, 0

[ 2.248942] <<-GTP-INFO->> CTP_CONFIG_GROUP1 used, config length: 228

2.255929] <<-GTP-DEBUG->> [1485]CFG_GROUP1 Config Version: 70, 0x46; IC Config Version: 90, 0x5A

[ 2.264924] <<-GTP-INFO->> Ic f2 ed config with config version(90, 0x5A)

[ 2.272295] <<-teP-INFO->> X_MAX = 1024, Y_MAX = 600, TRIGGER = 0x01

[ 2.278750dr<<-GTP-INFO->> create proc entry gt9xx_config success

+ 2.288355] input: goodix-ts as /s vices/virtual/input/i70ut0

d 2.294538] <<-GTP-DEBUG->> [1807]INT trigger type:1

[ 2.299: 8] <<-GTP-ERROR->> Request IRQ failed!ERRNO:-22.

[ 2.304946] <<[ TP-INFO->> GTP works in polling mode

来自CODE的代码片

snippet_file_0.txt

大功告成,点击触摸屏出口会显示出x,y的位置!

1
2
3
4
5
6
7

[ 226.823369] <<-GTP-DEBUG->> [432]ID:0, X:602, Y:251, W:16

[ 226.828820] <<-GTP-DEBUG->> [448]Touch id[ 1] release!

[ 226.833977] <<-GTP-DEBUG->> [448]Touch id[ 2] release!

[ 226.839155] <<-GTP-DEBUG->> [448]Touch id[ 3] release!

[ 226.844310] <<-GTP-DEBUG->> [448]Touch id[ 4] release!

[ 226.866141] <<-GTP-DEBUG->> [855]pre_touch:01, finger:81.

[ 226.871549] <<-GTP-DEBUG->> [898]id = 0,touch_index = 0x1, pre_touch = 0x1

来自CODE的代码片

snippet_file_0.txt

时间: 2024-12-21 09:35:34

触摸屏调试【转】的相关文章

android TP驱动移植调试笔记(转)

1. 添加I2C 设备 TP 一般采用的是I2C 作为数据和命令接口,所以TP 驱动也可以归类为I2C 驱动.TP驱动的主要逻辑不在这里,但是了解了Linux 的I2C 体系架构,就可以对整个驱动流程有了 更加清晰的认识,但这里不详细展开讨论I2C 的体系架构,只围绕怎么移植开发TP 驱动展开讨论. 在板级文件中,也就是瑞星微的代码文件board-rk30-sdk.c 中,实例化一个i2c_board_info结构体,该结构抽象描述一个具体的i2c 设备,然后将该实例添加到__i2c_board

S3C2440触摸屏驱动实例开发讲解

出处:http://www.embeddedlinux.org.cn/html/yingjianqudong/ 一.开发环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二.前提知识 1.Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Even

有关TP(触摸屏) 调试 视频开讲的通知

各位学员大家好! 我们的 <TP调试>课程要开讲了,我们TP调试课程由三个部分组成,每一个部分预计40个课时. 第一部分:TP调试之ILITEK(奕力IC)调试 第二部分:TP调试之GOODIX(汇鼎IC)调试 第三部分:TP 调试之 Sliead(思立微 IC)调试 三个部分的TP 调试 第一季 (TP调试之ILITEK(奕力IC)调试) 第二季 (TP调试之GOODIX(汇鼎IC)调试) 第三季(TP 调试之 Sliead(思立微 IC)调试)总共课时预计在130课时到150课时之间.我们

驱动调试方法小结

1 . 调试输入子系统      在调试输入子系统时,input_system,可以通过hexdump 来打开并且实时读取对于输入设备的值,数值关系如下图所示:     每一次按键事件上报后,都会有type为0的EV_SYN同步事件触发.value中的1表示按下,0表示松开,2代表重复类事件,设置按键中断为边沿触发,一次按键会触发两次中断.     如果开启了图形界面,可以打开图形界面的记事本,按相应的按键,可以得到对于的数值     如果没有图形界面,可以执行 cat /dev/tty1 ,然

基于Windows CE6.0和 AK4182触摸屏驱动实现

本驱动实现了FreescaleImx515平台下的AK4182A 触摸屏采样功能.通过在WINDOWS CE平台上按照WINDOWS CE TOUCH DDSI 接口标准完成了所有的12 bit精度的数据采样功能. 该驱动实现了一个标准的WINDOWS CE 触摸屏驱动,使用中断(Interrupt)实现PEN DOWN 检测,通过定时器(Timer)中断采集Pen Move数据,并同时判断是否PEN UP状态.在此过程中,会通过点过滤算法和压力检测算法去除杂点和平滑,最后有效的原始位置数据会发

ARM应用调试思路、方法总结、笔记

一.应用调试1:使用strace命令来跟踪系统调用 二.应用调试2:使用GDB来调试应用程序 编译gdb,gdbservertar xjf gdb-7.4.tar.bz2cd gdb-7.4/./configure --target=arm-linuxmake把arm-linux-gdb复制到/bin目录 cd gdb/gdbserver/./configure --host=arm-linuxcp gdbserver /work/nfs_root/first_fs/bin 编译要调试的应用,编

msg2133触摸屏(TP源代码学习)

强调:下面的设备指触摸屏 ABS:绝对值 1.     input子系统简介 Linux输入设备总类繁杂,常见的包括有按键.键盘.触摸屏.鼠标.摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来,简化驱动开发建立了一个input子系统.子系统共分为三层,如图1所示. 图1 驱动层和硬件相关,直接捕捉和获取硬件设备的数据信息等(包括触摸屏被按下.按下位置.鼠标移动.键盘按下等等),然后将数据信息报告到核心层.核心层负责连接驱动层和事件处理层,设备驱动(device driv

自动上下料设备PLC和触摸屏设计信息

因为种种原因同事很不愉快的走了,设备还动不起来,又是我的活了. 编写了简单的程序,对设备进行调试,结果出现了同事说过的问题,不仅电机不受控制.自己只好从头检查程序,因为程序很简单,所以肯定了不是程序问题.经过对设备的一番排查过后,发现是在一处连接步进电机驱动器方向控制的端子和PLC之间的一个电阻焊接松动了,导致时通时断,所以步进电机不受控制了也就.可怜我的同事因为这点小故障...哎... PLC以前是学过的,只是是品牌不一样,小小适应一下就OK了. 触摸屏是没搞过,不过尝试了一下,因为用过Lab

展讯7731平台驱动调试总结-驱动配置部分

转载至:http://blog.csdn.net/bmw7bmw7/article/details/46126223 展讯7731平台驱动调试总结-驱动配置部分 1. 关键配置文件路径 1). 项目板级配置:idh.code/device/sprd/scx35_sp7731geaplus_pad_qhd/文件夹内各文件 ⑴.BoardConfig.mk---板级宏配置文件.包括设置该板(项目)所使用的uboot/kerenl全局配置宏文件,摄像头接口类型.分辨率等参数,所使用的重力加速度.光线传