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.

[参考译文] BQ27510-G2:bq27510制造商信息块 A:间歇性发送校验和会导致不确认

Guru**** 2465890 points
Other Parts Discussed in Thread: BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/679415/bq27510-g2-bq27510-manufacturer-info-block-a-sending-a-checksum-intermittently-results-in-non-acknowledgement

器件型号:BQ27510-G2
主题中讨论的其他器件:BQ27510BQSTUDIO

请帮助。

我的程序在 Windows CE 上运行。  运行程序  的单板计算机提供 I2C API。   我向制造商信息块 A 写入32个字节的数据。 发送数据的方法返回 true 以发送32个字节。  然后、我的程序发送数据的校验和、这会间歇性地失败、并显示表示未确认的错误代码。  故障率约为2%。  后续读取块 A 显示之前发送到 bq27510的数据未被写入、并且旧数据已返回。

我重复读取数据 --写入数据--写入校验和--读取数据,在写入校验和时总是出现故障,而不是其他地方。

我在写入校验和之前放置了2.5Sec、但它没有帮助。

我使用的总线速度为100KHz。

如果有人能提供帮助、我将不胜感激。

6月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jun、
    请参考下面有关年龄沟通的应用手册。 希望这有助于解决您看到的问题。

    www.ti.com/.../slua801

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

    您好、Onyx、

    我已经阅读了 SLUA801、我认为我的计划遵循了文档规定的内容。  每个命令的参数都在源代码中硬编码,每次程序解锁制造商信息块 A --写入数据--写入校验和--密封内存块时,发送到电量监测计芯片的唯一不同之处在于数据和校验和。  如果发生故障、则仅在写入校验和时发生;我用于发送任何命令的方法、称为 I2CTransfer method、返回 false、错误代码为-7、表示不确认。   

    在数据中写入数据后、我的程序会发送命令以读回数据并将其与发送的数据进行比较。  即使在校验和命令失败后、此读取命令仍会成功并返回数据、 在失败后、读取数据将返回旧数据、而不是写入校验和失败之前发送的数据。

    我更改了逻辑、使上述写入数据序列重复4次、直至写入成功。  这种变化不起作用。  如果写入校验和、则永远不会恢复。  但正如我在上面写的那样、在4次失败后、读取数据命令成功、电量监测计返回了在上次成功写入校验和中写入的旧数据。

    我确认、除了上述序列中包含的命令之外、没有其他命令发送到电量监测计。

    电量监测计未返回确认的原因可能是什么?

    Jun Inagaki

    新生物医学公司

    马萨诸塞州沃尔瑟姆

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    H I Jun、
    我认为这里的问题是您的校验和为什么会失败? 您是否按照应用手册中的说明计算校验和? 您能否在使用 bqstudio 与器件通信时嗅探 i2c 线路、以查看您所做的与 bqstudio 不同的操作?
    谢谢
    Onyx
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Onyx、

    感谢你能抽出时间。

    我正在测试最终的产品级别、在 SDA 或 SCL 上设置探针有点困难。  

    校验和失败时、我自己计算校验和、我计算的值与发送的数字相匹配。

    这是计算的源代码。 我认为是正确的。

    bool writeMfgBlockData( byte* b,int size )

    unsigned char bchksum = 0;

    unsigned int uitemp = 0;
    for (int i = 2;i < size + 2;i++)

    wbuf[i]= b[i - 2];//加载剩余的字节
    uitemp += wbuf[i];//我们也可以在它的时候添加校验和

    uitemp = 0x00FF - uitemp;
    bchksum = uitemp;//对校验和执行补码、BQ27510-2G 要求

    b[]保存数据,大小设置为32。  由 bchksum 保存的值是校验和。

    先发送 wbuf、然后立即发送 bchksum。

    电量监测计逻辑不接受校验和的条件是什么?   

    6月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    条件是:校验和错误、以及命令之间没有足够的延迟。 您能不能增加延迟。

    我知道您正在进行产品级测试、但您应该能够拥有一个测试单元、您可以放置探头和测试点来解决您的问题。

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

    这与完全相同的数据块是可重复的吗?

    如果监测计检测到校验和、那么在检测和之前接收到的新数据块将不会计算与您写入0x60相同的检测和。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dominik:
    感谢您的回答。
    我发送的数据与之前未能将校验和写入电量监测计的数据完全相同。 调试信息显示的程序发送的校验和与之前相同、这次写入通过的校验和。 显然、校验和故障与校验和本身的值无关。

    >>"如果监测计插入校验和、那么在校验和之前接收到的新数据块将不会计算与写入0x60相同的校验和。"
    如前所述、校验和值与我手动计算的校验和不匹配。 我布置的校验和计算逻辑遵循 TI 文档的规定:取32字节值之和。 取和的最低有效字节并将其从0xFF 中减去。 结果是校验和。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否验证过这一点、一直到 I2C 总线电气级别?

    如果校验和不正确、监测计将否定校验和、因此从 I2C 电气到高级代码的抽象级别中的某个位置出错。 如果您已经验证了数据块和代码中的校验和是否匹配 、则必须深入探究通信层。

    从电量监测计的角度并根据您提供的信息、您可以正确地完成所有工作。

    我会使用外部 I2C 监听器设置 I2C 数据日志、并在 成功的情况和监测计所在的情况之间比较实际流量(数据块和校验和)。