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:读取状态寄存器时出现 SMBus/I2C 通信错误

Guru**** 2609955 points
Other Parts Discussed in Thread: BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1036712/bq78350-smbus-i2c-communication-error-while-reading-status-registers

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

当查询状态寄存器、例如 SAFETY_STATUS、OPERATY_STATUS、pf_STATUS、SAFETY_ALERT、 PF_ALERT 等、与 BQStudio 读取的值相比、读取的值总是错误的。 但电池电压、电流、温度 SOC 等其他数据都提供 了与 BQStudio 中相同的数据。

BQStudio 值- SAFETY_STATUS:0x00

I2C 数据- SAFETY_STATUS:0x04

当具有32位数据的状态寄存器被读取为40位数据时、即、如果读取的是5个 i2c 数据块而不是4个 i2c 数据块、并且第一个块被忽略、则数据与 BQStudio 匹配。 额外的字节始终具有相同的值0x04。

如何通过 i2c 从这些状态寄存器读取正确的值?  额外的字节0x04是可以安全忽略的错误代码吗?

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

    您好、Nithin、

    您使用哪个命令来读取安全状态?  

    此致、

    Matt

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

    我正在查询寄存器0x51以获取安全状态寄存器。 我正在使用 smbus python 库。
    我使用的 API 是""read_i2c_block_data(BMS_I2C_ADDRESS, cmd.value, 0x04)

    安全警报 = 0x50
    安全状态 = 0x51
     PFAlert = 0x52
     PFStatus = 0x53
    操作状态= 0x54
     ChargingStatus = 0x55 
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nithin、

    安全状态是一个两字节寄存器、但您仅报告 BQStudio 和 I2C 读取中的一个字节。 在 BQStudio 中、有一个低字节和高字节。 要更好地查看寄存器,可以选择“首选项”->“显示高级视图”。  

    Matt

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

    这些是我正在使用的寄存器地址、而不是 数据本身。 特别是安全状态寄存器有 4个字节的数据。

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

    您好、Nithin、

    我想我现在已经理解了。 我最初不明白原来的问题。 我认为我看到了混乱。

    当从 SMBus 执行块读取操作时、在数据之前返回一个字节计数。 例如、当我读取安全状态0x51时、seqence 中的字节如下:

    0x16 (W) 0x51 0x17 (R) 0x04 (长度) 0x00 0x00 0x00 0x00

    此致、

    Matt