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.

[参考译文] BQ40Z80:从 MCU 发送 SEAL 命令后 SBbus 通信线路死锁(STM32F103)

Guru**** 2595805 points
Other Parts Discussed in Thread: BQ40Z80, EV2400, BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/984483/bq40z80-sbbus-communication-line-deadlock-after-send-seal-command-from-mcu-stm32f103

器件型号:BQ40Z80
主题中讨论的其他器件: EV2400BQSTUDIO

为了控制 bq40Z80、我们使用 MCU 的 I2C 通信来监控电压和电流数据。
它会向 bq40z80发送一些控制命令以了解电池特性。
到目前为止、STM32F103 (MCU)已成功执行 I2C 通信、我已正确获取所需的数据。

但是、在发送命令来密封 bq40Z80器件后、器件会死锁。
在 SEAL、UNSEAL 和 FULL ACCESS 命令中、仅在 SEAL 命令中切断通信。

更详细地说、如果我在发送 SEAL 命令后发送一个命令来监视标志状态、CLK 线会进入低电平、然后不会恢复。
即使在重新初始化 MCU 的 I2C 线路的 GPIO 并复位 MCU 之后、bq40z80仍处于死锁状态。

有趣的现象是、在这种状态下、如果我断开与 MCU 的通信线、连接 EV2400并驱动 BM Studio、我可以正常获取 bq40z80的数据。  
此时、BM Studio 指示 bq40z80已进入密封模式。
然后、如果断开 EV2400并再次将其连接到 MCU、则通信将恢复、并且可以正常接收其他数据。

这一未知现象让我困扰了好几天。
我正在考虑在 MCU 和 bq40z80之间添加总线缓冲器 IC 来解决此问题。
如果有人有解决类似问题的经验、请分享。

此致。

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

    您好!

    您能否在器件处于死锁状态时上传逻辑波形。 您是否看到 STM32的 nack?

    您可能需要将 STM 波形与 bqStudio 波形进行比较。

    此致、

    Nick

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

    这是与 SEAL 命令相对应的 I2C 通信波形。
    首先、两者看起来截然不同。
    但是、其他读取命令、unseal 命令和完全访问命令都正常运行。

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

    您的系统似乎引入了某种延迟(您在哪里有问号)、这是否仅发生在 SEAL 命令中?

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

    它看起来是每个命令中的问号。 但是、此问题仅与密封说明有关。

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

    我在您的建议的启发下解决了这个问题。


    可以通过两种主要方式总结问题的解决方案。
    为了最大限度地减少传输之间的时间延迟、通过利用 MCU 的 DMA 模式来实现连续数据传输。
    2.在密封命令包中添加了 CRC 数据。 (有 PEC)
    出于未知原因、在应用 PEC 后传输 SEAL 命令数据后、必须将 PEC 添加到所有命令中、以便正常运行。

    感谢你的帮助。