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.

[参考译文] BQ27427:BQ27427–通过 MCU 进行编程时、闪存流 (.gm.fs) 校验和在 0x60 处不匹配、但数据存储器看起来正确

Guru**** 2770045 points

Other Parts Discussed in Thread: BQ27427, BQSTUDIO, BQ27427EVM

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1607349/bq27427-bq27427-flash-stream-gm-fs-checksum-mismatch-at-0x60-when-programmed-from-mcu-but-data-memory-looks-correct

器件型号: BQ27427
主题中讨论的其他器件: BQSTUDIO

您好、

我正在定制电路板上使用 BQ27427、并且我正在尝试对进行编程 Golden Image 由 bqStudio 从我自己的微控制器 (ESP32、使用 I²C μ s) 加载到电量计中。

我正在使用 确切文件 .gm.fs由 bqStudio 生成(无需手动编辑)、我在 MCU 端编写了一个执行命令的简单“闪存流解释器“:

  • W:→I²C 写入电量计

  • C:→I²C 读取+比较

  • X:→μ s 延迟(以 ms 为单位)

顺序为:

  1. 创建最小驱动程序实例(只需读取 DEVICE_TYPE 和 FW_VERSION,无需额外配置)。

  2. 稍等。

  3. 发送 UNSEAL 命令。

  4. .gm.fs逐行应用内容行。

  5. 观察结果、然后转储数据存储器以进行验证。

中的示例片段.gm.fs(有问题的块之一):

W:AA 3E 50 00
W:AA 40 01 F4 00 1E C8 14 08 00 3C 0E 10 00 0A 46 05 14 05 0F 03 20 7F FF 00 F0 46 50 18 01 90 00 64 19
W:AA 60 E4
X: 10
W:AA 3E 50 00
C: AA 60 E4

从 MCU 运行该闪存流时、会得到如下日志:

Applying flash stream (.gm.fs) of 2752 bytes
Compare mismatch at byte 0: expected 0xE4, got 0xF4 (reg=0x60)
Compare mismatch at byte 0: expected 0xDB, got 0x5C (reg=0x60)
Compare mismatch at byte 0: expected 0x91, got 0xCD (reg=0x60)
Compare mismatch at byte 0: expected 0xF3, got 0x9C (reg=0x60)
Compare mismatch at byte 0: expected 0xFF, got 0x00 (reg=0x60)
Flash stream applied successfully (when I ignore the compare errors)

所以 寄存器 0x60 处的校验和 .gm.fs当我重新读取脚本时、并不总是与脚本中的值匹配、尽管:

  • W:在 I²C 级别正确确认写入 ()。

  • 仪表保持响应。

  • 当 I dump 相关的数据存储器子类(STATE、Current Thresholds、Ra 等)时、值看起来像 与黄金映像保持一致 以及 bqStudio 所示。

为了进行交叉检查、我执行了以下操作:

  • 我拿起了 也一样 .gm.fs并使用 bqStudio 对 A 进行编程 BQ27427EVM

  • 在这种情况下、bqStudio 报告 没问题 、并且设备已成功编程。

所以现在我有这样一种情况:

  • 从功能上讲、我电路板上的电量监测计似乎配置正确 (Design Capacity、Terminate Voltage、Thresholds、Qmax、Ra… 一切正常)。

  • 但我自己的解释器看到一些C: AA 60 <checksum>比较在几个块上失败、因为从 0x60 读取的校验和与存储在中的值不匹配.gm.fs

我的问题是:

  1. 是否符合预期 由于电量监测计在内部更新某些字段(Impedance Track、STATUS 等)、0x60 处的某些 BlockDataCheckSum 值会C:.gm.fs在写入块和校验和后发生变化、从而使中的行不再在“实时“器件上严格有效?

  2. 公式 生产流程 我们要从 MCU(而不是从 bqStudio)对黄金映像进行编程的情形:

    • 是否可以接受/建议使用 忽略这些C:在中.gm.fs(或将它们视为非阻塞警告)、只要数据存储器内容随后与预期配置匹配?

    • 或者、是否有推荐的序列(例如特定复位,禁用或状态条件)来确保闪存流可以重放、并且所有 0x60 处的校验和比较都保持有效、就像在通过 bqStudio 编程的全新 EVM 上一样?

如果需要、我可以分享:

  • 完整.gm.fs文件、

  • 我的 μ I²C 写入/读取序列更详细、

  • 和编程后的数据存储器转储。

我只是想确保我没有缺少编程流程中所需的步骤、并确认在应用来自主机 MCU 的闪存流时、0x60 处的这些校验和不匹配是否是预期行为。

