一、硬件电路分析
首先要根据电路图获取如下I2C的信息:
项目 | Value |
---|---|
接在哪个I2C | i2c2 |
I2C 寄存器地址 | 0x14 |
reset | GPIO3_16 |
中断 | GPIO3_17 |
二、设备树
1、设备树节点
2、添加pinctr信息
三、驱动移植
1、添加驱动文件
移植整个触摸驱动文件到drivers/input/touchscreen目录下
2、添加Makefile
3、添加Kconfg
4、编译进内核
根目录make menuconfig,勾选相应选项
5、编译
出现编译报错,修改触摸驱动内置的Makefile文件。
编译通过
第一种写法可能会编译报错的原因包括:
(1)配置未启用:如果 CONFIG_TOUCHSCREEN_GT9XX、CONFIG_TOUCHSCREEN_GT9XX_UPDATE、CONFIG_TOUCHSCREEN_GT9XX_DEBUG 中任何一个未启用,相关的 .o 文件就不会被添加到编译列表中,可能导致编译时文件缺失。
(2)缺失依赖项:因为没有明确指定文件的依赖关系,某些目标文件的编译顺序或依赖关系没有被正确处理,可能导致一些文件在不合适的时机被编译,从而产生错误。
四、效果
1、驱动未加载
查看dmesg打印信息
2、定位代码
根据打印信息,发现未正常进入probe函数
3、查看匹配属性,与设备树不一致
4、修改设备树
5、驱动加载报错
6、屏蔽该部分代码
7、重新测试,驱动加载正常
8、设备节点
9、确认驱动可以上报数据
hexdump /dev/input/event0
10、tslib移植
文件系统配置 Qt 插件路径和tslib 环境变量。
11、测试
目前触摸点
正常触摸点:
查看源码得知,被翻转了
屏蔽该代码后,方向正确,触摸原点为屏幕右上角。但是触摸点整体往下偏移较大位置
连续换了两块屏幕,触摸点正常,对比坐标测量结果如下:
从0x8047开始,读186字节,查看IC里面的参数?
./i2ctransfer -f -y 2 w2@0x14 0x80 0x47 r186
触摸偏差的寄存器值:
触摸正常的寄存器值:
不正常屏幕寄回处理
五、正常屏幕问题现象
1、现象一:触摸屏幕时,屏幕闪烁严重
更换屏幕,问题依旧存在,查看屏端的ctp部分和屏本体,背光部分没有任何线路连接的,为什么会影响屏幕?
排查读取坐标后,是不是程序里干了其他事呢?在触摸屏幕时,串口在同步输出,打印大量的触摸坐标
打印触摸点信息可能会导致屏幕闪烁?因为每次触摸事件都会进行打印操作,从而影响绘制的流畅性?
解决办法:定位打印代码,注释该部分,关闭打印
再次测试,触摸屏幕闪烁问题解决
2、现象二:触摸偶尔无效
触摸时,内核正常上报,但会出现qt触摸事件没上报的情况,导致触摸点击偶尔无效
3.3V 通讯接口,400Kbps 通讯速度,上拉电阻 2K
滑动流畅,连续点击还是会出现延迟问题,排查后是qt事件上报的问题。
qt button 判断了按键状态制作按键点击特效。 在板子上连续点击操作会判断为按压状态。造成按键点击事件不触发,使人感觉点击失灵。现在去除判断 解决此异常