工具与软件:
您好!
现在、我尝试使用 Charge IC BQ21061观看电池充电状态。
我使用 MCU 通过 I2C 获取每个寄存器的值。
我感到奇怪的是、在 STAT0寄存器中设置了充电 CV 状态和 PGOOD 状态、但未设置 FLAG0寄存器中的充电 CV 标志。
我预计状态寄存器设置/清除和标志寄存器设置/清除都与充电事件相一致、但事实并非如此。
实际充电状态所反映的哪些条件标志寄存器?
只是为了参考,我会发布我的源码手表 BQ210's registers。
谢谢
void get_DBQ21061() State_Reg_
{
#define BQ21061_SLAVE_ADDRESS 0xD6U
I2C_HandleTypeDef hi2c1;
int16_t i、rec_val、ret = 0;
uint8_t received_reg_val[7];
uint8_t buf[4];
for (I = 0;I < 7;I++)
{
receive_reg_val[i]= HAL_I2C_BQ2c1、Mem_Read 21061_SLAVE_ADDRESS、i、I2C_MEMADD_SIZE_8bit、buf、 11000);
}
// STAT0
uint8_t CHRG_CV_STAT =(RECEIVED_reg_val[0]和 CHRG_CV_STAT_MASK)>> CHRG_CV_STAT_SHIFT;
uint8_t charg_done_stat =(receive_reg_val[0]和 charge_done_STAT_mask)>> charge_done_STAT_shift;
uint8_t iinlim_active_stat =(RECEIVED_reg_val[0]和 IINLIM_ACTIVE_STAT_MASK)>> IINLIM_ACTIVE_STAT_SHIFT;
uint8_t vdppm_active_stat =(received_reg_val[0]和 VDPPM_active_STAT_MASK)>> VDPPM_active_STAT_SHIFT;
uint8_t vindpm_active_stat =(received_reg_val[0]& VINDPM_ACTIVE_STAT_MASK)>> VINDPM_ACTIVE_STAT_SHIFT;
uint8_t thermreg_active_stat =(RECEIVED_reg_val[0]& THERMREG_ACTIVE_STAT_MASK)>> THERMREG_ACTIVE_STAT_SHIFT;
uint8_t VIN_PGOOD_STAT =(Received_reg_val[0]和 VIN_PGOOD_STAT_MASK);
// STAT1
uint8_t VIN_OVP_FAULT_STAT =(RECEIVED_reg_val[1]和 VIN_OVP_FAULT_STAT_MASK)>> VIN_OVP_FAULT_STAT_SHIFT;
uint8_t BAT_OCP_FAULT_STAT =(RECEIVED_reg_val[1]和 BAT_OCP_FAULT_STAT_MASK)>> BAT_OCP_FAULT_STAT_SHIFT;
uint8_t BAT_UVLO_FAULT_STAT =(RECEIVED_reg_val[1]和 BAT_UVLO_FAULT_STAT_MASK)>> BAT_UVLO_FAULT_STAT_SHIFT;
uint8_t ts_cold_stat =(received_reg_val[1]& TS_COLD_STAT_MASK)>> TS_COLD_STAT_SHIFT;
uint8_t ts_cool_stat =(received_reg_val[1]& TS_COOL_STAT_MASK)>> TS_COOL_STAT_SHIFT;
uint8_t ts_warm_stat =(received_reg_val[1]& TS_WARM STAT_MASK)>> TS_WARM STAT_SHIFT;
uint8_t ts_hot_stat =(receive_reg_val[1]和 TS_HOT_STAT_MASK);
// STAT2
uint8_t ts_open_stat =(received_reg_val[2]& TS_OPEN_STAT_MASK);
// FLAG0
uint8_t CHRG_CV_FLAG =(received_reg_val[3]& CHRG_CV_FLAG_MASK)>> CHRG_CV_FLAG_SHIFT;
uint8_t charge_done_flag =(receive_reg_val[3]和 charge_done_flag_mask)>> charge_done_flag_shift;
uint8_t iinlim_active_flag =(RECEIVED_reg_val[3]和 IINLIM_ACTIVE_FLAG_MASK)>> IINLIM_ACTIVE_FLAG_SHIFT;
uint8_t vdppm_active_flag =(received_reg_val[3]& vdppm_active_flag_mask)>> VDPPM_active_flag_shift;
uint8_t vindpm_active_flag =(received_reg_val[3]& VINDPM_active_flag_mask)>> VINDPM_active_flag_shift;
uint8_t thermreg_active_flag =(RECEIVED_reg_val[3]& THERMREG_ACTIVE_FLAG_MASK)>> THERMREG_ACTIVE_FLAG_SHIFT;
uint8_t VIN_PGOOD_FLAG =(received_reg_val[3]和 VIN_PGOOD_FLAG_MASK);
// FLAG1
uint8_t VIN_OVP_FAULT_FLAG =(received_reg_val[4]和 VIN_OVP_FAULT_FLAG_MASK)>> VIN_OVP_FAULT_FLAG_SHIFT;
uint8_t BAT_OCP_FAULT_FLAG =(RECEIVED_reg_val[4]和 BAT_OCP_FAULT_FLAG_MASK)>> BAT_OCP_FAULT_FLAG_SHIFT;
uint8_t BAT_UVLO_FAULT_FLAG =(RECEIVED_reg_val[4]和 BAT_UVLO_FAULT_FLAG_MASK)>> BAT_UVLO_FAULT_FLAG_SHIFT;
uint8_t ts_cold_flag =(received_reg_val[4]和 TS_COLD_FLAG_MASK)>> TS_COLD_FLAG_SHIFT;
uint8_t ts_coul_flag =(received_reg_val[4]和 TS_COOL_FLAG_MASK)>> TS_COOL_FLAG_SHIFT;
uint8_t ts_warm_FLAG =(received_reg_val[4]和 TS_WARM 标志掩码)>> TS_WARM 标志移位;
uint8_t ts_hot_FLAG =(received_reg_val[4]和 TS_HOT_flag_mask);
// FLAG2
uint8_t ts_open_FLAG =(received_reg_val[5]& TS_open_FLAG_MASK);
// FLAG3
uint8_t wd_fault_FLAG =(received_reg_val[6]& WD_FAULT_FLAG_MASK)>> WD_FAULT_FLAG_SHIFT;
uint8_t safty_tmr_fault_FLAG =(received_reg_val[6]& safety_tmr_fault_FLAG_mask)>> safety_tmr_fault_FLAG_shift;
uint8_t LDO_OCP_FAULT_FLAG =(received_reg_val[6]和 LDO_OCP_FAULT_FLAG_MASK)>> LDO_OCP_FAULT_FLAG_SHIFT;
uint8_t mrwake1_timout_FLAG =(received_reg_val[6]和 MRWAKE1_TIMEOUT_FLAG_MASK)>> MRWAKE1_TIMEOUT_FLAG_SHIFT;
uint8_t mrwake2_timout_FLAG =(receive_reg_val[6]和 MRWAKE2_TIMEOUT_FLAG_MASK)>> MRWAKE2_TIMEOUT_FLAG_SHIFT;
uint8_t mrreset_warn_FLAG =(received_reg_val[6]和 MRRESET_WARN_flag_mask);
}