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.

[参考译文] BQ76952:I2C -永久锁定

Guru**** 2394295 points
Other Parts Discussed in Thread: BQ76952

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1482410/bq76952-i2c---permanent-lockup

器件型号:BQ76952

工具与软件:

您好!

我正在运行 BQ76952、我已将其配置为400kHz CRC 模式(带 CRC 的 I2C FAST)。 我有一个定制电路板、设置有 STM 微控制器、并且 BQ76952在 I2C 总线上通信。 BQ76952处于稳定的环境工作条件(温度检测20C、电芯电压为3.3V、放电电流为0.003A)

我正在运行基本的 I2C 通信压力测试、其中 STM 重复发送"DEVICE_NUM"子命令、读取相关数据并检查是否存在错误。 我正在以~50Hz 的频率发送该子命令、子命令的"写入"和"读取"部分之间为40ms

经过一段长时间的随机(有时是数小时、数天或数周)后、BQ76952开始拒绝这些命令、并且后续的每个子命令都是 NAK 'd。 我已经在遇到 NAK 后成功添加了手动 I2C 通信延迟(即100毫秒延迟)、但这些延迟似乎只是降低了这些锁定的频率、而不是完全结束它们。 虽然、将整个电路板断电并将其放回锁定位置并允许进行进一步通信、但这对于该产品不是实用的解决方案

