一、前言
在一般情况下使用电容触摸屏时,都是使用USB直接驱动,但是在前文中我就提及过遇到的问题,就是USB触摸屏和我是用平台不是特别兼容的问题,问题现象在复述一遍,大概就是使用linux核心板USB接口连接ILTTEK的触摸芯片是没有问题的,而使用GOODIX的GT911触摸芯片配合IIC转USB免驱板时,会出现多指触摸然后触摸屏失灵现象,需要重新插拔以下触摸屏USB,或者重启程序,这两种都是无法忍受的,经过很长时间的调试,身为对于系统底层还是小白的我实在是无力解决这个不兼容问题,后来就全力研究如何使用直接驱动的方式,跳过USB免驱板,直接使用系统资源IIC总线信号和RST以及INT引脚,去调用GT911芯片驱动,控制触摸屏。而经过好几天下班时间的研究和与售后耐心的邮件互传下,终于不负我!
二、环境
全志A40i(飞凌A40i核心板)
linux3.10
2401源码包
三、正文
首先附上我更改的文件资源https://download.csdn.net/download/qq_37603131/86797324
1.硬件修改部分
使用核心板的TWI1接口,在找两个引脚配置RST和INT,配置sys_configFCU2401.fex文件,文件内核心修改的地方如下:
[twi1]
twi1_used = 1
twi1_scl = port:PB18<2><default><default><default>
twi1_sda = port:PB19<2><default><default><default>
;----------------------------------------------------------------------------------
;capacitor tp configuration电容触摸
;external int function
;wakeup output function
;notice --- tp_int_port & tp_io_port use the same port
;compatible 设备名字
;ctp_used 是否使用
;ctp_name 用作区别gd系列,适配屏幕分辨率
;ctp_twi_id 用作选择iic的adapter,可选1,2
;ctp_twi_addr 指明iic设备地址,与硬件相关
;ctp_screen_max_x 触摸板x最大坐标
;ctp_screen_max_y 触摸板y最大坐标
;ctp_touch_panel_max_x
;ctp_touch_panel_max_y
;ctp_revert_x_flag是否需要反转x坐标,需要置1,反之置0
;ctp_revert_y_flag是否需要反转y坐标,需要置1,反之置0
;ctp_exchange_x_y_flag是否需要xy坐标对换
;ctp_power_ldo 触摸屏电源配置
;ctp_power_ldo_vol触摸屏电压配置
;ctp_int_port 电容屏中断信号GPIO配置
;ctp_wakeup 电容屏唤醒信号GPIO配置
;----------------------------------------------------------------------------------
[ctp]
compatible = "allwinner,sun50i-ctp-para"
ctp_used = 1
ctp_name = "gt9xx_ts"
ctp_twi_id = 1
ctp_twi_addr = 0x14
ctp_screen_max_x = 800
ctp_screen_max_y = 480
ctp_touch_panel_max_x = 800
ctp_touch_panel_max_y = 480
ctp_revert_x_flag = 0
ctp_revert_y_flag = 0
ctp_exchange_x_y_flag = 0
ctp_power_ldo = "vcc-ctp"
ctp_power_ldo_vol = 3300
ctp_int_port = port:PH02<6><default><default><default>
ctp_wakeup = port:PH05<1><default><default><0>
;----------------------------------------------------------------------------------
;compatible配置名称
;ctp_list_used 支持触摸屏list
;ft5x_ts 是否支持ft5x_ts模组
;gt82x 同上
;gt9xx_ts 同上
;gt9xxnew_ts 同上
;gt811 同上
;zet622x 同上
;aw5306_ts 同上
;----------------------------------------------------------------------------------
[ctp_list]
compatible = "allwinner,sun50i-ctp-list"
ctp_list_used = 1
ft5x_ts = 1
gt82x = 1
gt9xx_ts = 1
gt9xxnew_ts = 1
gt811 = 1
zet622x = 1
aw5306_ts = 1
需要注意引脚配置模式,还有TWI的id要对应,我之前就是默认的TWI3,id默认是3,更换TWI1一直没修改ID,后来有糊涂把TWI引脚的模式修改了,这里就是配置资源部分,不得不说,飞凌独立开发的这个config文件针对于不需要深入学习和专业搞linux的人上手还挺快的,无需特别深入的学习设备树,大部分功能只需要修改这个配置文件,就可以了,目前我使用这个配置文件修改了诸多接口,比如SATA,CAN,485,232,双网口,电阻触摸,电容触摸,LVDS,LCD,双LVDS1080P,GPIO等等。
接下来还需要修改的就是系统配置部分,sun8iw11p1smp_oka40i_c_defconfig这个文件,需要将文件内的链接到GT911驱动的部分打开,GT911源码在系统自带的驱动文件中,一层一层查看Makefile文件,并将对应的宏全部在系统配置文件中选择,其中可以设置m和y,m的含义就是编译出ko文件,加载驱动需要手动加载,y的含义就是不编译ko文件,集成在系统驱动中自动加载,一遍调试驱动时需要发现哪里有问题, 选择m编译,当确定之后使用y自动加载即可,也不用在学一段程序调用驱动,直接开机默认执行驱动。
这里我将系统配置文件的宏CONFIG_TOUCHSCREEN_GT9XXNEW_TS=y打开,在执行build.sh时就会带着GT911驱动一起编译了。
之后编译系统镜像包,更新镜像文件到板卡中即可,目前唯一美中不足的就是触摸屏识别成为了鼠标,在点击屏幕时会出现鼠标指针,后续继续研究如何识别为触摸屏,将鼠标指针去掉,插上真正的鼠标之后才会出现鼠标。
凌晨翻来覆去睡不着,看了一下邮箱,飞凌技术发给一个在qt去除鼠标指针的方法,看了一下方法,有了一些灵感,可能不通过qt去除,而是在环境变量删除一些东西也可以,于是乎就开始了起床测试之路。
修改如下:
删除资源中qt5.9.sh环境变量中 evdevmouse部分,于是乎触摸就正常了,不在显示鼠标指针。但是这时候接入有线鼠标大概率是不能用的,于是乎这个环境变量又得特殊标记一下了,仅用于gt911触摸屏使用不持支有限鼠标,实际我并灭有接入鼠标测试,因为家里没有有线鼠标,呜呜呜~
四、结语
坚持,就是胜利!怀揣梦想,树立目标,才不会停止前进的步伐。