0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C子系统debug的常见问题

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-22 14:52 次阅读

常见问题

1、同一条 i2c bus 上所有的外设的 i2c addr 要不同

1)相同 address 注册时冲突

[2.059184][xxx]i2c i2c-1:Failed to register i2c client 24c02 at 0x51(-16) 
[2.059189][xxx]i2c i2c-1:Can't create device at 0x51

对应的错误码是 -16

/kernel-5.10/include/uapi/asm-generic/errno-base.h

#define EPERM   1 /* Operation not permitted */
#define ENOENT   2 /* No such file or directory */
#define ESRCH   3 /* No such process */
#define EINTR   4 /* Interrupted system call */
#define EIO   5 /* I/O error */
#define ENXIO   6 /* No such device or address */
#define E2BIG   7 /* Argument list too long */
#define ENOEXEC   8 /* Exec format error */
#define EBADF   9 /* Bad file number */
#define ECHILD  10 /* No child processes */
#define EAGAIN  11 /* Try again */
#define ENOMEM  12 /* Out of memory */
#define EACCES  13 /* Permission denied */
#define EFAULT  14 /* Bad address */
#define ENOTBLK  15 /* Block device required */
#define EBUSY  16 /* Device or resource busy */
......

可以执行 ls /sys/bus/i2c/devices 查看对应的 i2c-1 下是否已经有注册相同的 address 的外设

若返回 -11,-EAGAIN。代表总线正忙,或无法申请到总线锁。如果总线正忙,请 retry 等待,或查看是哪个 device 一直在发送。如果无法申请到总线锁,请查看是否在中断函数或原子上下文调用了 i2c_transfer。

2)隐藏的 i2c address,即外设存在多个 i2c addr 或外设 HW bug,导致 i2c 通讯异常。

示例:eeprom 在 i2c-1 上注册了 0x50 地址,而 type c 虽然注册到 0x60 地址,但对 0x50 也能产生响应,type c 拉低了 SDA ,从而 timeout 。

debug 方法:

  1. 软件上确认数据及对应的 driver 是否正确。
  2. 硬件上逐一去掉外设,确认是哪个外设导致。

2、示波器 ACK 的地方有毛刺

slave 在第 9 个 clk 产生 ACK 应答后,换成 mater 端来控制时产生的毛刺。此毛刺不会影响 I2C 总线读写时序,无需处理。

即 slave 和 master 控制总线切换间隔,没有人控制总线,带来的毛刺。

**3、**半高电平

在外接上拉电阻的情况下,有 enable 内部下拉电阻,导致总线上有半高电平。

4、总线上电平拉不到地。

  1. master 端发送数据时电平拉不到地,可以增大驱动电流或者上拉电阻。
  2. slave 端拉不到地,可以咨询供应商看是否能增大 slave 端驱动电流或者上拉电阻。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1415

    浏览量

    121741
  • DEBUG
    +关注

    关注

    3

    文章

    88

    浏览量

    19639
  • 系统
    +关注

    关注

    1

    文章

    990

    浏览量

    21144
收藏 人收藏

    评论

    相关推荐

    Linux内核中I2C系统的设计思路

    [ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图。在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,没有一个清晰的思路。所以从高层级来分析一下
    发表于 09-06 09:40 320次阅读
    Linux内核中<b class='flag-5'>I2C</b><b class='flag-5'>系统</b>的设计思路

    linux I2C子系统的相关资料分享

    文章目录linux I2C子系统框架在设备树中添加从设备信息,mpu5060I2C driver 程序的编写mpu6050 I2C程序具体实现linux
    发表于 02-10 06:06

    i2c总线ppt(I2C总线器件应用)

    I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理I2C总线系统结构I2C总线
    发表于 08-13 17:34 0次下载

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    发表于 04-23 13:55 36次下载

    i2c

    单片机i2c总线操作;单片机i2c总线操作;单片机i2c总线操作;
    发表于 05-17 11:09 35次下载

    Linux内核中I2C子系统的整体视图

    本文通过阅读内核代码,来梳理一下I2C子系统的整体视图。在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,没有一个清晰的思路。所以从高层级来分析一下
    的头像 发表于 12-31 10:40 2036次阅读
    Linux内核中<b class='flag-5'>I2C</b><b class='flag-5'>子系统</b>的整体视图

    linux I2C子系统(及相关程序设计MPU6050)

    文章目录linux I2C子系统框架在设备树中添加从设备信息,mpu5060I2C driver 程序的编写mpu6050 I2C程序具体实现linux
    发表于 12-06 13:36 9次下载
    linux <b class='flag-5'>I2C</b><b class='flag-5'>子系统</b>(及相关程序设计MPU6050)

    嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序,I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接

    文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号I2c总线写时序I2c总线读时序
    发表于 12-06 14:06 17次下载
    嵌入式内核及驱动开发-09IIC<b class='flag-5'>子系统</b>框架使用(<b class='flag-5'>I2C</b>协议和时序,<b class='flag-5'>I2C</b>驱动框架,<b class='flag-5'>I2C</b>从设备驱动开发,MPU6050硬件连接

    硬件I2C与模拟I2C

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
    发表于 12-28 19:14 78次下载
    硬件<b class='flag-5'>I2C</b>与模拟<b class='flag-5'>I2C</b>

    可编程USB转 UART/I2C Wire常见问题及注意事项

    可编程USB转 UART/I2C /SMBusS/SPI/CAN/1 -Wire适配器USB2S 常见问题及注意事项
    的头像 发表于 08-23 14:38 1255次阅读

    有关I2C隔离器的六大设计问题

    我们整理了一些关于隔离I2C设计的FAQ,供您参考。这些见解是根据德州仪器在线支持社区中有关I2C隔离器的常见问题而提供的。希望这些信息能够帮助工程师在设计过程中解决信号和电源隔离的问题。
    的头像 发表于 07-23 15:39 1877次阅读
    有关<b class='flag-5'>I2C</b>隔离器的六大设计问题

    I2C子系统ACK error

    在应该收到 ACK 信号的时候没有收到 ACK 信号,i2c controller 就会产生一个 ACK error 的中断,告诉 i2cdriver 发生了 ACK error。通常
    的头像 发表于 07-22 14:39 1363次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>子系统</b>ACK error

    I2C debug出现问题怎么解决

    RK 平台 I2C debug 1、I2C 通信失败,出现 log: “timeout, ipd: 0x00, state: 1” 请检查硬件上拉是否给电。 2、调用
    的头像 发表于 07-22 15:00 2693次阅读

    I2C子系统SW Architecture

    I2C SW Architecture 【driver 驱动层】由普通驱动工程师负责,【i2c 核心层】由 Linux 提供,【i2c 核心层】以下由芯片原厂负责。 I2C
    的头像 发表于 07-22 16:01 655次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>子系统</b>SW Architecture

    I2C子系统几个主要的结构体

    I2C Data Structure 我们要搞懂一个 Linux 子系统,必须研究它的数据结构,搞懂每个结构体存储了什么东西,才能梳理清楚该子系统的架构。 I2C
    的头像 发表于 07-22 16:04 596次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>子系统</b>几个主要的结构体