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

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

3天内不再提示

无法读取I2C地址的调试案例

CHANBAEK 来源:硬件系统架构师 作者: Timothy 2023-11-02 18:24 次阅读

引言:调试I2C从器件的第一步就是尝试去读它的地址,如果无法读取地址或者向其发送读写命令却没有收到ACK回馈,都说明与器件通讯失败。常规发生无法读取I2C地址的情况时,第一怀疑点往往是硬件互联出现问题,本节分享一个和软件相关的调试案例。

1.问题背景

一枚视频转换芯片的I2C连接前端MCU上,调试时发现I2C通讯失败,同一总线上的另外两个器件地址均正常。发送读写命令波形也没有ACK反馈,检查过硬件互联和Reset配置,均没有问题。

2.怀疑点和排除过程

总线器件过多

考虑到一个I2C上挂载了三个从器件,分支和节点过多,并且走线也不短,所以怀疑是从器件过多导致Cload过大,无法和远端通讯成功。于是摘掉和另外两个器件的互联电阻,再次尝试,依然无法通讯,并且测量得到的波形质量并不差,如图1-所示,我们向地址0X8A发送命令,却没有ACK回馈,说明并不是总线负载电容问题。

图片

图1-1:向设备发送读写命令波形

复位操作

虽然上电后复位Reset就为高电平,但是尝试在从器件启动后再复位一次,再尝试读取I2C地址,依然无法读到,侧面说明和时序没有关系。为了验证无法通讯是不是器件本身的问题,将其与MCU断开,直接飞线I2C通过盒子连接到上位机,发现可以读到地址,并且读写寄存器均正常,如下图1-2是逻辑分析仪抓取到的波形图,有明显的ACK标志。

图片

图1-2:与上位机通讯抓取的读写波形

排除掉硬件互联和引脚配置以及器件本身的问题,那么只有一个问题就是MCU端的I2C参数配置出现问题。

主器件I2C参数

那么主器件I2C涉及哪些参数呢,总线速度100KHz(标准),400KHz(快速),1MHz(超快速)、Data setup Time、Data hold Time等等这些参数可调,如图1-4抓取上位机和器件通讯成功的波形,测试的Data hold Time大概为560ns,远远大于图1-5器件手册中的10-250ns,说明手册中的此参数标注和实际不符,而MCU端I2C配置的是100ns,所以才通讯失败。

图片

图1-3:与上位机通讯波形时间参数测量

图片
图1-4:与上位机通讯波形时间参数测量

图片

图1-5:器件手册I2C时间参数

3.如何修正

如表1-5联系原厂核对修改后的参数,修改主机I2C设置的Data hold time即可。

图片

图1-6:更正后的时间参数

4.总结

对于支持不同通讯速率的I2C设备,高速率的往往可以兼容低速率的,比如1MHz-I2C的A器件,它可以接收来自100KHz、400KHz、1MHz的速率信息,但是如果与它互联的B器件只支持400KHz,那么B只能接收A发送100KHz、400KHz的信息。而100KHz、400KHz、1MHz的时间参数都有差异,在调试时不仅速率要匹配,与速率相关的时间参数也必须修改以保持兼容,因为芯片里面的I2C收发器ADC转换速率与频率f息息相关,而ADC转换速率就决定着这些时间参数。

图片

图1-7:I2C主从机基本结构

从图1-8可以明显看出,三种速率下的数据保持时间和数据设置时间均有明显的差异,以上述参数为例,Data hold time实际为560ns,说明器件仅支持到快速模式,但实际设置为100ns,而器件并不能支持这么快的采样速度,所以无法识别Bit位,因此仅仅保持SCK一致,通讯也会fail。

图片

图片

图1-8:几种I2C模式的时间参数

另外有的器件支持好几种系统时钟(Syetem Clock),这时候其I2C时间参数可能就以System Clcok为单位,而不是直观的us/ms,如图1-9所示:

图片

图1-9:和系统时间挂钩的I2C参数

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17316

    浏览量

    352506
  • 调试
    +关注

    关注

    7

    文章

    589

    浏览量

    34048
  • 通讯
    +关注

    关注

    9

    文章

    911

    浏览量

    35053
  • 总线
    +关注

    关注

    10

    文章

    2900

    浏览量

    88349
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1495

    浏览量

    124468
