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.

Problems with bq27441 parameters

Other Parts Discussed in Thread: BQ27441-G1

I try to update the design capcity parameter in bq27441. 

my source code is :

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void bq27441Init(void)
{
unsigned int cnt;

//inicializamos el modulo I2C como transmisión.
HAL_USCI_I2C_transmitinit(I2CSLAVEADDR,I2CCLOCKPRESCALER);
__enable_interrupt();

while ( HAL_USCI_I2C_notready() == 1 );

Flags_bq27441 = bq27441_cmdReadFlags();

//Rutina de Inicializacion del BT27441 extraida de la "Quickstart Guide for bq27441-G1.pdf"
// 1º Steps to unseal the fuel gauge
for(cnt=0;cnt<2;cnt++)
{
//I2CWriteWord(0x00,0x8000,100);
//Metodo 1
bq27441_CmdWriteWord(bq27441CMD_CNTL_LSB,0x8000);
rfDelayUsec(66);//66useg
}

//2º Steps to place the gaude into CONFIG UPDATE mode
cnt=0;
salir=0;

//I2CWriteWord(0x00,0x0013,100);
bq27441_CmdWriteWord(bq27441CMD_CNTL_LSB,0x0013);
rfDelayUsec(66);

do
{
//Flags[2] = I2CReadSubcommand(0x06,2,100)
//Flags_bq27441 =bq27441_ReadSubcommand(bq27441CMD_FLAGS_LSB);
Flags_bq27441=0;
Flags_bq27441 = bq27441_cmdReadFlags();

//High Byte: OT UT - RSVD - RSVD - RSVD - RSVD FC - CHG
//Low Byte :OCVTAKEN - RSVD - ITPOR - CFGUPMODE - BAT_DET - SOC1 - SOCF - DSG
Flags_bq27441 &= FLAG_CFGUPMODE;
rfDelayUsec(66);//66useg

} while (!salir && (Flags_bq27441 != FLAG_CFGUPMODE));


//Imposible colocar el bq27441 en modo de actualización de parámetros.
if(salir == 1)
{
return;
}


//3º Steps to setup block RAM update
//I2CWritteByte(0x61,0x00,100)
bq27441_cmdWrite(bq27441CMD_BLOCKDATACTRL,0x00);
rfDelayUsec(100); //66useg
//I2CWritteByte(0x3E,0x52,100)
bq27441_cmdWrite(bq27441CMD_DATACLASS,0x52);
rfDelayUsec(100); //66useg
//I2CWritteByte(0x3F,0x00)
bq27441_cmdWrite(bq27441CMD_DATABLOCK,0x00);
rfDelayUsec(100); //66useg

//Actualización de la RAM.
//for(cnt = 0; cnt<50;cnt++)
salir=0;
do
{
bq27441_OldChk = bq27441_cmdRead(bq27441CMD_BLOCKDATACHK);
//Steps to compute the new checksum
bq27441_TmpChk = 255 - bq27441_OldChk;

//OLD_DC[2] = I2CReadBlock(0x4A,2,100)
bq27441_Old_DC = bq27441_cmdReadBlock(bq27441DATABLOCK_DESIGN_CAPACITY);
rfDelayUsec(66); //66useg

//----------------------------------------------------------------------------------------------
// Calculo del checksum
// bq27441_TmpChk = bq27441_TmpChk - bq27441_Old_DC - bq27441_Old_DE - bq27441_Old_TV - bq27441_Old_TR;
bq27441_DataChk[0] =bq27441_Old_DC;
bq27441_DataChk[1] = bq27441_Old_DC>>8;


for(cnt=0;cnt<2;cnt++)
{
bq27441_TmpChk -=bq27441_DataChk[cnt];
}

//----------------------------------------------------------------------------------------------
//I2CWriteWord(0x4A,NEW_DC[2],100);
bq27441_CmdWriteWord(bq27441DATABLOCK_DESIGN_CAPACITY, 0x0708);


//bq27441_CmdWriteWord(bq27441DATABLOCK_DESIGN_CAPACITY, bq27441_Old_DC);
//Retardo de 2 sg para comprobacion de la escritura de los registros
for(cnt=0;cnt<10;cnt++)
{
rfDelayUsec(2000); //250useg
}

do
{
//OLD_DC[2] = I2CReadBlock(0x4A,2,100)
bq27441_Old_DC_2 = bq27441_cmdReadBlock(bq27441DATABLOCK_DESIGN_CAPACITY);
rfDelayUsec(66); //66useg

}while(bq27441_Old_DC_2 != 0x0708);

if(bq27441_Old_DC_2 == 0x0708)
{

//----------------------------------------------------------------------------------------------
// Calculo del checksum

bq27441_DataChk[0] =0x08;
bq27441_DataChk[1] = 0x07;

for(cnt=0;cnt<2;cnt++)
{
bq27441_TmpChk +=bq27441_DataChk[cnt];
}

bq27441_NewChk = 255 - bq27441_TmpChk;

//bq27441CMD_BLOCKDATACHK = 0x60
bq27441_cmdWrite(bq27441CMD_BLOCKDATACHK,bq27441_NewChk);
rfDelayUsec(66); //66useg


// 4º Steps to verify RAM update completed correctly
//I2CWritteByte(0x3E,0x52,100)
bq27441_cmdWrite(bq27441CMD_DATACLASS,0x52);
rfDelayUsec(66); //66useg


//I2CWritteByte(0x3F,0x00)
bq27441_cmdWrite(bq27441CMD_DATABLOCK,0x00);
rfDelayUsec(250); //250useg

//bq27441CMD_BLOCKDATACHK = 0x60
bq27441_Chk = bq27441_cmdRead(bq27441CMD_BLOCKDATACHK);
rfDelayUsec(250); //250useg

bq27441_OldChk_n = bq27441_cmdRead(bq27441CMD_BLOCKDATACHK);

if(bq27441_OldChk_n == bq27441_NewChk)
{
salir =1;
}
}
else
{
salir = 1;
}
}while (!salir);

//5º Steps to exit CONFIG UPDATE mode
//I2CWriteWord(0x00,0x0042,100);
bq27441_CmdWriteWord(bq27441CMD_CNTL_LSB, 0x0042);
rfDelayUsec(250); //250useg

cnt=0;
do
{

rfDelayUsec(10000); //10mseg

//Flags[2] = I2CReadSubcommand(0x06,2,100)
//Flags_bq27441 =bq27441_ReadSubcommand(bq27441CMD_FLAGS_LSB);
Flags_bq27441 =bq27441_cmdReadBlock(bq27441CMD_FLAGS_LSB);
cnt++;

Flags_bq27441 &= FLAG_CFGUPMODE;

} while (Flags_bq27441 == FLAG_CFGUPMODE);

//6 Step to seal the fuel gauge
//I2CWriteWord(0x00,0x0020,100);
bq27441_CmdWriteWord(bq27441CMD_CNTL_LSB, 0x0020);
}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------