全志平台A40I : I2C通讯问题调试笔记

简介: 全志平台A40I : I2C通讯问题调试笔记

在全志平台上进行I2C调试时,我们可能会遇到各种问题。以下是我在调试过程中的一些笔记和经验分享,希望对你有所帮助。

在全志平台上使用I2C时,需要注意以下几点:

1. I2C工具的移植。

在全志平台上,默认情况下,并没有提供i2cdetect等工具,需要自己移植。移植的步骤如下:

  • 下载i2c-tools源码包,并解压。
  • 放到android external目录 , 执行 mmm external/i2c-tools-4.2/。
  • 什么 你告诉你是linux系统 , 那就改下makefile 做交叉编译就可以拿到这些文件了。

 

2. I2C节点的配置。

       在全志平台上,每个I2C控制器都有一个对应的节点,如i2c0i2c1i2c2等。每个节点都有一个属性twi_id,用来指定该节点使用哪个I2C控制器。例如,如果twi_id = <3>,则该节点使用i2c3控制器。此外,每个节点还需要配置其所连接的从设备的地址和驱动名,如gt9xx@5d等。这些配置信息可以写在设备树(DTS)文件或者系统配置(sys_config)文件中。如果配置正确,那么在系统启动后,就可以在/sys/class/i2c-adapter/i2c-3/3-005d等目录下看到相应的设备文件。

3. I2C功能的复用。

       由于全志平台的引脚有限,很多引脚都有多种功能,需要通过复用(muxing)来选择。例如,PI0和PI1引脚可以作为I2C3的SCL和SDA信号线,也可以作为普通GPIO。要想使用I2C3功能,就需要将PI0和PI1引脚的功能设置为3(即TWI3)。这个功能设置可以在DTS文件或者sys_config文件中指定,也可以通过修改内核参数来实现。例如,在/proc/sys/debug/sunxi_pinctrl目录下有一个文件function,可以用来读取或者修改引脚的功能。如果想将PI0引脚的功能设置为3(即TWI3),可以执行以下命令:

echo PI0 3 > function

如果想查看PI0引脚的当前功能,可以执行以下命令:

如果输出结果是:

130|a40-p1:/ # mount -t debugfs debug /proc/sys/debug # 挂载 debugfs 文件系统
130|a40-p1:/ # cd /proc/sys/debug/sunxi_pinctrl       # 进入全志的引脚控制目录
130|a40-p1:/proc/sys/debug/sunxi_pinctrl # mount -t debugfs debug /proc/sys/debug
130|a40-p1:/proc/sys/debug/sunxi_pinctrl # cat sunxi_pin_configure
pin[PI1] funciton: 3
pin[PI1] data: 1
pin[PI1] dlevel: 1
pin[PI1] pull: 0
 
a40-p1:/proc/sys/debug/sunxi_pinctrl # cat sunxi_pin_configure
pin[PI0] funciton: 1
pin[PI0] data: 0
pin[PI0] dlevel: 1
pin[PI0] pull: 0
a40-p1:/proc/sys/debug/sunxi_pinctrl # echo PI0 3 > function
a40-p1:/proc/sys/debug/sunxi_pinctrl # cat sunxi_pin_configure
pin[PI0] funciton: 3
pin[PI0] data: 0
pin[PI0] dlevel: 1
pin[PI0] pull: 0

那么说明PI0引脚已经设置为TWI3功能。

4. I2C设备的检测。

如果想要测试I2C设备是否正常工作,可以使用一些工具来进行检测。例如,在Linux系统中,有一个工具叫做i2cdetect,它可以扫描指定的I2C总线上的所有从设备地址,并显示出来。例如,如果想要扫描i2c3总线上的所有从设备地址,可以执行以下命令:

i2cdetect -ya 3

如果输出结果类似于: 如果是UU说明被占用 , 如果是比如5d , 说明检测到 但是没用driver用。

130|xxx-p1:/proc/sys/debug/sunxi_pinctrl # i2cdetect -ya 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

如果输出这个内容

1|a40-p1:/ # i2cdetect -y 1
i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
1|a40-p1:/ # i2cdetect -y 2
i2cdetect -y 2
Error: Could not open file `/dev/i2c-2' or `/dev/i2c/2': No such file or directory
1|a40-p1:/ # i2cdetect -y 3
i2cdetect -y 3
Error: Could not open file `/dev/i2c-3' or `/dev/i2c/3': No such file or directory

提示无法打开/dev/i2c-1/dev/i2c/1文件。这可能是因为我们的系统中没有I2C总线1,或者I2C总线1没有正确地配置。

linux/drivers/i2c/Makefile 有个CONFIG_I2C_CHARDEV=y宏需要打开。

以上没问题那么说明i2c3总线上有一个从设备,其地址是0x5d,即gt9xx触摸屏。如果输出结果中没有显示任何从设备地址,那么可能有以下几种原因:

  • I2C节点的配置错误。例如,twi_id指定的I2C控制器和实际连接的不一致,或者从设备的地址和驱动名写错了。
  • I2C功能的复用错误。例如,I2C信号线所对应的引脚的功能没有设置为TWI,而是设置为了其他功能,导致信号无法传输。
  • I2C硬件的连接错误。例如,I2C信号线没有正确地连接到从设备的SCL和SDA引脚上,或者信号线有断路、短路等问题,导致信号干扰或者丢失。

如果遇到这些问题,可以通过检查DTS文件、sys_config文件、内核参数、引脚功能、硬件连接等方式来排查和解决。

以上就是我对全志I2C调试笔记的一些补充和注释,希望对你有帮助。如果你还有其他问题欢迎留言。

相关文章
全志平台A40I GPIO操作:adb通过debugfs控制GPIO
全志平台A40I GPIO操作:adb通过debugfs控制GPIO
486 0
|
存储 传感器 Linux
Linux应用开发基础知识——I2C应用编程(十二)
Linux应用开发基础知识——I2C应用编程(十二)
604 0
Linux应用开发基础知识——I2C应用编程(十二)
|
Android开发 数据安全/隐私保护 芯片
全志平台A40I : TWI2通讯验证
全志平台A40I : TWI2通讯验证
216 2
|
测试技术 Linux Android开发
i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset
本文介绍了i2ctools工具集的使用,包括i2cdetect、i2cdump、i2cget和i2cset,这些工具有助于I2C设备的开发和调试,通过检测设备、读写寄存器和数据块来提高开发效率。
2731 1
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
935 0
|
编解码 安全 Ubuntu
Android Selinux 问题处理笔记
这篇文章是关于处理Android系统中SELinux权限问题的笔记,介绍了如何通过分析SELinux拒绝的日志、修改SELinux策略文件,并重新编译部署来解决权限问题,同时提供了一些SELinux的背景知识和实用工具。
863 0
|
Linux API 芯片
Linux GPIO 和 Pinctrl 子系统的使用(十四)
Linux GPIO 和 Pinctrl 子系统的使用(十四)
451 1
|
传感器 编解码 Linux
V4L2框架 | MIPI Camera指令调试笔记
V4L2框架 | MIPI Camera指令调试笔记
6105 2
|
存储 内存技术
MTK flash配置方法(转)
MTK flash配置方法(转)
244 1
|
Android开发 内存技术
Android 通过tinyalsa调试解决录制和播放音频问题
Android 通过tinyalsa调试解决录制和播放音频问题
970 1