收藏 人收藏

    评论

    相关推荐

    MM32F013x上实现I2C地址的功能应用

    I2C中,通信是借助设备地址寻址实现的,大致可以分为两类:一对多、多对多通信。在多主机通信时,从机如果想接收多个主机的数据,就需要使用到从机多地址的功能。 本文是针对在MM32F013x上实现
    发表于 01-05 11:43 2137次阅读

    I2C地址跳变问题的调试案例

    引言:I2C作为使用最为广泛的通讯接口,调试各类I2C器件,大家应该都很轻车熟路。一般对于外挂电阻配置器件的I2C地址,例如电阻上拉之后,器
    的头像 发表于 11-22 10:51 1939次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>跳变问题的<b class='flag-5'>调试</b>案例

    I2C地址切换电路

    I2C地址切换电路
    发表于 02-22 11:15 1530次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>切换电路

    arduino读取I2C总线上连接设备的地址

    这两天研究了一下I2C总线,发现有好多I2C设备的地址并不知道,当然有的可以在网上查的到,但是如果遇到用过的I2C器件,设备地址被修改过,那
    发表于 11-23 16:58 11.2w次阅读

    mpu6050对应i2c地址是什么_如何读取数据

    本文主要介绍了mpu6050对应i2c地址是什么,并通过stm32的硬件读取mpu6050的数据。MPU6050 的 I2C 地址是 0xD
    发表于 12-11 16:04 2.5w次阅读
    mpu6050对应<b class='flag-5'>i2c</b><b class='flag-5'>地址</b>是什么_如何<b class='flag-5'>读取</b>数据

    如何将I2C地址左移1位

      I2C总线读写中,新人会比较困惑,为什么I2C地址要左移1位?这是i2c协议决定的,i2c地址
    发表于 08-05 17:34 4次下载
    如何将<b class='flag-5'>I2C</b>从<b class='flag-5'>地址</b>左移1位

    I2C/SMBus地址转换器

    I2C/SMBus地址转换器
    发表于 04-20 10:44 5次下载
    <b class='flag-5'>I2C</b>/SMBus<b class='flag-5'>地址</b>转换器

    嵌入式linux应用读写i2c示例

    long arg);cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_SET_SPEED几个选项;I2C
    发表于 11-01 16:57 12次下载
    嵌入式linux应用读写<b class='flag-5'>i2c</b>示例

    I2C总线读取MPU6050

    基于MSP430处理器的 I2C总线读取MPU6050传感器数据
    发表于 12-06 13:36 15次下载
    <b class='flag-5'>I2C</b>总线<b class='flag-5'>读取</b>MPU6050

    I2C扫描仪之如何在Arduino上查找I2C地址

    电子发烧友网站提供《I2C扫描仪之如何在Arduino上查找I2C地址.zip》资料免费下载
    发表于 01-31 10:19 2次下载
    <b class='flag-5'>I2C</b>扫描仪之如何在Arduino上查找<b class='flag-5'>I2C</b><b class='flag-5'>地址</b>

    如何提高I2C调试效率?

    一般情况下,我们想要调试这类 I2C 器件,都需要先找一块主控 MCU 板卡,用杜邦线将 I2C 器件连接到板卡上,然后编写 MCU 代码,需包含 I2C 软件驱动以及测试用例,最后将
    发表于 06-08 13:00 1492次阅读
    如何提高<b class='flag-5'>I2C</b><b class='flag-5'>调试</b>效率?

    Android Things I2C地址扫描器

    电子发烧友网站提供《Android Things I2C地址扫描器.zip》资料免费下载
    发表于 06-13 17:02 0次下载
    Android Things <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>扫描器

    I2CI3C的区别有哪些

    线。 I2C 传输速度最高 3.4MHz,I3C 可以 12.5MHz +。 I3C 向下兼容 I2C,但不兼容 10bit 的 I2C
    的头像 发表于 07-22 16:20 7284次阅读
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>的区别有哪些

    i2c采样是上升沿吗?

    i2c采样是上升沿吗?  I2C采样是指在I2C总线上对数据进行采样。在I2C总线上,数据的传输是通过2条线传递。一条是时钟线(SCL),另
    的头像 发表于 09-19 17:16 2896次阅读

    I2C总线设备地址设置方法

    I2C总线是一种广泛使用的串行通信协议,它允许多个设备在两条线上(数据线SDA和时钟线SCL)进行通信。每个设备都有一个唯一的地址,以确保数据能够正确地发送到目标设备。 I2C地址概述
    的头像 发表于 01-17 15:17 263次阅读