This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] INA237:读取命令的早期 ACK 出现 I2C 错误

Guru**** 2380860 points
Other Parts Discussed in Thread: INA237
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1375083/ina237-i2c-error-with-early-ack-on-read-commands

器件型号:INA237

工具与软件:

我有一个微控制器(AMD MicroBlaze SoC)在监控环路中轮询 INA237 DIAG_ALERT 寄存器(地址0x0B)。 当 CNVRF 位为高电平(表明转换已就绪)时、启动对转换寄存器的读取。  

非常间歇性(大约每小时一次)在读取操作期间、INA237似乎将在地址字节的位8 (R/W 位)而不是位9 (ACK 位)期间确认读取命令。 当控制器尝试将 SDA 驱动为高电平以设置 READ 位时、这会将 SDA 线拉低。

这个运行方式的结果是 I2C 控制器在 SCL 空闲时挂起和停止。 然后、INA237将在 SDA 有效(ACK)状态下停止、等待 SCL 转换为低电平、表示 ACK 周期结束。 28ms 后、INA237释放 SDA 线路、从而有效创建停止条件并将总线释放回空闲状态。

早期 ACK 信号仅在与 INA237通信期间出现。 它始终出现在写入命令之后的第一个读取事务期间、用于设置读取寄存器指针。 在系统中的任何其他 I2C 器件上都不会出现此模式、这导致我们怀疑导致 INA237错误。 有关详细信息、请参阅从 I2C 总线的逻辑分析仪获取的以下图像:

图1:三个正常的完整读取事务、后跟下一个读取寄存器指针的正常写入、然后在读取操作的地址字节末尾挂起。  

图2:误差的放大视图。 您可以看到 SDA 线路上的短暂高电平脉冲、就像 INA237正在尝试在位8而不是位9期间执行 ACK 应答一样。

图3:错误的缩小视图、其中在使总线返回到空闲状态的错误之后28ms 释放 SDA。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jordan、

    从您发送的屏幕截图来看、问题可能是时间正处于工作边缘、因此大多数情况下都能正常工作、但偶尔会失败。 具体来说、您可能需要增加 HDDAT:  

    如果这样无法解决问题、您可能还需要仔细检查电压阈值、以确保 SCL 和 SDA 线路驱动足够低的电压。  

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已将保持时间增加至500ns (根据 INA237数据表、标称值为10ns 至900ns)、并通过示波器和逻辑分析仪验证了保持时间增加。 我目前正在进行隔夜测试、以验证挂起问题是否已得到解决。

    我感谢帮助和快速回复、并将确认这是否是所需的修复!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Jordan、

    好的、太棒了! 希望这可以解决该问题。

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mitch 对延长的保持时间进行了一个完整的周末测试、这似乎解决了问题。 微控制器 I2C 驱动器中的默认保持时间恰好在标称窗口的边缘、随着时间的增加、50个多小时的测试都没有出现问题。 感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Jordan、

    欢迎您的参与、很高兴它成功了!

    此致、

    Mitch