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
    +关注

    关注

    27

    文章

    1313

    浏览量

    120441
  • DEBUG
    +关注

    关注

    3

    文章

    82

    浏览量

    19303
  • 系统
    +关注

    关注

    1

    文章

    973

    浏览量

    20992
收藏 人收藏

    评论

    相关推荐

    I2C规范,I2C总线原理

    ................................................... 3518 F/S 模式I2C 总线系统的双向电平转换器
    发表于 04-09 18:34

    如何调试I2C和RTC

    the I2C transaction to be messed up, but I am not sure where to look to find out how, or to debug.I've
    发表于 03-18 15:25

    到底什么是I2C

    )。TI的用于构建I2C树状图的产品组合可以分为三个功能,如图1所示:缓冲转换器、I / O扩展器和I2C开关。 图1:具有各种I2C功能设备的电
    发表于 07-23 04:45

    I2C总线简介

    本文介绍了互连集成电路( I2C)串行通信协议的基本特征和显着优势。组件之间的通信:通信协议电子系统的一个共同特征是需要在两个或三个或十个单独的组件之间共享信息,这不足为奇。工程师已经开发出许多标准
    发表于 09-06 10:16

    I2C简介

    与 SMBus 2.0 兼容。它可以用于多种用途,包括 CRC 生成和验证、 SMBus(系统管理总线)以及 PMBus(电源管理总线)。根据器件的不同,可利用 DMA 功能来减轻 CPU 的工作量二.IIC物理层它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个
    发表于 08-10 08:10

    I2C的简介

    的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。I2C是半双工通信I2C只有两根双向通信线: 一根是时钟线SCL, 一根是数据线SDAI2C总线通过上拉电阻接电源
    发表于 08-20 06:58

    什么是软件I2C和硬件I2C

    学习I2C总线通信协议,完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:1)解释什么是“软件I2C”和“硬件I2C”? (阅读野
    发表于 08-23 06:19

    I2C使用步骤

    Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备现在被广泛地使用在系统内多个集成电路(IC)间的通讯。软件I2C将芯片的两个
    发表于 08-23 06:22

    I2C怎么使用

    硬件I2C(中断方式)以STC8F2K08S2单片机为例一、I2C相关的寄存器STC8系列单片机硬件I2C使用教程(一)二、I2C中断相关的
    发表于 12-02 08:16

    讲述一些常见I2C通信正常报错现象及其解决办法

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

    STM32的I2C特性是什么?

    I2C通信协议具有哪些特点?常见I2C通信系统有哪些?STM32的I2C特性是什么?
    发表于 01-18 07:44

    I2C总线的原理是什么

    采用串行总线技术可以大大简化硬件的设计,体积减少,可靠性高。常见的总线,I2C(inter IC bus),单总线,SPI总线。I2C串行总线:(1)进行多主机通信(2)两根双线信号线
    发表于 01-18 07:36

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

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

    I2c协议和时序的相关资料推荐

    文章目录I2c协议和时序I2c介绍I2c硬件连接I2c总线的信号I2c总线写时序I2c总线读时序
    发表于 02-10 06:51

    I2C从机挂死怎么解决

    I2C几乎是嵌入系统中最为通用串行总线,MCU周边的各种器件只要对速度要求不高都可以使用。优点是兼容性好(几乎所有MCU都有I2C主机控制器,没有也可以用IO模拟),管脚占用少,芯片实现简单。
    发表于 02-14 06:34