I've tried almost everything to change the design capacity of the fuel gauge bq27621-g1, but it does not work. The reference for my c code is based on the technical reference datasheet and the shown pseudo code. Does someone can give me a hint in my code, where the problem could be?
Thank you for helping:
My code:
//unsealed
fuel_write_reg(REG_CTRL_REG1, 0x00);
fuel_write_reg(REG_CTRL_REG2, 0x80);
fuel_write_reg(REG_CTRL_REG1, 0x00);
fuel_write_reg(REG_CTRL_REG2, 0x80);
/* Enter Config Update Mode (Can take up to a second) */
uint8_t tries = 2000;
for (tries ; tries > 0 && !(fuel_read_reg(0x06) & 0x10); tries--) {
fuel_write_reg_buf(0x00, {0x13,0x00});
msleep(100);
}
if((fuel_read_reg(0x06) & 0x10)){
log_msg(LOG_ERROR, __cfunc__, "set config Succeed - OK");
}else{
log_msg(LOG_ERROR, __cfunc__, "set config FAILED");
}
/*Enter block mode */
fuel_write_reg(0x61, 0x00);
fuel_write_reg(0x3E, 0x52);
fuel_write_reg(0x3F, 0x00);
/*read out checksum old*/
uint8_t old_csum = fuel_read_reg(0x60);
/*read old design capacity */
uint8_t old_design_cap_MSB = fuel_read_reg(0x43);
uint8_t old_design_cap_LSB = fuel_read_reg(0x44);
/*write new design capacity 1250mAh -> 0x4E2 */
uint8_t new_design_cap_MSB = 0x04;
uint8_t new_design_cap_LSB = 0xE2;
fuel_write_reg(0x43,new_design_cap_MSB);
fuel_write_reg(0x44,new_design_cap_LSB);
/*compute new block checksum */
uint8_t temp = (255-old_csum-old_design_cap_MSB-old_design_cap_LSB)%256;
uint8_t new_csum = 255-(temp+new_design_cap_MSB+new_design_cap_LSB)%256;
/* Soft Reset */
uint8_t tx_buf_2[] = {0x42,0x00};
fuel_write_reg_buf(REG_CTRL_REG1, tx_buf_2);
/* confirm config mode is exited*/
if((fuel_read_reg(0x06) & 0x10)){
log_msg(LOG_ERROR, __cfunc__, "set config Succeed");
}else{
log_msg(LOG_ERROR, __cfunc__, "set config FAILED --OK");
}
/* sealing device */
uint8_t tx_buf_sealing[] = {0x20,0x00};
fuel_write_reg_buf(0x00, tx_buf_sealing);