
按着如图手册上描述的步骤进行操作,无法修改密钥,可能是哪一步漏了或者误操作,修改完密钥后使用新密钥无法识别,仍然需要使用默认密钥;可不可以在上位机软件Battery Management Studio中查看修改密钥、进行电池识别
程序如下:
unsigned char key[16] = {0x11,0x22,0x45,0x67,0x89,0xAB,0xCD,0xEF,0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10}; //默认{0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10};
security_dm_t->class = (di)->dm_regs[BQ27XXX_DM_UNSEALED_KEY_MSB].subclass_id;
security_dm_t->block = (di)->dm_regs[BQ27XXX_DM_UNSEALED_KEY_MSB].offset / BQ27XXX_DM_SZ;
ret =bq27xxx_battery_unseal(di);
// ret =bq27xxx_battery_fullmode(di);
if(ret < 0)
goto out;
ret = bq27xxx_write(di, BQ27XXX_DM_CTRL, 0, TRUE);
if(ret < 0)
goto out;
ret = bq27xxx_battery_read_dm_block(di, security_dm_t);
if(ret < 0)
goto out;
// di->unseal_key = 0x36720414;
// security_dm_t->data[0] = (uint8_t)(di->unseal_key >> 24);
// security_dm_t->data[1] = (uint8_t)(di->unseal_key >> 16);
// security_dm_t->data[2] = (uint8_t)(di->unseal_key >> 8);
// security_dm_t->data[3] = (uint8_t)(di->unseal_key);
/// Authen Key3 - Key0
memcpy(security_dm_t->data + 8, key, 16);
security_dm_t->dirty = TRUE;
bq27xxx_battery_write_dm_block(di, security_dm_t);
bq27xxx_battery_seal(di);