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.

[参考译文] bq20z45:bq20z45引导 ROM 模式、如何上传固件/文件?

Guru**** 1815240 points
Other Parts Discussed in Thread: BQ20Z40, BQ20Z80, BQEVSW
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/749780/bq20z45-bq20z45-bootrom-mode-how-to-upload-firmware-file

器件型号:bq20z45

我的一个朋友修理了包装。 他用新的锂电池取代了旧的锂电池
并(重新)对 bq20z45 BMS 进行编程。 这很好、尽管他的"生产"
程序非常繁琐、令人烦恼和复杂。

为了帮助他、我编写了软件来实现整个(重新)编程过程的自动化、即:

将电池组放入充电器中、软件会执行它的操作、并在成功安装后执行该操作
(重新)对 BMS 进行编程、故障代码'R'(.. 对于'Roger ')、然后响起
可以/可以移除电池组。 这是完美的。

我遇到的问题是、我的朋友坚持上传"干净"(或"已知正常工作")
正确")固件文件到包中、然后(重新)使用 HIS 对 BMS 进行编程
经过验证的参数(如设计容量等)和序列号。

在 bq20z40/bq20z45技术参考(TR)文档中、我在 p53上阅读
可以将器件置于 BootROM 模式。 遗憾的是、没有更多信息
提供的所有信息。

在执行一些谷歌操作后、我在这里发现了一些与引导 ROM 模式相关的问题。
但是、就我所能确定的情况而言、它仅涉及 TI 电池工具。

在我进入 I2C 监听模式之前、是否有一个文档介绍了该引导 ROM 模式
和/或协议描述?

我想知道的是:

1.进入引导 ROM 模式后、确切地向器件发送什么以接受
长数据字符串(即固件文件)以及必须采用的格式(当然是十六进制或二进制、
但是否需要长度字等)

2.上传固件后、器件的响应是什么
(如果有)以及如何进入正常模式(我读取了有关 addr 0x0D 的内容)。