提前非常感谢您的帮助、
埃尔维斯公司

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

    您好:

    此问题已分配给团队内部、并将在  可能的情况下由应用工程师进行审核和跟进。 在此期间、请附加与项目关联的任何.log/.gg 文件

    谢谢您、
    Alan  

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

    您好:  
    感谢您的回答、这是我的.gm.fs 文件。
     

    ;--------------------------------------------------------
    ;Verify Existing Firmware Version
    ;--------------------------------------------------------
    W: AA 00 01 00
    C: AA 00 27 04
    W: AA 00 02 00
    C: AA 00 02 02
    ;--------------------------------------------------------
    ;SET_CFGUPDATE
    ;--------------------------------------------------------
    W: AA 00 13 00
    X: 1100
    ;--------------------------------------------------------
    ;Data Block
    ;--------------------------------------------------------
    W: AA 3E 02 00
    W: AA 40 02 26 00 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 A5
    X: 10
    W: AA 3E 02 00
    C: AA 60 A5
    W: AA 3E 24 00
    W: AA 40 00 19 28 63 5F FF 62 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 69
    X: 10
    W: AA 3E 24 00
    C: AA 60 69
    W: AA 3E 31 00
    W: AA 40 0A 0F 02 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 DF
    X: 10
    W: AA 3E 31 00
    C: AA 60 DF
    W: AA 3E 40 00
    W: AA 40 25 F8 0F 9F 23 00 00 14 04 00 09 04 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 C5
    X: 10
    W: AA 3E 40 00
    C: AA 60 C5
    W: AA 3E 44 00
    W: AA 40 00 32 01 C2 30 00 03 08 98 01 00 3C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 F9
    X: 10
    W: AA 3E 44 00
    C: AA 60 F9
    W: AA 3E 50 00
    W: AA 40 01 F4 00 1E C8 14 08 00 3C 0E 10 00 0A 46 05 14 05 0F 03 20 7F FF 00 F0 46 50 18 01 90 00 64 19
    W: AA 60 E4
    X: 10
    W: AA 3E 50 00
    C: AA 60 E4
    W: AA 3E 50 01
    W: AA 40 DC 5C 60 00 7D 00 04 03 19 25 0F 14 0A 78 60 28 01 F4 00 00 00 00 43 80 04 01 14 00 08 0B B8 01
    W: AA 60 DB
    X: 10
    W: AA 3E 50 01
    C: AA 60 DB
    W: AA 3E 50 02
    W: AA 40 2C 0A 01 0A 00 00 00 C8 00 64 02 00 00 00 00 07 D0 01 03 5A 14 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 47
    X: 10
    W: AA 3E 50 02
    C: AA 60 47
    W: AA 3E 51 00
    W: AA 40 00 A7 00 64 00 FA 00 3C 3C 01 B3 B3 01 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 8A
    X: 10
    W: AA 3E 51 00
    C: AA 60 8A
    W: AA 3E 52 00
    W: AA 40 4C CD 00 00 00 81 07 D0 1C E8 0C E4 00 C8 00 32 00 14 03 E8 01 00 64 00 0A FF C6 FF C1 00 1C 00
    W: AA 60 91
    X: 10
    W: AA 3E 52 00
    C: AA 60 91
    W: AA 3E 59 00
    W: AA 40 00 9C 00 46 00 4E 00 5A 00 54 00 48 00 4E 00 48 00 46 00 4A 00 4C 00 50 00 5C 00 6C 00 5C 00 00
    W: AA 60 F3
    X: 10
    W: AA 3E 59 00
    C: AA 60 F3
    W: AA 3E 6D 00
    W: AA 40 09 22 0E E3 0E A6 10 F4 10 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 81
    X: 10
    W: AA 3E 6D 00
    C: AA 60 81
    W: AA 3E 70 00
    W: AA 40 80 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    W: AA 60 FF
    X: 10
    W: AA 3E 70 00
    C: AA 60 FF
    ;--------------------------------------------------------
    ;Exit CFGUPDATE
    ;--------------------------------------------------------
    W: AA 00 00 00
    W: AA 00 42 00
    X: 2000
    

    祝您愉快、  
    Elvis Peetermans

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

    A1:写入子类数据时、电量计必须处于 CONFIG UPDATE 模式。 在该模式下、电量监测计不会更新块中的数据、因此不会调整校验和。 校验和预计不会发生变化。 gm.fs 文件遵循以下顺序:

    *将子类和块写入 0x3E 和 0x3F。

    *将数据写入 0x40++(通常为 32 个字节,这是这个用于在电量计和主机之间交换配置数据的临时缓冲区可以容纳的最大值)。

    *将校验和(所有字节写入 0x3E 至 0x5F)写入 0x60。

    如果写入 0x60 的校验和与电量监测计计算的值匹配、则电量监测计会将数据从 0x40++传输到您使用 0x3E 中的子类偏移和 0x3F 中的块寻址的参数。 如果校验和不匹配、则电量监测计不会传输此数据。

    如果从 0x60 读取不同的校验和(C:命令失败时就是这种情况)、则系统中会出现问题将数据发送到电量计(它在 bqStudio 中工作)。 您的 I2C 总线上可能有问题? 我建议使用 I2C 分析仪进行检查、以便您可以像 bqStudio 一样验证是否实际发送了确切的字节序列。

    A2:忽略 C:线路是不可接受的、因为这些线路可确保配置编程的完整性。 确保电量监测计处于 Config Update 模式。