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.

[参考译文] BQ27Z561-R2:由于 ROM 模式下的 I2C 通信错误、在闪存更新失败后恢复正常模式、期间处理闪存流文件

Guru**** 2539500 points
Other Parts Discussed in Thread: BQ40Z50, BQ27Z561-R2, BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1300883/bq27z561-r2-resume-normal-mode-after-flash-update-fails-due-to-i2c-communication-error-in-rom-mode-during-processing-the-flash-stream-file

器件型号:BQ27Z561-R2
主题中讨论的其他器件: BQSTUDIO、BQ40Z50

我已经阅读了公开提供的文档、但没有关于如何在 ROM 模式下从通信错误中恢复的信息。 另外、遗憾的是、TI 一级支持团队无法解决这个问题。

让我来详细说明这个问题:

在处于开发阶段的产品中、电量监测计是器件中主板的一部分、而不是电池组的一部分。 更换电池组时、需要更新电量监测计黄金映像。 如果此更新失败,则需要将产品从世界各地送回德国(发送给客户的总部),这是一项巨大的努力,必须加以避免。  

请注意、经授权执行此更新的最终用户不能断开内部电池的连接、因此不能选择对电量监测计执行下电上电。

我们使用 TI 提供的附录 A SLUA801–2017年1月的电池电量监测计库来更新 bq27z561-R2电量监测计。

在处理闪存流文件的过程中、有时一条命令会失败。 的处理。 然后、DFFS 文件被停止(这就是库函数"gauge _execute_fs ()"的工作方式)、BQ27保持在 ROM 模式。 之后、BQ27不再根据应用的要求工作。

问题1:是否可以在不将更改写入电量监测计的情况下退出 ROM 模式,例如,如果其中一个.bQFS /.DFFS 比较命令在更新过程中失败?

请注意、这里的答案是不要将08 11发送到 ROM 模式地址、因为这是为了"执行闪存代码"。  但如果出现错误、我认为执行闪存代码不是一个好主意、因为它不会正确写入电量监测计。 为了使客户的产品再次工作、必须退出 ROM 模式以恢复电量监测计的正常行为。

但是、在 我找到的文档中„ ROM 命令0x08使其返回固件模式。 "很明显、需要将命令发送到 ROM 模式地址、如文档中的注释所示–但遗憾的是、文档没有明确说明命令0x08应使用哪些参数。

问题2:   在更新部分执行并失败后,是否可以从.bfz/.DFFS 文件的第一个 ROM 模式命令重新启动更新过程,而不退出 ROM 模式 以避免电量监测计滚动?

一个的几次运行。 DFFS 文件显示闪存流在  没有错误的情况下运行的几率约为80%。 因此、跳回到开头并尝试重复该文件的所有 ROM 模式命令最终应该会成功。 我只是不知道这是否是一个好主意、因为我不知道这是否会导致电量监测计出现其他问题、或者这是否可能/根本不允许、或者这是否会使电量监测计砖头。 这就是为什么我不想尝试这个,没有得到一个绿色的光从一些专家的这一点;-)


