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.

[参考译文] BQ78350:使用 I2C 而不是 SMBus 进行通信时出现问题

Guru**** 2589245 points
Other Parts Discussed in Thread: EV2400, BQ76940, BQ78350, BQ78350-R1A, BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1215133/bq78350-communication-problems-using-i2c-instead-of-smbus

器件型号:BQ78350
主题中讨论的其他器件:BQ76940、、EV2400、 BQSTUDIO


对于某个项目、我们将  BQ78350与 BQ76940结合使用。

我们的固件驱动程序不支持 smbus、但我们 使用 nrf_twim 驱动程序创建了自己的通信实现。

  1.  我们遵守 BQ78350-R1A 的技术参考手册、
    如果我们遵循 ManufacturerAccess ()信息、我们看到我们应该读取数据大小的2个字节。 但在进行相同操作时、我们仅接收到1个字节的大小。
    对于 ManufacturerBlockAccess (),我们收到1个表示大小的字节(包括命令的2个字节), 2个字节用于命令,以及在数据字节之后,这也与我们的参考手册不匹配。 这是逻辑分析仪的捕获结果。



  2. 我们在发送/接收时也会在地址和数据上出现确认错误。
    这并不总是发生的,但我们没有找到问题的原因,但这是导致我们的当前项目的问题。
    我们使用的 I2C 为100kbs /同一线路上没有其他器件/我们有2.5V 的上拉电阻(我们尝试使用3.3V)/ EV2400的通信似乎工作正常。

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

    您好,Jarni,

    1.大小仅为1个字节,而不是2个字节

    2.在正常操作期间,预计不会有一些确认。 在这种情况下、主机必须在几毫秒后重试

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

    感谢您的快速回复、
    您建议重试之间的间隔时间是多少毫秒?
    您知道在哪里可以找到有关确认的更多信息吗?

    这里还提供了技术参考手册的屏幕截图、这是不是错? 或者我是否在看错误的手册?

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

    您好,Jarni,

    我们使用10ms 至250ms 的随机延迟。

    TRM 部分引用了命令0x23、而捕获的是命令0x44。 两者具有不同的行为。

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

    抱歉、我应该提供更多信息、

    当我们 使用 ManufacturerAccess ()时,我们看到字节顺序与 ManufacturerBlockAccess ()和 ManufacturerAccess ()相同。  
    对于大小,我们只看到  ManufacturerAccess ()为1个字节,就像 ManufacturerBlockAccess ()

    ManufacturerAccess ()  

    ManufacturerBlockAccess ()

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

    1字节尺寸是 SMBus 标准的一部分。 TRM 中的2字节大小指的是接收到的实际数据。

    使用命令0x23时、如果块数据读取包含2字节大小、则使用 bqStudio 高级通信进行检查。 由于有2个单独的段落具有相同的描述、因此 TRM 中的其中一个段落可能存在错误

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

    我认为 BQStudio 仅使用 ManufacturerBlockAccess ()、而不使用 ManufacturerAccess ()、
    当我遵循 TRM 但针对 ManufacturingStatus 0x0057而不是 LifetimeDataBlock1时


    a.通过 ManufacturerAccess ()发送 LifetimeDataBlock1 ()命令:向命令0x00写入 SMBus 0x0060的字。
    b. SMBus 读取命令0x23的块:返回块的前两个字节将是数据长度、接下来的字节将是命令的数据。

    未发送2字节大小。
    此外 BQStudio Advanced Comm SMB 中的写入字函数也将0x0057发送为0x5700、我们是否需要执行相同的写入操作?  
    当测试时、我们看到两者都 在工作:0x0057和0x5700

    0x0057


    0x5700


    这是一个使用 BQStudio 的 ManufacturerBlockRead ()


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

    您好,Jarni,

    字写入要求首先发送 LSB。 因此、发送0x57 0x00以写入0x0057。

    MSB 优先级将不起作用。 这可能是一个未使用的命令、电量监测计将其忽略、从而导致正确响应。

    我认为只有在使用 AltManufacturerAcess()时才会发送额外的2个字节