我在数据表中没有看到任何关于此行为的信息、是否缺少内容? 任何可能解决此问题的设置或命令? 我看到 BQ76952上有一个2s 超时、我可以将通信延迟这么长的时间、但这不是理想的解决方案、因为这是锁定在所有 I2C 通信之外的很长时间。  我还可以将 I2C 配置切换为启用超时的配置、但这也不理想、因为该产品需要 CRC 校验的准确性

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

    Mike、您好!

    当您说锁定时、您是指在 SDA 中一直处于低电平? 为了确保您的 MCU 是否具有时钟延展? 您能否共享一个与此相关的逻辑分析仪文件? 您要发送哪些子命令/命令?

    您是否尝试过生成8+1时钟信号以尝试释放总线? 上一篇论坛帖子可能能够帮助您: 如何通知 I2C 目标器件释放总线

    此致、
    Alexis

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

    您好、Alexis、

    我对您的问题有一些解答、并提供了一些进一步的背景信息:

    (在中) SDA 卡在低电平

    我之前在开发过程中已经对此进行了详细阐述、我已在您分享的论坛帖子中实施了该解决方案- 8+1时钟周期 SCL 切换。 所以-这是我之前遇到的一个问题,我已经解决,我赞赏这个建议

    当您说已锁定时、

    我的意思是 BQ 不会在其 I2C 地址做出响应。 我正在尝试读取"DEVICE_NUM"子命令。 微控制器尝试发送0x08 (I2Caddr)+ 0x3E + 0x10 + 0x00、但它从未超过0x08 (I2C addr)并获得"否定确认"(请参阅下面)

    为了确保您的 MCU 是否具有时钟延展?

    我的 MCU 具有时钟延展功能、这是可配置的。 在上面的捕获中、您可以看到微控制器时钟延展、但当我禁用时钟延展(微控制器发送"停止"并在 NACK 时立即释放总线)、并且 SDA 和 SCL 线路都返回高电平、BQ76952仍不会响应进一步的通信尝试

    以下是 该通信正常运行时逻辑分析仪的外观。 这种情况大约需要一两天时间、直到 BQ76952停止确认

     

    请注意、这是不正常的、通信会发生3 -> 1 -> 2。 另请注意、这些消息中有 CRC 字节

    这是我在循环上发送的 I2C 通信字符串:

    I2C addr (写入)+ 0x3E + 0x01 + CRC + 0x00 + CRC

    等待40ms

    I2C addr (写入)+ 0x3E

    I2C addr (读取)+ 0x3E + Data0 + CRC + data1 + crc... 等等

    我将在微控制器和 BQ76952之间的循环上发送此通信字符串若干天、但最终 BQ76952将不再确认其地址

    澄清-当 BQ76952处于这种"卡住"情况(不确认)时、当微控制器未主动发送 I2C 字节时、SCL 和 SDA 线路都为高电平

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

    更新-当 BQ76952卡住时、它具有不一致的行为:

    有时 NACK 的 I2C 地址(例如、写入0x08将被 NACK)、其他时间、它将响应此初始地址并 NACK 第一个数据字节、如上所示。 但它永远无法运行通信、并且会继续否定确认发送的任何通信、直到完全上电复位

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

    Mike、您好!

    我看到您正在循环上发送/写入0x001器件型号子命令。 当发生这种情况时、您是否也从0x40处的数据缓冲区中读取数据? 在尝试其他命令(直接或子命令)时是否遇到过相同的行为?  

    此致、
    Alexis

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

    您好、Alexis、

    发生这种情况时您是否也在0x40处读取数据缓冲区中的数据?

    我将从地址0x3E 开始读取此数据-数据表说明、当数据成功写入数据寄存器时、将使用子命令(在本例中为0x0001)填充0x3E 和0x3F、因此我将首先检查这些寄存器、以验证数据是否准确。 当发生这种情况时、我还将读取0x40处的数据寄存器

    您在尝试其他命令(直接命令或子命令)时是否遇到过同样的行为?  [报价]

    这是专门针对 I2C COM 完整性的测试、因此我将使用始终返回常数值的命令作为测试。 在常规代码中、我将读取和写入许多其他直接、子和 DataRAM 命令;更改我发送的命令是否有用? 如果可以、我可以将其改变

    不过、我想我可能发现 SDA/SCL 线路上存在串扰问题:

    此处、粉红色= SDA、蓝色= SCL。 VIL 为~0.8至0.6V、我已经看到它高达1.2V、这超出了规格(最大1.0V)。 VIH 也明显超出规格(~1.8V)、但此捕捉是在向 SDA/SCL 引脚添加200pF 后的。 我将对添加不同电容并在必要时更改上拉进行实验、但这可能只是线路的硬件问题。 我将在整理完毕后发布更新

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

    Mike、您好!

    除了尝试进一步了解具体情况外、没有需要测试的特定命令。 我想知道器件的地址或通信模式是否可能发生移位、这就是为什么器件在完全上电复位完成之前一直保持 NACK 的原因、该复位会将器件复位回其默认值。  

    我将尝试添加不同电容并在必要时更改上拉电阻、但这可能只是线路的硬件问题

    这也是可能的。 如果您有任何其他问题、请告诉我。 我们通常建议/为 SCL/SDA 线路使用10k Ω 上拉电阻器、如所示  图5-10. 引脚配置原理图  摘自我们的 EVM 用户指南。  

    此致、
    Alexis

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

    您好、Alexis、

    除了尝试进一步了解具体情况外、还没有一个需要测试的特定命令。 我想知道器件的地址或通信模式是否可能发生移位、这就是为什么器件在完全上电复位完成之前一直保持 NACK 的原因、该复位会将器件复位回其默认值。  [报价]

    这将是有趣的,在进一步的测试中,我看到系统自发地恢复通信后几个小时的黑客攻击。 我还看到了部分响应、如之前的2条消息所示、其中 BQ76952响应其 I2C 地址、但 NACK 是子地址、这种情况始终发生

    这也是可能的。 如果您有任何其他问题、请告诉我。 我们通常建议/为 SCL/SDA 线路使用10k Ω 上拉电阻器、如所示  图5-10. 引脚配置原理图  摘自我们的 EVM 用户指南。  [报价]

    我最初在电路上有10k 个电阻器、但 SDA/SCL 引脚上的上升时间都远超出400kHz I2C 的规格、大约为1us。 我改为使用了1.5k 的电阻、这会使上升时间低于300ns 规格。  

    向线路添加100pF 的电容不会帮助 SDA 和 SCL 线路之间的串扰、而220pF 会使我的上升时间增加太多。 我将切换到100kHz I2C、再切换回10k 电阻、看这是否可以解决问题。 我将继续发布更新

    谢谢!

    Mike

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

    Mike、您好!

    请让我们知道您找到了什么! 在您获得的 I2C 捕捉中、上升时间看起来非常慢、这肯定会有效果。

    此致、

    Luis Hernandez Salomon