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.

[参考译文] BQ35100:设置设计容量不起作用

Guru**** 2536160 points
Other Parts Discussed in Thread: BQ35100, EV2400, BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1116139/bq35100-setting-design-capacity-does-not-work

器件型号:BQ35100
主题中讨论的其他器件: EV2400BQSTUDIO

我正在尝试将设计容量从2200更改为2600。 但它似乎不起作用。

我编写了自己的代码、通过 i2c 从 STM32发送命令。 我尝试使用闪存地址 0x4060来写入和读取闪存数据。 这是器件名称。默认为'bq35100'。我可以读取我想要的任何内容并将其写入此8字节闪存 addr。 因此、我假设我的闪存写入和读取工作正常。我也可以随意更改监测模式[EOS、ACC、SOH]。这是通过翻转闪存地址中的特定位来完成的:"CONFIG_A 0x41b1"。

因此、我可以在闪存中写入和读取一个字节、以及写入/读取多个字节。

但是、如果我想将 设计电容器写入2600、它不会粘滞。我可以在 i2c 寄存器(0x3c)中读取设计电容器、并且它保持在2200。 我处于 ACC 模式、bq 未密封。 如果我从闪存 addr 0x41fe 读取设计电容器、它会显示正确的容量。

我出了什么问题?

此外、当我将 GE 设置为低电平、然后在一段时间后设置为高电平时、安全模式会恢复为密封、而我必须将其设置为非密封。

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

    您好!

    设计 CAP 的0x3c 命令是只读命令。 如果您尝试写入0x3c、则不会更新此处存储的值。 要将值写入2600、您需要直接写入闪存地址0x41fe。 直接写入此闪存地址的过程如下所示:

    按照下面的步骤并代入正确的值(2600)和地址(0x41fe)应该会导致数据闪存值更新。

    谢谢、如果有任何其他问题、请告诉我、

    杰克逊

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

    我熟悉 《技术参考手册》[ www.ti.com/.../sluubh1c.pdf。

    这是第一个作为列表表单的帖子。 这就是我所经历的。

    我可以写入/读取闪存。使用 0x4060测试多个字节。 使用0x41b1测试单个字节。它可以正常工作。

    1.将 GE 拉至低电平然后拉至高电平后、将闪存地址0x41fe 中的值复位 为0。

    将2600写入0x41fe 地址会 将2600写入地址。我可以从此处读取它: 闪存地址中的值:0x41fe 为2600。

    3.在 0x3c 读取只读不会更新到2600,而是保持在2200。 寄存器地址0x3c 中的值为2200。

    4.转至1并永久重复

    以下是观察 i2c 线的逻辑分析仪的摘录:

    write to 0x55 ack data: 0x3F 0xFE 
    write to 0x55 ack data: 0x40 0x0A 0x28 
    write to 0x55 ack data: 0x60 0x8E 
    write to 0x55 ack data: 0x0B 
    read to 0x55 ack data: 0x01 0x00
    write to 0x55 ack data: 0x00 0x11 0x00 
    write to 0x55 ack
    write to 0x55 ack data: 0x61 0x00 
    write to 0x55 ack data: 0x3E 0x41 
    write to 0x55 ack data: 0x3F 0xFE 
    read to 0x55 ack data: 0x0A 0x28 0x00
    write to 0x55 ack data: 0x3C 
    read to 0x55 ack data: 0x98 0x08
    write to 0x55 ack data: 0x61 0x00 
    write to 0x55 ack data: 0x3E 0x41 
    write to 0x55 ack data: 0x3F 0xFE 
    read to 0x55 ack data: 0x0A 0x28 0x00

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

    您好!

    您能否尝试在写入数据闪存后发出重置命令或重启器件? 我想、当您向 DF 写入2600时、它不会转移到 RAM。 它应在执行复位命令或下电上电后执行此操作。

    谢谢、如果这不起作用、请告诉我、

    杰克逊

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

    复位没有改变行为。复位后等待1000ms。

    关闭和打开电源也没有帮助。

    此外、每次 GE 引脚设置为低电平、然后设置为高电平时、监测计会将自身设置回密封模式。每次都必须将其设置回未密封状态。

    由于某种原因、它在每个 GE 低电平、高电平周期中都会丢失其设置。

    监测计为什么会这样做? 我对该板有很多问题、我看不到它为什么或如何设置回错误的设置。

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

    您好!

    一旦器件被密封一次、只要发出硬复位或软复位、它就会重新进入密封模式。 我将在星期一查看设备在实验中重置所有设置的行为、并向您报告。

    谢谢、

    杰克逊

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

    对密封行为很感兴趣。我在技术参考中找不到这种行为的解释。我错过了吗? 在哪里可以找到这种解释? 嗯、至少我知道它不是某种欠压问题或其他问题。我可以在每个 GE 低-高周期后将它设置为非密封模式。 至少我现在知道它的预期行为、而不是有故障的电路板。

    好的、回到设计帽:

    我购买了昂贵的 ev2400来继续调试它。 当我使用 bq studio 设置设计电容器时、它会粘着并保持正确的值。 但为什么它不能通过 i2c 从我的 MCU 运行? 我必须将其投入生产才能从 MCU 中工作、并且无法在现场使用 ev2400。

    因此、我尝试通过逻辑分析仪获取正确的 i2c 命令。

    以下是我的步骤:

    0连接所有设备并打开 bqstudio

    1.关闭自动刷新、以避免污染我的记录器

    2.单击未密封

    3.转至[Data Memory]->[Gas Gauging]

    4.打开 i2c 逻辑分析仪并观察 i2c 线

    5.单击设计容量的值

    6.键入所需的数字(用于测试 I used 3333 -> 0x0D 0x05)

    7.使用逻辑分析仪观察 i2c 线

    以下是输出:

    write to 0x55 ack data: 0x3E 0xE0 0x41 0x00 0x32 0x02 0x00 0x64 0x00 0x05 0x00 0x00 0x0A 0x00 0x00 0x7F 0xFF 0x0A 0xF8 0x30 0x00 0x00 0x19 0x00 0x00 0x00 0x14 0x01 0x00 0x00 0x00 0x14 0x01 
    write to 0x55 ack data: 0x60 0x44 0x22 
    write to 0x55 ack data: 0x3E 0xFE 0x41 0x0D 0x05 
    write to 0x55 ack data: 0x60 0xAE 0x06 
    write to 0x55 ack data: 0x3E 0xE0 0x41 
    write to 0x55 ack data: 0x3E 
    read to 0x55 ack data: 0xE0 0x41 0x00 0x32 0x02 0x00 0x64 0x00 0x05 0x00 0x00 0x0A 0x00 0x00 0x7F 0xFF 0x0A 0xF8 0x30 0x00 0x00 0x19 0x00 0x00 0x00 0x14 0x01 0x00 0x00 0x00 0x14 0x01 0x0D 0x05 0x32 0x24
    write to 0x55 ack data: 0x3E 0x00 0x42 0x18 0xC0 0x0E 0x74 0x07 0xD0 0x01 0x00 0x32 0x64 0x02 0x64 
    write to 0x55 ack data: 0x60 0x8F 0x10 
    write to 0x55 ack data: 0x3E 0x00 0x42 
    write to 0x55 ack data: 0x3E 
    read to 0x55 ack data: 0x00 0x42 0x18 0xC0 0x0E 0x74 0x07 0xD0 0x01 0x00 0x32 0x64 0x02 0x64 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xA3 0x24

    首先、我被写入 i2c 总线的数据量所惊讶。设计容量的闪存地址为0x41fe、值本身只有2个字节。 但是 bqstudio 正在写入/读取超过100个字节!

    我 现在正在尝试了解这里发生的情况。为此、我将逐行[第1行至第12行]浏览逻辑分析仪输出。

    首先、我们的 bq35100具有 i2c 地址0x55。这说明了我们写入和读取的所有预先添加的0x55值。

    第1行:我不知道这行的功能。它甚至不包含我们的新值(3333或0x0D 0x05)。 我想它与某种身份验证有关吗? 我甚至需要这个吗?

    第2行:由于它写入寄存器0x60、我假设它是第一行的校验和。

    第3行:现在这一行我已经理解了。我们写入 MAC 寄存器(0x3E)。然后是我们要写入的闪存地址 (重要提示0x41fe 使 其端字节序翻转并变为0xFE 0x41)。之后、我们有新值3333或十六进制值 0x0D 0x05。这里足够有趣、我们不会翻转所有的人。

    第4行:这似乎是第3行的校验和。

    第5行:我们将再次写入 MAC 寄存器、但为什么写入?写入内容是什么? 假设在寄存器后面又跟随一个带翻转的全人的闪存地址之后、它将引用闪存地址:"在温度设定阈值下"或0x41e0。我看不出这个闪存地址是如何相关的。起初看起来是随机的。 但作为一个整数、它将是 16864。 看起来它可以被32除。 (527*32=16864)也许这才是秘密的解决方案? Bq Studio 只想写入32个字节?

    第6行:我们只需写入 MAC 地址、这很奇怪。为什么要这样做呢? 我们是否正在尝试阅读新编写的内容? 更新 bqStudio 的 GUI、但实际上并不需要它?

    第7行: 我想我们正在读取32个字节。从闪存地址0x41e0开始。在这里、我们再次看到我们的朋友  0x0D 0x05 (3333)。有趣 的是、我们读取的是所有字节、而不是我们所需的2个字节。 我认为寄存器自动递增的想法被用来不使用不必要 的读取/写入命令来过载 i2c、但我们继续使用它来执行不必要的读取/写入命令。  

    第8行:我不知道。我们似乎在 闪存地址0x4200中写入数据。为什么要这样做呢? 这些地址是"电池设计电压"和其他设计参数、但我们从未更改过这些参数、所以为什么要写入这些闪存地址。我假设不需要、可以将其保留下来? 我认为这是正确的吗?

    第9行:第8行的校验和

    第10行-第12行: 我们读取 0x4200以外的闪存 addr。我认为这再次只是为了确保我们实际写入闪存地址并更新 bqstudio GUI。即使我们没有更改任何超过0x4200的内容、我们同一类别的设计 电容器中的某些值也具有中的地址 该范围。

    因此、在我针对这个问题点击这个问题之后、 我的问题是:

    我是否正确地假设我真的只需要第3行和第4行? 这似乎是唯一真正实现我希望它所做的事情的线路。 忽略其余部分是否正常? 这将节省大量 i2c 流量、时间和电池电量。 尤其是 在第1行和第12行之间通过了将近1秒。 仅执行第3行和第4行的操作将在20ms 内完成。

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

    您好!

    BQStudio 会执行许多额外的步骤、在写入值时会检查整个数据块。 我刚才在实验练习中验证了您只需要步骤3和4,其中您将值写入以将 DesignCapacity ()更改为 DesignCapacity ()的正确地址,然后写入校验和。 如果执行此操作、您应该能够读回该值并看到其变化。 您还可以在 BQStudio 中打开和刷新数据存储器插件、并观察值变为2600。

    您可以使用高级通信插件在 BQStudio 中测试此功能。

    谢谢、我希望这能解决您的问题、

    杰克逊