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.

[参考译文] I2C 通信

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

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1205097/i2c-communication

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

迪亚尔斯、

我询问数据是如何传输的。

问题1:

                                      图1:Bqstudio 1.3.101中的日志面板    

 如图1所示的命令(DEVICE_NUMBER、FW_VERSION、FW_BUILD)、这些命令 使用相同的控制子命令字节0x2、并在0x40地址上读取返回数据 、但在"Advanced Comm"选项卡中手动执行此操作时、我没有获得与原样相同的输出。 如图2所示。

              图2:  Bqstudio 1.3.101中的"Advanced Comm"事务日志

当我在0x00寄存器中键入相同的命令0x02并读取6个字节时、我得到了使用"命令"时数据的样子、  

其中、图2中的数字指的是以下内容:

  • 1:设备编号(根据我的理解,与设备类型相同)。
  • 2:固件版本。
  • 3:是固件版本。

很遗憾、我找不到在0x00写入0x2可以在数据表、技术参考手册或电量计通信文档中返回该数据。

当我尝试(0x01) CONTROL 子命令来获取器件类型(如数据表中所示)时、我得到了以下命令:

从0x40读取时、返回值是0x0001、根据我的理解、它应该是0x0100、指的是 Bq35100。

如果首先是 LSB、那么为什么使用0x2子命令、那么从0x40开始读取6个字节将显示不同的排列?

此外、当使用子命令0x6时、无论从"commands"选项卡还是从"Advanced comm"选项卡都将输出相同。

当我 从 Bq35100读取的数据是 LSB 在前还是 MSB 在前时、我感到困惑。

此致、

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

    您好 Marwan:

    bqStudio 中的仪表板不断轮询监测计的数据、并在其间发送额外的事务。 使用高级通信之前关闭仪表板。

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

    您好、Shirish。

    我已经关闭了仪表板上的"Auto Refresh"、

    我感到困惑的是、当我使用"命令"菜单中的一些命令时、例如:""(device_number、fw_version、fw_build)""、结果如所示。

    图1、

    但是、当我使用"Advanced Comm I2C"来尝试获取相同的结果时、结果不同、除非我在0x00上写入控制子命令0x02并从地址0x40开始读取6个字节。

    这意味着:

    • DEVICE_NUMBER 结果在地址0x40-0x41中为0x0100。
    • FW_VERSION 结果 在地址0x42-0x43中为0x0102。
    • FW_BUILD  结果 在地址0x44-0x45中为0x000A。

    我的理解是、这些都显示在大端字节序中。

    这就提出了三个问题:

    1. 为什么当在"Commands"中发送相同的子命令时、Bqstudio 显示所有结果均在地址0x40上读取? 如图1所示。 device_number 应为0x40fw_version 应为0x42、fw_build 应为0x44 
    2. 当我写 BQ35100第35页的 TRM 中提到的相同命令时, device_type 为0x0001,在寄存器0x00的"Advanced Comm I2C"中写入0x01 0x00,在地址0x40上读取的结果数据是0x0001而非0x0100。
    3. 此外、写入 DEVICE_TYPE 命令也不会产生 TRM 中所述的 FW_VERSION 或 HW_VERSION。 为什么?

    谢谢。

    编辑:还有在 SLUA790中找到的"Summery"添加了一些混淆:

    "
    5.无论是命令地址还是测量仪表数据、所有 I2C 数据都通过
    最低有效字节优先。
    6.在主机和电量监测计之间传输的所有字节都首先传输最高有效位。

    "

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

    您好 Marwan:

    最后一个部分:

    全部 字节 传输的电流最高有效 一个是位顺序、另一个是字节顺序

    如果 TRM 中返回的数据不匹配、则可能是错误。 我会将该主题分配给专家。

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

    您好 Marwan:

    我建议使用 MAC 命令、因此寄存器0x3E 最好是读取固件版本并编译、以及使用这些命令的任何其他信息。 我认为有一些内置的向后兼容性、但0x3E (MAC)命令应该最容易使用。

    TRM 中有一个示例:

    写入:0x3E 0x0800;

    读取:0x3E

    读取:0x3F

    此致、

    怀亚特·凯勒

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

    尊敬的 Wyatt:

    -有一个表的 ManufacturerAccessControl 命令作为控制?

    -关于兼容性,是旧仪表还是什么?

    -此外, 哪一个没有更稳定的 MAC控制?

    谢谢。

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

    尊敬的 Wyatt:

    仍然、当在0x3E 中使用命令时、我得到的结果与在0x00中一样、

    我的问题是、Device_type (0x2)在 I2C 中提供01 00。 如 TRM 中所述、 LSB 是 FW_Version、并且 MSB 为 hw_version。

    我得到的结果是01 00、这意味着 FW_Version 为01、HW_VERSION 为00。 因为 I2C 传输是 LSB 优先的。

    在 Bqstudio 命令选项卡中使用 FW_VERSION 时、我获得了0102、为什么不使用01?

    这些命令是否与 TI 相关且无法更改? (device_typefw_versionfw_build hw_Version)。

    感谢您的配合。

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

    您好 Marwan:

    是的、0x00和0x3E 用于兼容性。

    命令无法更改、它是由 TI 根据固件和硬件信息进行设置的。 您可以使用制造商信息块为系统保存数据。

    此致、

    怀亚特·凯勒