请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ28Z620 主题: BQSTUDIO 中讨论的其他器件
工具/软件:
您好团队:
我们在官方电路板上读取的电池电压和 SOC 值不准确。 SOC 值返回0x80、即128、电压值返回0x8000、即32768。 代码如下所示、
在读取电压时、我们最初使用 EVK 进行测试。 小终端读回的值不正确、而大终端模式读回的数据是正确的。 因此、我们使用了大型端子模式。 我们是否需要在正式的电路板中使用小型端子模式? 如果为0x0080、则该值也不正确
您能帮助我们确定哪个器件可能是问题吗? 此外、在官方电路板上使用 bq28z620时、我们还需要注意哪些其他问题?
通过使用逻辑分析捕获数据、发现读回后、数据位0x00+NAK 和 sda/SCL 都处于低电平、并且时钟在过程中没有继续
此致!
光圈
typedef struct __attribute__((packed)) { uint8_t high_byte; /*buf[0] */ uint8_t low_byte; /*buf[1] */ } bq28z620_voltage_t; typedef struct __attribute__((packed)) { uint8_t low_byte; uint8_t high_byte; } bq28z620_reg_t; static int read_voltage(const msdk_device_t *dev, uint16_t *milli_volts) { bq28z620_voltage_t voltage_data = {0}; int res = MSDK_STATUS__ERROR; res = read_reg(dev, BQ28Z620_CMD__VOLTAGE, (uint8_t *)&voltage_data); if (MSDK_STATUS__OK == res){ *milli_volts = (voltage_data.high_byte << 8) | voltage_data.low_byte; } MSDK_LOG_DBG("milli_volts: %d", *milli_volts); return res; } static int read_relative_soc(const msdk_device_t *dev, uint16_t *percent) { bq28z620_reg_t soc_data = {0}; int res = MSDK_STATUS__ERROR; res = read_reg(dev, BQ28Z620_CMD__RELATIVE_STATE_OF_CHARGE,(uint8_t *)&soc_data); if (MSDK_STATUS__OK == res){ *percent = (soc_data.high_byte << 8) | soc_data.low_byte; } return res; }