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-G3:子命令写入的 I2C 序列

Guru**** 2595770 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/755930/bq27510-g3-i2c-sequency-for-subcommand-write

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

我读取 了 SLUUA97、 SLUSAT1A 和 SLUA467B、并且只能找到读取子命令的序列。 不管用。 但是、如果我想、比如说 、将 BQ27510置于睡眠或休眠状态、我需要执行子命令写入。 我该怎么做?

我尝试模拟子命令读取的序列、并执行此操作- START、I2C_ADDR、CONTL_CMD、子命令_LOW、子命令_HIGH、 停止新值并将其递增写入 CONTRAL_CMD - START、I2C_ADDR、CONTRAL_CMD、VALUE 低电平、VALUE 高电平、 停下。

我不会从 BQ27510中获得任何意外的 nack、但我不确定我是否实际写入了某个内容、因为 CONTRAL_AND_STATUS 始终读取为0x00。

也不清楚我应该向 SET_SLEEP 或 SET_HIBERNATE 写入什么值来激活它。 1? 或任何正值?

请告诉我、向子命令写入内容的正确顺序是什么?如何检查是否实际写入?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为最简单的方法是嗅探总线或作用域 i2c 线。 如果收到任何命令、控制状态将始终返回响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这话什么意思-嗅探总线? 我应该在那里看到什么?

    能否为子命令写入提供正确的 I2C 状态顺序?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我上面的回答是帮助您检查命令是否实际在 i2c 行上发送。

    对于子命令、

    使用 device_type 子命令的示例:
    •到器件地址0xAA、从命令0x00开始、写入两个字节的数据:0x01和0x00。
    •然后使用增量读取读取来读取响应。 器件地址0xAB、从命令开始
    0x00、读取两个字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >以上我的回答是为了帮助您检查命令是否实际在 i2c 行上发送。

    我非常确定我的命令实际上是被发送的、因为读取工作正常、我可以读取 FW_VERSION 或 DEVICE_TYPE。  

    >对于子命令,

    >使用 device_type 子命令的示例:
    >•到器件地址0xAA、从命令0x00开始、写入两个字节的数据:0x01和0x00。
    >•然后使用增量读取读取来读取响应。 器件地址0xAB、从命令开始
    >0x00,读取两个字节。

    这是子命令读取(我写过、我能够在第一个帖子中找到子命令读取的示例)、我需要一个子命令写入序列。 例如、写入 SET_HIBERNATE。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    写入的工作方式相同。 您将以小端字节序格式发送0x11 0x00、而不是发送命令0x01 0x00。 然后读取寄存器将显示休眠位已设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢! 好的、那么读取和写入基本上是相同的、这是奇怪的。

    我是按照您的建议进行的、结果好坏参半。 一方面、在 BQ Studio 中、我可以看到休眠位已成功设置。 在另一个上-在我的 MCU 中的代码发送 SET_HIBERNATE 子命令之后-对 CONTRAL_STATUS 命令的所有读取都为我提供0x0000。

    如果我停止 MCU (而不复位电路板)并使用 BQ Studio 连接到 bq27519、我可以在那里正确地看到 CONTROL_STATUS 值、它不是零。

    然后、我关闭 BQ Studio、恢复代码执行、并且 CONTROL_STATUS 读取再次非零。

    所有其他命令均可顺利读取。

    如果我尝试从 BQ Studio 设置休眠、则不会产生这样的影响。 因此、BQ Studio 和我的代码在某种程度上不同、但我无法弄清差异是什么;逻辑分析仪会向我显示相同的 I2C 事件序列。

    有什么想法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是一个 IO 寄存器。 因此、如果您停止扫描或停止发送0x0000、它将反映上次发送到监测计的命令的状态。

    我无法对您的代码进行评论。 如果命令相同、响应也应相同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、是否有办法使读取0x00反映 CONTRAL_STATUS 而不是最后一个子命令的状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    再次发送0x00至0x00并读取。 这将为您提供控制状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这很奏效。 谢谢!