关于  Battery Management Studio 在本例中的作用的另一个简短说明:遗憾的是、它什么也不做。 这意味着在.df.fs 格式发生故障后、BQ27会保持在 ROM 模式。 这不是一种选择。

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

    大家好、Jan、

    问题1:  

    Unknown 说:
    但是,在 我找到的文档中„ ROM 命令0x08使其返回固件模式。 "很明显,需要将命令发送到 ROM 模式地址,如文档中的注释所示–但遗憾的是,文档没有明确说明命令0x08应使用哪些参数。

    是否有可能收到有关此器件的更多说明? 对于如何在 bqStudio 中使用高级 COM SMBus 是否存在困惑? 通常、当电量监测计退出 ROM 模式时、不会对数据闪存参数进行更改。

    问题2:

    一般情况下,上载已损坏。 在最坏的情况下、DFFS 可能会使器件砖型。 如果将电量监测计发送到 ROM 模式、则可以通过将通信切换到 SMBus 并读取 SOC 来检查这一点。 如果 SOC 介于0和100之间、则电量监测计处于固件模式、但如果高于100、则处于 ROM 模式。

    此外、当使用 SMBus 检查此 SOC 时、当 bqStudio 打开时、所选的目标应该是 bq40z50。 这将允许您读取此值。

    此致、

    安东尼·巴尔迪诺

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

    尊敬的 Anthony:

    此处提供了一些说明。

    问题1:

     产品(嵌入式系统) 不是 PC。 嵌入式系统 在微控制器上运行专有软件。 嵌入式系统不会运行 bqStudio。

    必须可以更新 已发运给客户的产品上的电量监测计(上传新的黄金映像)。 因此、不会因此而使用 bqStudio 或 PC 来执行更新。 更新由嵌入式系统本身上的软件执行。 即:嵌入式系统中的微控制器通过 I2C 总线与电量监测计进行通信、以发送.df.fs 文件内容。  SLUA801中解释的算法用于此目的。

    在 .df.fs 文件内 、在  刷写黄金映像期间首先发送到电量监测计的命令之一是进入 ROM 模式命令。 在该模式下、电量监测计将其工作 I2C 地址从固件模式 地址0xAA 更改为 ROM 模式地址0x16。 df.fs 中的最后步骤之一是通过"08 11"命令(执行闪存代码)退出 ROM 模式。

    如果.df.fs 闪烁由于任何原因失败、电量监测计将保持 ROM 模式(即、 它仍将使用 I2C 地址0x16)。 这是不可接受的、因为在此模式下、嵌入式系统不再能够使用电量监测计。

    如果您查看 文献、特别是文献编号:SLUUC54B" 2020年2月–2020年5月修订"、第98页、第13.8.52节、您会在"进入 ROM 模式命令"上找到相关文档。  此页面中显示 Jan 引用的报价: ROM 命令0x08使其返回固件模式。 "  

    Jan 询问在.df.fs 刷写过程失败时可以做些什么。 如何使电量监测计从 ROM 模式 安全地返回到固件模式、并避免出现错误。 不能使用 bqStudio、这些步骤需要由嵌入式系统中的微控制器通过 I2C 总线执行。

    问题2:

    df.fs 文件永远不会损坏;在 通过 I2C 总线将其发送到电量监测计芯片之前、已对该文件进行验证。 但即使 I2C 总线上发生一次零星的位翻转、也可能导致.df.fs 文件刷写失败 *1 。  SLUA801中所述的算法 只会 在只有一个.df.fs 比较命令检查失败时中止刷写过程(例如、在发生一个位翻转的情况下)。

    这个问题与这种情况相关: 有效的不损坏.df.fs 文件 由于通过 I2C 总线发送的数据位翻转而无法刷写;这种情况以电量监测计仍处于 ROM 模式并使用 I2C 地址0x16结束。

     在这种情况下、可以 从文件中的第一个 ROM 模式命令重新启动.df.fs 刷写过程吗? 它背后的原因是、或许这会在退出 ROM 模式让它砖头之前重写电量监测计数据闪存、并且它在这段时间有成功的机会(希望这次没有位翻转)。

    如果无法实现、那么 在.df.fs 刷写 过程中、为避免在 I2C 总线上仅进行位翻转之后使用无法正常工作的电量监测计芯片、应遵循什么过程?

    作为参考、在.df.fs 文件的开头、存在固件模式下发送的命令;固件模式下发送的最后一条命令为"进入 ROM 模式"。 之后是第一个 ROM 模式命令:

    示例.df.fs 文件内容:

    .... some commands to address 0xAA ...

    ;--------------------------------------------------------
    ;Go To ROM Mode
    ;--------------------------------------------------------
    W: AA 00 00 0F
    X: 1000
    W: 16 ... <--- FIRST ROM MODE COMMAND

    ... multiple commands to address 0x16 ...

    ;--------------------------------------------------------
    ;Execute Flash Code
    ;--------------------------------------------------------
    W: 16 08 11
    X: 4000

    *1 我们的测试还 发现、在 ROM 模式下、bq27z561-R2对 I2C 协议的处理不是很强大、它在 I2C 时钟频率方面不容忍、并且容易出现偶发接收错误。 然后、需要执行从与位翻转相关的错误中恢复的过程。

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

    尊敬的 Damian:

    感谢您提供说明。 我不能更好地说了:-)

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

    大家好、Jan、Damian、

     在这种情况下是否可以 从文件中的第一个 ROM 模式命令重新启动.df.fs 刷写过程? 这背后的原因是、或许这会在退出 ROM 模式让电量监测计数据闪存砖头之前重写、它有机会在这段时间取得成功(希望这次不会有位翻转)。

    我认为这是这种情况下的首要问题。 是的、可以从文件中的第一个 ROM 模式命令重新启动.df.fs 刷写过程。 如果电量监测计处于 ROM 模式时出现问题、则返回固件模式可能会导致更多问题并使器件砖化。  

    Jan 询问在.df.fs 刷写过程失败时可以做些什么。 如何使电量监测计从 ROM 模式 安全地返回到固件模式、并避免出现错误。 不能选择使用 bqStudio、这些步骤需要由使用 I2C 总线的嵌入式系统中的微控制器执行。

    如果.df.fs 刷写过程失败、可以重复该过程、直到它正常运行、因为.df.fs 未损坏。  

    此致、

    安东尼·巴尔迪诺

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

    尊敬的 Anthony:

    非常感谢您的答复。 我相信这正是我们问题的解决方案。