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.

[参考译文] BQ76942:与 ISO1641进行隔离式 I2C 通信

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1341792/bq76942-isolated-i2c-communication-with-iso1641

器件型号:BQ76942
主题中讨论的其他器件:ISO1641ISO1640

大家好、这是我之前在隔离论坛上发表的文章的延续: https://e2e.ti.com/support/isolation-group/isolation/f/isolation-forum/1340104/5105191

我一直在尝试 使用 MCU I2C 主器件通过 ISO1641隔离器与 BQ76942建立隔离式 I2C 通信。 AFE 的 I2C 地址已通过 OTP 编程更改为0x60、尚未向其写入其他配置。

我面临的问题是、 MCU 传输的一些 SCL 脉冲无法到达 AFE。 下面是我示波器上的一幅图、它展示了这个问题:

  • 粉色:SDA2 (从器件)
  • 绿色:SDA1 (主器件)
  • 黄色:SCL2 (从器件)
  • 蓝色:SCL1 (主器件)

主器件(蓝色)发送的一些时钟不会传递到从器件(黄色)。 发生这种情况后、总线进入 BUS_BUSY 状态、看不到进一步的通信。 此外、每次我 重新启动主器件和从器件时、我都会观察到相同的波形-每次都削波完全相同的 SCL 脉冲。

  • VCC1相对于 GND1为3.3伏。 SCL1和 SDA1 使用4.7k 电阻器上拉至 VCC1。
  • SCL2和 SDA2使用2K 电阻器上拉至 VCC2。
  • VCC2短接至 VCC1、GND2短接至 GND1。
  • 在 VCC1和 GND1之间连接一个0.1uF 电容器、在 VCC2和 GND2之间连接另一个0.1uF 电容器。

我在从侧尝试了许多电阻器:2K、4.7K、6.8K、10K 和20K。 所有这些都显示出非常类似的 SCL2缺失的症状。 主侧一直有到 VCC1的4.7K 上拉电阻。

我尝试过50kHz、100kHz 和400kHz 波特率。 SCL 时钟也丢失了。

我还尝试了向 VCC2提供5V 电源、但没有效果。

有 一个更令人困惑的 行为、我希望这可能有助于缩小问题范围:

   从总线移除 AFE 后、这就是我看到的波形。 SIDE1的 SCL 和 SDA 脉冲显示在隔离器的第2侧。 但是、未看到任何停止条件;我认为这是在缺少指定从器件地址的情况下预料到的。

 

  当我重新连接 AFE、但尝试使用不同的不存在地址进行通信时、我会看到相同的波形。

通过将 MCU 的 I2C 总线直接连接到 AFE 的 I2C 总线、我成功地对 MCU 和 AFE 进行了单元测试。 这样、我就能够建立可靠的通信。

此外、我还能够使用 ISO1641隔离器与 MPU9250传感器进行通信、从而对其进行单元测试。

  1. 为什么某些 SCL 脉冲会丢失、我该如何解决该问题?
  2. 隔离论坛的 Andrew 建议、BQ76942可能正在将 SCL 信号驱动至低电平。 这是可能性吗?
  3. Andrew 还指出我的第一个图像的 ACK 位已损坏。 为什么会发生这种情况?
  4. 从我的测试来看、该问题仅在 ISO1641和 BQ76942的组合中出现。 无论是与其他 I2C 从器件一起还是绕过隔离器时、都不会发生这种情况。 这两个器件之间是否需要意识到某种交互?

谢谢。

阿鲁什

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

    您好 Arush:

    我注意到的是、 ISO1641具有单向时钟。  过去、我们在参考设计中使用了 ISO1640、它具有双向时钟支持。

    BQ76942 能够执行时钟延展、因此它可以将时钟信号拉至低电平以允许信号完成。 因此、BQ76942很可能会拉低 SCL 以执行时钟延展。

    此致、

    路易斯·埃尔南德斯·萨洛蒙

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

    您好、Luis:

    我们做了一些测试、并能够确认问题确实是由时钟延展引起的。 感谢您的帮助!

    目前、我已经能够使用 两个 ISO1641 IC 建立隔离式 I2C 通信、一个用于 SCL、另一个用于 SDA。  我通过第二个 ISO1641隔离器的 SDA1、SDA2引脚连接了 SCL 信号、这允许使用双向时钟。 这样就解决了问题。

    正如您建议的那样、我们的设计肯定会使用 ISO1640。

    谢谢。

    阿鲁什