【FAQ】全志R329一些正常的I2C报错
-
问题背景
在使用I2C通信的时候,经常会出现一些I2C通信失败的报错,但是呢,有一些报错是正常的,并不会影响到系统或者模块正常工作的。下面就讲述一些常见的I2C正常报错。
问题分析
1、当在dts中配置了一些i2c设备,并且在kernel_menuconfig中也选上对应的驱动,但是实际硬件中并没有连接真实的硬件,这就会导致在系统启动时,会有不少的I2C报错打印出来。
这里以一款触摸屏为例:系统启动时触摸屏驱动会多次地使用I2C向触摸屏模块进行通信,但是由于实际硬件没有连接触摸屏,通信是一定会失败的,因此就会打印一大堆通信失败的字眼。这些其实都是正常的,并不会影响到系统正常加载。
解决办法:
如果不想要看到这么多错误的打印的话,可以尝试以下几种办法:
(1)可以修改系统启动时的打印等级,通过命令“cconfigs”跳转到方案的配置目录,然后找到文件env*.cfg(这里*指的是内核版本,若是4.9内核,则配置文件名为env-4.9.cfg,在4.9以前版本的内核中都是这样命名的。只有在5.4内核中,是直接命名为env.cfg)。然后修改参数loglevel,将其值改为0,那么就可以减少很多内核打印了。
(2)在触摸屏代码中,在probe函数中初始化一些资源后,尽快地调用I2C去读取触摸屏的一些ID号或者是版本号,若读取失败后,就立即退出驱动加载。没必要继续进行其他设置相关的I2C通信。
2、使用i2c-detect工具检索某个I2C总线哪些地址存在设备时,出现很多错误通信的log信息,可能会令人误以为该I2C总线是有问题的。如下图所示:
上图命令i2cdetect -y 2的作用是:检索I2C2总线上所有的I2C设备。这里的打印其实都是正常的,检索是通过cpu主动向全部I2C地址读写数据来检测的。可能硬件上一根I2C总线就连接了一个I2C设备,只会占用一个I2C设备地址,那么其他地址都是为空的。自然而然地,与这些空的设备地址通信肯定是失败的,因此也一定会有错误的打印打出来。
解决办法:
(1)减少系统内核打印等级,进入内核打印等级修改节点“printk”的目录:
cd /proc/sys/kernel
ls
cat printk
echo 2 > printk
一般内核打印等级为4,当输入到printk的值小于4时,即可把大于等于4的打印等级全部关闭。(2)使用adb去调试:
内核打印是通过串口打印出来的,若通过usb连接开发板,通过adb调试进入系统调试界面,adb是不能接收串口打印的,因此自然地看不到内核错误打印。 -
-
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号