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:CC2 电流测量损坏

Guru**** 2812305 points

Other Parts Discussed in Thread: BQ76952

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1591032/bq76952-corrupted-cc2-current-measurements

器件型号: BQ76952

我仍然遇到 CC2 电流测量损坏的问题。 硬件设置如下:
S32K144 MCU 通过 SPI((2MHz 时钟)与 BQ76952 通信并每 8ms 读取一次 CC2 电流。

在空载的情况下、受干扰的电流通常在与–20mA 电流寄存器值对应的+CC2 之间:

  • 20mA:02 00
  • –20mA:Fe FF

然而、我们收到的 FE 00 相当于 2.54A。 我猜到 BQ 器件对并发访问没有任何存储器保护(即,当写入新测量时,同时读取以响应 SPI 请求)。

遗憾的是、无法通过 SPI 通信检测到这一点、因为没有迹象表明值可能无效:

数据包 数据 MOSI 数据 MISO Rx 数据
1. 3A FF 88 3B 00 6E FE00
2. 3A FF 88 3A FE 8F
3. 3B FF 9D 3A 00 7B
4. 3B FF 9D 3B 00 6E

这是一个已知问题吗?我可以做些什么来避免这种情况?

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

    您好、Dan、

    这是一个已知问题、并且/或者为了避免这种情况、我可以做些什么?

    我相信我们以前见过一些用户看到过这个问题。 这是  我认为可能有帮助的前一篇文章。  

    此致、
    Alexis

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

    尊敬的 Alexis:

    如果设备在第二个字节上显示“未就绪“(FF FF 00)、则我的驱动程序已放弃整个读取操作。 不过、这不会完全消除错误的测量。  

    下面是我的 SPI 总线监视器的屏幕截图、其中显示了“读取操作显示为“OK"。“。

    我可以指出的一点是与第一次读取寄存器 3B(数据包 3)有关。 BQ 器件响应 3A 00 7B、这是意外情况。 它应返回仍保存在 SPI 寄存器中的最后一个传输的数据包、即 3A FE 47。 虽然 00 是正确的值、如果它实际上没有传输、为什么 BQ 器件在 3B 寄存器读取期间返回它(并为其计算有效的 CRC)?

    谢谢

    Dan

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

    您好、Dan、

    感谢您对此的耐心等待。

    使用 SPI 进行多字节读取时、这似乎更常见。 最好按照步骤 5 和步骤 6 来查看这是否有所帮助、而不是遵循软件开发指南中步骤 4 和步骤 6 的建议。 我还没有确认这个自己还在工作台上,但我会尝试当我得到机会。  

    1. 假设 V = 0xAFF
    2. 读取 0x14(获取垃圾信息)
    3. V 再次测量、现在为 0xB00
    4. 读取 0x14(获取 0x14 + 0xFF)–因为已经加载#2 中的字节以进行发送
    5. 读取 0x15(获取 0x14 + 0x00)-这通常会被忽略
    6. 读取 0x15(获取 0x15 + 0x0B)

    此致、
    Alexis

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

    尊敬的 Alexis:

    我已经实施了与您建议的机制类似的机制、在这种机制下、整个请求被拒绝、并在步骤 4 和 5 中收到的值不匹配时重试。 它似乎有效、但我需要执行更广泛的测试以进行确认。 尽管如此、这种方法使通信驱动程序变得更加复杂、而不是必要的。 BQ76592 在传输前缓冲这些值是否更简单?

    谢谢

    Dan

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

    您好、Dan、

    由于是如何在该器件上实现 SPI、遗憾的是、该器件的 SPI 模式不包括时钟延展。  不过、该器件支持通过 I2C 进行时钟延展。

    使用我们的器件上的 SPI 时、如果内部振荡器未运行(例如,当器件处于睡眠模式时)或处理器繁忙、则器件可能会忽略某些事务。 因此、我们通常建议重试/实现重试方案、以确保命令成功写入。 不过、当低字节位于边界时、它可能与电流读数的高字节配对、我认为这正是您看到的结果。

    我们通常建议在从传输缓冲区读取结果之前、使用一种简单的方法、将子命令写入 0x3E/0x3F 后、等待 2ms、但这是一种直接命令、无法应用。

    此致、
    Alexis