此致、提前表示感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在这个论坛上发现了一个与 bq20z80及其相关的类似问题
    "应用手册"(slua320.pdf)。
    第218 - 220页提供了所需信息。

    巧妙地假设"没有太大差异"(当然有!)
    我刚刚编写了一个例程、从0x200和上读取 ROM 内容、
    知道我的朋友的"Golden Pack"文件大小为2048字节(0x0800)。

    我在32字节突发(最大 I2C 块大小)和中得到了一个很好的十六进制转储
    器件在向 SMBus 发送0x08后切换回正常模式。

    很有希望!

    唯一需要弄清楚的是 bq20z45的起始地址0x200是否正确。

    如果有人可以确认这一点,或者拥有正确的地址,我将勾选“这已解决了我的问题”;-)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RemCo、

    遗憾的是、我们无法确认 FW 更新过程、因为它们仅供制造商使用。 但是、您所走的道路将引导您找到答案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,好的和坏的消息

    好消息是、我找到了一个更合适的文档、标题为:
    "对 bq20zxx 系列电量监测计进行数据闪存编程和校准"
    (slua379e.pdf)、由 TI 员工 Jackie Hui 编写(我在该论坛的一些帖子中看到了他的名字!)

    第一个好消息是、这里至少有人完全"负责"此事!
    (手指交叉,他读了这个线程;-)

    第二个好消息是我对"偏移地址"的假设(我错误地编写了"ROM 内容...") (0x0200)对于 bq20z45来说还可以、尽管(在我之前的帖子撰写时)我从 bq20z80文档中获得了值。
    实际上,闪存地址是0x0200 <<5,因此从0x4000开始。
    无论如何... 我能够成功读取闪存内容。

    在上述文档中、"闪存大小"显示为0x0700字节、
    我的朋友首先上传至他所有翻新的电池组、然后更改与他的新电池匹配的变量、而不是0x0800 (即"Golden File"的长度)。 他的工作包非常好... 有趣

    坏消息是、我几乎肯定会在其中一个测试包中欺骗 BMS。 几乎100%确定这是由于(当然是我的解释和/或我的观点)文件 slua380和 slua379e 中的(模糊)信息造成的。
    如果我不正确,请纠正我的错误;-)

    slua380 P220介绍了如何将闪存上传到 BMS。
    基本上、'flash file'被分成32个字节块。 将 BMS 置于引导 ROM 模式后、BMS 内相应的32字节块/块将被擦除并随后进行编程。
    这会重复此操作、直到完全上传闪存文件的末尾。

    但是、在阅读 slua379e 之后(并假设该文档更相关、因为它是最新的)、我感到困惑。

    slua379e p4介绍了如何将闪存文件上载到 bq20zxx。

    我感到困惑的是:

    将 yDataFlashImage (&H700)调为字节<--似乎与 slua380兼容

    * snip*

    "//为了清晰起见,不使用常量
    iNumberOfRows =&H60 \ 32 '54 rows <--不是0x0700和0x60/32不是54 (?)

    * snip*

    '//擦除数据闪存,行成对擦除<--对?
    对于 iRow = 0到 iNumberOfRows - 1、步骤2
    1Error = WriteSMBusInteger (&H11、iRow)<--写入0x11的内容是什么? (0x00iRow 或0x[iRow+1、iRow]?)
    DoDelay 0.04
    下一个 iRow

    (是的,我根本不会进入 VB;-)

    由于我将 WriteSMBusInteger (&H11、iRow)例程解释为将(16位)字写入0x11的例程、我将0x[iRow+1、iRow]写入0x11、即:
    字= iRow |(iRow+1)<<8;

    嗯,这(当然是100%)是我的致命错误... ?

    那么、为了不使另一个电池组砖型、确切写入器件的内容是什么?

    电源 我刚刚进入 BMS 世界一周、想为我的朋友提供帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于感兴趣的人、这是我的工作 FLASH_READ 和 hexdump 例程:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    @Batt:感谢您的生命体征(... 和(道德)支持)! o/

    我没有讨论什么是“制造商”或... 不(可能是“(重新)制造翻新商”?)

    我询问有关 TI 文档以及如何解读这些文档中的"信息"的问题。

    最后一个度假村的网关正在监听 i2c/SM-bus 以了解(实际)发生了什么。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RemCo、

    真有趣! 是的、很遗憾、我无法确认或拒绝您的陈述。 但您已经接近了。 请继续并监听线路、执行此操作的更好方法是在 bqevsw 执行 FW update 命令之后的编程时监听线路。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    @Batt:感谢您"堆叠"或"堆叠"我的音乐。 至少我知道有人在嗅我;-)

    关于"硬件监听"、我的朋友使用了一个有效(尽管非常繁琐)的过程
    "制造"他的包装。 几天前、在我的"船"到来之前、我已经接受了心理
    在他将"黄金文件"上载到电池组之前、他需要监控总线。 我的希望就是这样
    在此处发布我的问题将有助于我的旅程、即不要陷入嗅探的危险之中。

    PS 我认为当我成功时、我不能在此处发布解决方案?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、我每次下载闪存/固件内容时都会发现它
    (或者器件可能处于引导 ROM 模式?)、
    "部分复位"计数器(ResetData、0x57)增加一个。
    这是标称值吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、复位随每个闪存的增加而增加。 不幸的是、我无法评论您的步骤、但您仍在顺利进行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bratt、您能否/您是否可以在下图中评论/详细说明?


    我的问题:sluaa313a 的 P85和 P86的信息是否正确

    以下感应:

    从机地址的绝对值是0x16和/或0x17?

    2.对于某些操作,必须故意使用高于+1的从地址?

    换句话说、我的 bq20z45软件包使用0x0B 作为从器件地址、这在何时意味着

    图片中的信息是正确的、我必须写入从器件地址(0x0B + 1 = 0x0C)、即

    无法使用正常的 i2c_start-condition 检测到?

    或者... P85和 P86上的信息是否错误?

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

    由于“斯特克拉斯”,这里很繁忙(不要和圣诞老人混淆!) 在荷兰。

    好的,说什么...

    首先、我在上面的帖子中没有任何反应或回应。
    (它本身就是“信息”。 。 )

    两天前、我了解到有两个 I2C 世界:7位和8位世界。
    TI 生活在8位世界中、因此必须将0x16解释为0x0B << 1。
    将8位地址增加1、即可设置读取位。
    这主要是在需要重复启动时完成的。
    因此、从这个意义上讲、中的这部分信息是有道理的
    上图正确。

    但是、按照上图中的操作顺序、我无法执行该操作
    在闪存中写入子类 ID 块。

    我花了几个小时进行低级 I2C 调试(不是 A 级调试)
    逻辑分析仪)、以了解到底发生了什么。

    结果是我现在能够使用自己的代码成功地修改闪存内容。
    根据我的代码、(至少)有两个结论:

    1.我的方法非常巧妙,我发明了一种新的方法来对闪存内容进行编程。
    2.上图中的部分信息不正确。

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

    遗憾的是、虽然我无法确认您的行为、但我很高兴您能够在此处处理此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Batt、

    我觉得我们都对这条线程中的"答案"有"复杂的感受"。 非常感谢您的回复。
    (这就是为什么我没有点击"这没有解决我的问题"按钮)

    因此、我不会讨论关于"不能"与"允许"的语义讨论(注意我不是本地人)
    英语/美式演讲者、但我已被教授"皇后英语"或"制造商"的定义是什么")

    我的现实是、我现在能够帮助我的朋友增加他的"制造/生产/翻新"
    效率高达(旧) ca 的工艺。 180秒与(新) ca. 3秒、使用简单的 Arduino Nano。

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

    我真的想对您的退房问题说些什么、但由于政策原因、我不允许这样说。 你是对的、这不是一个能力问题、而是一个权限问题。 但是、我真的很高兴您能找到一些东西。 我希望这条线对其他人有用。 我尊重您的技术能力。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我收到了一封来自'Igor'的邮件、但当我单击它时、我在这里看不到它、但我也通过电子邮件收到了一份副本。

    @Igor:您的信息对我来说非常清楚、因为我已经发布了有关的"警告"的信息
    I2C 地址。 在该项目之前、我没有深入了解 I2C、但现在我不得不这么做。 人们说这一点
    I2C 是一种"多协议"、在我看来、是错误的。 您必须将协议向下剥离到逻辑器件时
    电平和时序、这并不是"简单"。 (RS232或 SPI 更容易;-)

    当我遇到有关如何解释'I2C 地址'和如何解释的语义讨论时
    传达此信息/记下此信息、对我来说、这是对协议"不简单"的确认。

    阅读有关 I2C 的"正式"文档、其中一个说明了7位"地址"(也有10位模式、但
    我把它放在这里)。 无论出于何种原因、都必须向左移动此"地址"以获取"实际地址"
    其中 LSB 指示读取或写入选项。 这是一个选择。 。 。 但为什么飞利浦(我想你,我是
    在荷兰,飞利浦是一家荷兰公司;-)不决定单独留下“地址”并使用
    MSB (第7位)表示读取或写入操作? (提到另一个观点;-)

    简而言之(很抱歉、我不会对您的雇主进行 Bashing、也不会对本论坛的热情好客)、其中一位写道:

    "SMB 从地址(0x16)"

    * snip*

    "SMB 从地址(0x17)"

    我认为这实际上是令人困惑的。 它应读/写为(例如):

    C 1.4示例
    7位 I2C 地址向左移动一个位置。 因此、SMBus 地址0x0B
    应在 I2C 总线上显示为0x16。

    * snip*

    "为器件寻址"

    * snip*

    "使用已设置的读取位寻址器件"

    无论如何。 。 。

    此线程的动机是我无法更改闪存内容(子类和偏移量等)。
    向非"制造商"提供这方面的信息似乎与政策问题相摩擦。

    使用与数据表/技术参考文档中所述不同的方法
    我现在可以更改所需的闪存内容,因此我解决了自己的问题;-)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、对于 Batt 和所有读者、以及"完成"此主题:

    最近、我成功地用整个 Golden Image 刷写了芯片。

    我必须嗅探 I2C-/SMBus 并欺骗四个芯片以进行发现
    协议和中的一个“问题”。 。 。 这个时间很重要!

    Arduino 工具现在可完全运行并用于处理
    大量的电池组。

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