基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
来源:互联网 发布:天谕玲珑捏脸数据 编辑:程序博客网 时间:2024/04/28 12:38
1 概述
本次任务是在飞思卡尔i.MX 6Quqd Sabrelite开发板上调试触屏驱动,触屏芯片是Goodix的gt828芯片,触屏接口是I2C。
操作系统:Android 4.0.4
内核版本:3.0.15
2 调试步骤
2.1 硬件连接
2.1.1 开发板硬件接口
开发板已提供独立的接口用于触屏,其示意图如下:
它提供了一组I2C,电源、地和一个GPIO口。
2.1.2 GT828硬件接口
触屏芯片GT828的硬件接口如下:
其中INT是中断脚,RESET是复位脚,另一个需要注意的是芯片电压是3.3V。
2.1.3 连接
熟悉了开发板和芯片的硬件接口后,下一步就是要把他们连接起来。
1) 首先是电源脚,因开发板触屏接口的电源是5V,而芯片电压是3.3V,所以要另找3.3V的电源跟芯片接上。
2) 连接I2C管脚,开发板的I2C本身已有4.7K的上拉电阻,所以不用再外接上拉电阻。
3) 把开发板的GPIO_9连到芯片的INT脚,用于控制中断。
4) 芯片的RESET需要一个GPIO来控制,但开发板的触屏接口的GPIO脚只有一个GPIO_9,所以另找一个GPIO脚来控制RESET。
连接方式如下:
1 VCC33 => 3.3V
2 GND => 接地
3 SDA => 6 I2C3_SDA
4 SCL => 5 I2C3_SCL
5 INT => 4 GPIO9
6 RESET => DISP0_CONTRAST
注:INT脚和RESET脚不用再外接上拉电阻。
2.2 驱动修改
1、 把厂家提供的驱动文件gt813_827_828.c和gt813_827_828.h文件放到内核目录Kernel_imx/drivers/input/touchscreen
2、 修改gt813_827_828.h头文件。
1) 修改宏开关:
2) 修改INT和RESET管脚定义
其中MX6Q_SABRELITE_TP_RST 和MX6Q_SABRELITE_CAP_TCH_INT1定义在arch/arm/plat-mxc/include/mach/sabrelite.h文件中:
这两个管脚的定义是怎么样来的呢?参考硬件连接:
5 INT => 4 GPIO9
6 RESET => DISP0_CONTRAST
首先看INT脚,连到CPU的GPIO9,我们在i.MX 6Quad的datasheet上搜索GPIO_9,找到IOMUXC_SW_MUX_CTL_PAD_GPIO09,它的MUX_MODE描述为:
ALT5模式为GPIO1_IO09,所以配置为IMX_GPIO_NR(1, 9),同理RESET脚配置为IMX_GPIO_NR(2, 0)。
3) 修改分辨率:
4) 修改其他宏定义:
3、 配置I2C信息
在arch/arm/mach-mx6/board-ma6q_sabrelite.c中找到mxc_i2c2_board_info,在里面添加:
修改完成后,像这样:
再配置i2c速率为400kb:
4、 编译。
1) 在touchcreen目录下的Makefile中添加:
2) 在同目录下的Kconfig文件中添加以下内容:
3) 配置menuconfig
在kenel目录下执行:make menuconfig
进入配置界面,把gt828的驱动的开关打开,示意如下:
4) 在kenel目录下执行make uImage进行编译,编译成功后生成uImage文件,紧接着在android源码目录下执行make bootimage生成boot.img文件
5) 把boot.img文件烧录到tf卡中,启动系统。
3 软件调试
1、 启动系统后,发现系统的串口打印有问题,只能用adb登陆后用dmesg命令查看内核消息,发现内核一直输出这样的log:
表示i2c通讯有问题,检查了一下管脚,发现i2c的SDA和SCL互相调换了,再重新焊接,把sda和scl接好。
2、 重新启动系统,发现i2c仍然不能通讯,log如下:
这个错误是在触屏驱动的终端函数中产生的。继续查看log,返现dmesg的输出没有包含gt828驱动初始化函数的打印,因gt828的初始化函数会打印如下信息:
我怀疑是dmesg打印不完全,那么要看完整的内核log只能把开发板的串口输出问题解决了。
3、 经过无数次尝试,终于把开发板的串口输出问题解决,解决方法是修改u-boot的串口输出端口为ttymxc1,原来的端口是ttymxc0。
4、 重新启动系统,查看串口打印log,发现gt828的驱动初始化信息仍然没出来。经过数次尝试,发现在gt828的驱动加载函数把late_initcall修改为module_init即可,修改如下:
修改后,编译、启动系统,发现驱动初始化log如下:
从IC VERSION:00_0000可以判断i2c通讯不正常。
于是再次检查软件、硬件,经过n此尝试,确定软件是没问题的,硬件的RST、INT脚也工作正常,剩下的就可能是i2c硬件问题了。
果断换一个i2c口,把原来的i2c3改为i2c2。硬件改好后,在board-ma6q_sabrelite.c中找到mxc_i2c1_board_info,在里面添加:
重新编译、烧录系统。
5、 启动系统后发现log正常,触屏工作正常,大功告成!
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 基于飞思卡尔i.MX 6DualLite 开发板的触摸屏调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- 飞思卡尔i.MX 6Quad Android 4.0.4的3G驱动移植
- 飞思卡尔i.MX 6Quad Android 4.2.2的LVDS屏幕驱动移植
- 飞思卡尔i.MX 6Quad Android 4.0.4的3G驱动移植
- 飞思卡尔i.MX 6Quad Android 4.0.4的3G驱动移植
- 飞思卡尔i.MX 6Quad Android 4.2.2的LVDS屏幕驱动移植
- java 中>>>的含义
- 契约——程序足够快
- 面向对象(上)
- 1034. Head of a Gang (30)
- OpenStack排错之虚拟机之间的fip,有的通,有的不通
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
- 工作备忘
- HMM学习
- 浅谈MD5加密算法中的加盐值(SALT)
- uva1587 判断所给的六个面能否构成长方体
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
- HDU - 3729 二分图最大匹配
- CodeForces 59DTeam Arrangement 模拟
- 洛谷 P1288 取数游戏II