全程调试记录,基本上就几种情况
公司买不到对应的7寸MIPI的屏是带有 FT56xx 这个触摸芯片的,查看对应的手册发现是GT911
1、接上屏幕上电,发现不能触摸,OK,看看打印信息咯
然后复制,查看到对应的驱动信息,可以进去看看,比较简单
原因:I2C读取不到对应的芯片信息,换个地址试试,有两个 0x5D或者0x14,结果都一样,不行。
解决方法:发现是虚焊了,后面可以读取到了。
提个醒:GT911需要通过RST和INT这两个引脚进行选择I2C地址,但是我这边设计原理图的是按照FT56xx进行设计的,把没有把RST引脚搞出来,就是下面这样
那这样子地址是多少呢?我这里是0X5D,后面我又把4和5引脚焊上都接上拉,就变成了0X14。
看手册时序似乎是这样,因为我下面还有个电容给充电,刚好符合一些时序。
2、接上一个,I2C可以读取到了,input虚拟出来了,但是还是不能触摸
以前写过GT911 裸机 跟 Linux驱动,对于这种问题,其实一眼就可以看出,就是没有上报数据嘛,OK那就开始测试是不是这样
(1)第一步(寻找问题),先把对应得input/eventx测试看看有没有数据上报,不知道是哪个,一个一个测,hexdump之后,触摸屏幕,发现都没有,OK,那就是没上报数据
(2)第二步(固定地址),了解这个触摸的芯片的都知道,它是通过中断进行控制的,然后去看GT911的Linux源码发现几个问题
1、如果设备树有这两个引脚,就会进行对应得GT911的引脚时序初始化,设置地址,最后中断引脚设置为输入模式。
2、如果设备树没有其中一个引脚,中断引脚也不会设置为输入模式。
因为设计的问题,我没有RST,所以我不要你再次时序初始化打乱我的I2C地址,所以注释掉设备树这行,然后修改驱动源码,设置为输入模式
经过这样子,那么I2C地址固定好了。
(3)第三步(寻找触发方式),这一步比较重要,没写过这个驱动的挺难发现这个问题的
结合上文,现在我的的条件是:1、没有RST复位引脚引出 2、我焊接的时候把4和5(int中断和RST复位都接在一起,上拉高电平)
看(2)设备树有个问题,他怎么把触发方式固定写成了下降沿触发,这是个问题。
修改源码,查看自己GT911触摸芯片的触发方式
编译打印出来是:上升沿触发
那就简单了,首先我硬件上接了上拉,那就一直高电平,现在你又是上升沿触发,那根本就触发不了中断,就上报不了,继续修改内核源码,改为上升沿,然后硬件Int中断就修改,不接上拉
编译,烧进去,OK,可以触摸了
3、总结
其实时间最久的还是这个虚焊,谁也没想到,最后拿示波器看I2C波形没看到,才发现的这个问题,用了一天,I2C地址改来改去都是失败读取。
软件方面的,一个上午就解决了,比较轻松,需要一定的了解,还是建议基础功要打好