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.

[参考译文] TCA4307:添加多个从器件时由于时钟延展而导致的 I2C 总线挂起问题

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1483267/tca4307-i2c-bus-hang-issue-due-to-clock-stretching-when-adding-multiple-slaves

器件型号:TCA4307
主题中讨论的其他器件: TCAL6416R、TCAL6416

工具与软件:

您好、TI 专家:

我们面临着一个问题 I2C 主从通信设置 并需要有关是否使用的指导 TCA4307 I2C 缓冲器 您可以解决该问题。

系统概述:

  • 主器件: ESP32-S3
  • 从器件: STM32G0控制器(多个从器件)
  • I2C 总线设置:
    • 上拉电阻器: 4.7kΩ 靠近主站(也会使用进行测试 2.2kΩ )
    • 从器件会使用逐位动态添加 即插即用 概念
    • 默认从器件地址: 0x01 (由主器件动态重新分配)

面临的问题:

  1. 首先、我们进行连接 从器件1 (0x01) 稍后将其地址更改为 0x60 .
  2. 然后我们再添加 从器件2 (0x01) 并更新其地址 0x61 电机。
  3. 添加第二个从机(或后续从机)时出现问题:
    • SCL 线被持续拉低 导致整个 I2C 总线挂起。
    • 这表明其中一个从器件是 无限延展 、阻止通信。
    • 手动复位其中一个从器件可恢复通信、但添加第三个从器件则会再次导致问题。

故障排除完成:

  • 更改了中的上拉电阻器 4.7kΩ 至2.2kΩ →μ A 问题仍然存在
  • 已验证逻辑分析仪数据→μ V 时钟线被其中一个器件保持为低电平
  • 可疑原因: 总线电容在初始化期间增加或意外的从器件行为

可能的解决方案–需要确认:

我们发现了这一点 TI TCA4307 I2C 缓冲器 具有:

  • 自动时钟和数据恢复 (防止由于时钟延展而导致总线挂起)
  • 电容隔离 (添加新的从器件时减少总线负载)
  • 热插拔支持 (在不中断的情况下实现动态从器件添加)

我们要确认:

  1. TCA4307是否能解决从器件在即插即用操作期间将 SCL 拉至低电平的问题?
  2. 将 TCA4307用于多个 STM32G0从器件时、我们是否需要额外配置?
  3. 是否有任何其他 TI 解决方案更适合此场景?

对于如何高效解决此问题的任何见解或建议、我们表示感谢。
提前感谢您的支持!

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

    TCA4307会通过生成时钟脉冲来恢复卡住的总线。 但是、当时钟一直处于低电平时、这种做法不太可能有帮助。

    据我所见、地址为0x60的从器件还没有准备好。 只要固件不能正确处理 μ I²C 中断、MCU 中的 μ I²C 硬件就有可能会将 SCL 保持在低电平。 应该修复这个错误。 (作为从机、切勿忽略 μ I²C 访问;如果可能、返回 NACK、或忽略写入的字节、或在读取时返回0xFF。)

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

    尊敬的 Dhruvit:

    [quote userid="592194" url="~/support/interface-group/interface/f/interface-forum/1483267/tca4307-i2c-bus-hang-issue-due-to-clock-stretching-when-adding-multiple-slaves TCA4307能否通过从器件在即插即用操作过程中将 SCL 拉低来解决我们的问题?

    正如 Clemens 已经提到的、TCA4307有助于解决 SDA 线路上的总线阻塞问题。 TCA4307不会解决因时钟延展事件而导致的时钟卡住。  

    是 STM32G0器件对总线进行时钟延展吗? 是什么导致器件将 SCL 线路保持在低电平这么长的时间?  

    我查阅了 STM32G0数据表、找不到关于其时钟延展性质的太多文档、但我发现有一个章节指出它支持该数据。  

    此致、

    Tyler

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

    你好、Tyler

    感谢您分享 STM32G030的功能、  

    是的、STM32G030器件正在将时钟线拉低。  

    我们正在尝试将其从 ESP32-S3主侧释放、但从器件在手动复位该器件之前没有释放控制。

    这是否意味着此从设备不足以处理此类进程?

    如果您有解决该问题的任何解决方案、这对我们的发展非常有利。

    此致、

    Dhruvit  

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

    我只能建议修复 STM 固件、或者为 STM 添加一条复位线路。

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

    尊敬的 Dhruvit:

    我对 STM32G030不熟悉、因此我在这方面没有太多建议。  

    正如 Clemens 所建议的、这似乎是 STM 器件的固件问题。 如果在连接多个卡时不需要为每个 STM 添加外部/RESET 连接、我认为这是一个简单的解决方案。  

    如果您担心 IO 消耗、还可以使用 TCAL6416或 TCAL6416R 等器件扩展 MCU 的 I/O 数量。  

    此致、

    Tyler

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

    尊敬的 Tayler:

    谢谢您的建议、如果我在固件中发现任何内容、我会更新、如果没有、则重置选项仍然存在。

    此致、

    Dhruvit

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

    尊敬的 Dhruvit:

    期待您的答复。  

    此致、

    Tyler

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

    你好、泰勒、克莱门斯、

    问题已解决。

    之前、我评估了 DSO 上的电源轨、没有明显骤降。 但是、在我们的定制硬件中、我们可以选择在需要时焊接额外的电容器。

    我已将100µF 和470µF 的钽电容器放置在3.3V 电源的电源轨上。

    这两个电容值都很有用;我已经对它们进行了测试。 我在每个从器件附近放置了一个钽电容器。 由于我对五个从属器件进行了测试、因此我使用了五个钽电容器。 我首先使用470µF 进行测试、然后使用100µF、两个版本都运行良好。

    我们在运行 ESP32 I2C 线路的多个定制 STM32G030从设备上测试了大约100次的相同热插拔方法。

    时钟线没有一次拉伸。

    对于其他开发人员来说、这也是一个非常有效的解决方案。

    此致、
    Dhruvit