I2C调试中的错误分析

在调试Linux驱动时,经常会用到I2C总线。通常情况下,都会调用Linux I2C core的数据收发函数,老刘整理了几个常见的错误及应对方式,供大家参考:

1.EOPNOTSUPP错误 — Operation not supported on transport endpoint

  • 由于Linux的错误号一般都是负数,所以在return时,代码返回的是-EOPNOTSUPP,该值的定义为95。

  • 这个错误原因主要是使用了不支持的方法,从软件方面入手即可。

2.EAGAIN错误 — Try again

  • 该值的定义为11,重试错误,这个时候,表明I2C控制器可以操作I2C总线,只不过没有得到器件的响应。

  • 解决这类错误请先从设备连接上入手,看看I2C设备是否连接正常;

  • 确认I2C器件的地址是否正确,需要注意:I2C一般使用的是7bit地址,在有些设备明确写明是7位地址,而有些设备写的不是很清楚,此时可以尝试将设备手册中的地址右移1位,得到7位器件地址;对于10bit的器件,发送时需设置I2C_M_TEN参数,但这类设备似乎很少见。

3.ETIMEDOUT错误 — Connection timed out

  • 该值的定义为110。

  • 这类错误一般是由于I2C总线错误引起的,I2C控制器无法正常操作总线,一般要先检查是否有什么原因导致I2C是否被意外拉低,外设挂的很多时,还需要考虑I2C的驱动能力是否足够,上拉电阻是否到位等因素。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

346 views 暂无评论