棋子 · 2022年01月02日

全志R329一些正常的I2C报错?

请问全志R329一些正常的I2C报错都有哪些呢

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2022年01月05日
本回答来源全志R329一些正常的I2C报错?

问题分析

1、当在dts中配置了一些i2c设备,并且在kernel_menuconfig中也选上对应的驱动,但是实际硬件中并没有连接真实的硬件,这就会导致在系统启动时,会有不少的I2C报错打印出来。
这里以一款触摸屏为例:

image.png

系统启动时触摸屏驱动会多次地使用I2C向触摸屏模块进行通信,但是由于实际硬件没有连接触摸屏,通信是一定会失败的,因此就会打印一大堆通信失败的字眼。这些其实都是正常的,并不会影响到系统正常加载。

解决办法:

如果不想要看到这么多错误的打印的话,可以尝试以下几种办法:

(1)可以修改系统启动时的打印等级,通过命令“cconfigs”跳转到方案的配置目录,然后找到文件env.cfg(这里 指的是内核版本,若是4.9内核,则配置文件名为env-4.9.cfg,在4.9以前版本的内核中都是这样命名的。只有在5.4内核中,是直接命名为env.cfg)。然后修改参数loglevel,将其值改为0,那么就可以减少很多内核打印了。

image.png

(2)在触摸屏代码中,在probe函数中初始化一些资源后,尽快地调用I2C去读取触摸屏的一些ID号或者是版本号,若读取失败后,就立即退出驱动加载。没必要继续进行其他设置相关的I2C通信。

2、使用i2c-detect工具检索某个I2C总线哪些地址存在设备时,出现很多错误通信的log信息,可能会令人误以为该I2C总线是有问题的。如下图所示:

image.png

上图命令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是不能接收串口打印的,因此自然地看不到内核错误打印。

你的回答
关注数
1
收藏数
0
浏览数
3722
极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息