Hi Team,
With using EVM, set up the battery parameter as attached Excel file.
then I export dolden image and use this file on sample board, it happened data error from 30 row(C: AA 60 E5)
Q1) Can you share the reference code?
Q2) do we have to input delay time(200ms)? data writing time is so long.
Q3) Can you check the source code as below?
///////////////////////////////////////////////////////// #define REG_CTRL 0x00 #define REG_FLAGS 0x06 #define REG_DATA_CLASS 0x3e #define REG_DATA_BLOCK 0x3f #define REG_BLOCK_DATA_CHECKSUM 0x60 #define REG_BLOCK_DATA_CONTROL 0x61 #define REGISTERS_BLOCK_OP_CONFIG 0x40 /* BQ27621 Control subcommands */ #define CONTROL_CONTROL_STATUS 0x00 #define CONTROL_DEVICE_TYPE 0x01 #define CONTROL_FW_VERSION 0x02 #define CONTROL_SET_CFGUPDATE 0x13 #define CONTROL_SEALED 0x20 #define CONTROL_SOFT_RESET 0x42 #define CONTROL_UNSEAL 0x8000 /* BQ27621 Status bits */ #define STATUS_SHUTDOWNEN 0x8000 #define STATUS_WDRESET 0x4000 #define STATUS_SS 0x2000 #define STATUS_CALMODE 0x1000 #define STATUS_OCVCMDCOMP 0x0200 #define STATUS_OCVFAIL 0x0100 #define STATUS_INITCOMP 0x0080 #define STATUS_HIBERNATE 0x0040 #define STATUS_POWERMIN 0x0020 #define STATUS_SLEEP 0x0010 #define STATUS_LDMD 0x0008 #define STATUS_CHEMCHNG 0x0001 /* BQ27621 Flags bits */ #define FLAGS_CFGUPD 0x0010 ///////////////////////////////////////////////////////// #define REG_DATA_WAIT_MAX_CNT (300) #define BATT_I2C_READ_MAX_RETRY_COUNT (50) #define BATT_I2C_DATA_WAIT_DELAY (TRUE) #define BATT_I2C_FOR_DELAY_CNT (400) #define BATT_I2C_WRITE_MAX_SIZE (32) static uint8_t BlockCfg_Seq=0; uint8_t BlockConfigArry[14][BATT_I2C_WRITE_MAX_SIZE]={ {0x02,0x26,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x19,0x28,0x63,0x5F,0xFF,0x62,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x10,0xFE,0xFD,0xFF,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x0A,0x0F,0x02,0x05,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0xB4,0xD8,0x0C,0x02,0x00,0xC8,0x04,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x14,0x00,0x03,0x08,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x02,0xBC,0x01,0x2C,0x00,0x1E,0x00,0xC8,0xC8,0x14,0x08,0x00,0x3C,0x0E,0x10,0x00,0x0A,0x46,0x14,0x05,0x0F,0x03,0xE8,0x00,0x64,0x46,0x50,0x0A,0x19,0x28,0x01,0xF4}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x43,0x80,0x04,0x01,0x14,0x00,0x00,0x0B,0xB8,0x01,0x2C,0x0A,0x01,0x0A,0x00,0x00,0x00,0xC8,0x00,0x64,0x02,0x5A,0x20,0x64}, {0x0F,0x02,0x00,0x05,0x04,0xB0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0xA7,0x00,0x64,0x00,0xFA,0x00,0x3C,0x3C,0x01,0xB3,0xB3,0x01,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x43,0x33,0x00,0x03,0x39,0x0C,0x4E,0x09,0x79,0x0C,0x80,0x00,0xC8,0x00,0x32,0x00,0x14,0x03,0xE8,0x01,0x00,0xC8,0x10,0x04,0x00,0x0A,0x10,0xDD,0xFF,0xCE,0xFF,0xCE}, {0x00,0x01,0x02,0xBC,0x12,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x1D,0x00,0x1E,0x00,0x22,0x00,0x2E,0x00,0x26,0x00,0x20,0x00,0x25,0x00,0x1F,0x00,0x20,0x00,0x23,0x00,0x27,0x00,0x27,0x00,0x3D,0x00,0x73,0x00,0xC8,0x00,0x00}, {0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, }; uint8_t RdComp_BlockData_Checksum(uint8_t Ok_Answers) { uint8_t ReadData[1]={0}; uint8_t Result=0; uint16_t retryCnt=0; Batt_i2c_Buff.CheckSumOK=Ok_Answers; for(retryCnt=0;retryCnt<BATT_I2C_READ_MAX_RETRY_COUNT;retryCnt++) { i2c_mux_repeat_read(IDX_BATT_GAUGE,REG_BLOCK_DATA_CHECKSUM,1,ReadData); Batt_i2c_Buff.Read_CheckSum=ReadData[0]; #if(BATT_I2C_DATA_WAIT_DELAY==TRUE) for(uint16_t DelayCnt=0;DelayCnt<BATT_I2C_FOR_DELAY_CNT;DelayCnt++); #endif if(ReadData[0]==Ok_Answers) { Result=1; break; } } return Result; } void gauge_full_sequence(void) { uint8_t CheckSum_Result=0; uint8_t Return_Val=0; uint16_t config_lookCnt=0; BlockCfg_Seq=0; //-------------------------------------------------------- // -------------------------------------------------------------------------------------------->>>>>>>>> Verify Existing Firmware Version //-------------------------------------------------------- Batt_i2c_Buff.write[0]=(uint8_t)(CONTROL_DEVICE_TYPE); Batt_i2c_Buff.write[1]=(uint8_t)(CONTROL_DEVICE_TYPE >> 8); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); Batt_i2c_Buff.readSwap[0].u16_data = 0x0000; batt_i2c_repeat_read(REG_CTRL, Batt_i2c_Buff.readSwap[0].u8_buff,2); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "batt-gauge-Device_Type :: 0x%04X (0x%02X,0x%02X)", 3, Batt_i2c_Buff.readSwap[0].u16_data, Batt_i2c_Buff.readSwap[0].u8_buff[0],Batt_i2c_Buff.readSwap[0].u8_buff[1]); Batt_i2c_Buff.write[0]=(uint8_t)(CONTROL_FW_VERSION); Batt_i2c_Buff.write[1]=(uint8_t)(CONTROL_FW_VERSION >> 8); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); Batt_i2c_Buff.readSwap[0].u16_data = 0x0000; batt_i2c_repeat_read(REG_CTRL, Batt_i2c_Buff.readSwap[0].u8_buff,2); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "batt-gauge-FW_Version :: 0x%04X (0x%02X,0x%02X)", 3, Batt_i2c_Buff.readSwap[0].u16_data, Batt_i2c_Buff.readSwap[0].u8_buff[0],Batt_i2c_Buff.readSwap[0].u8_buff[1]); //-------------------------------------------------------- // -------------------------------------------------------------------------------------------->>>>>>>>>Enter ROM Mode //-------------------------------------------------------- //-------------------------------------------------------- // -------------------------------------------------------------------------------------------->>>>>>>>>SET_CFGUPDATE //-------------------------------------------------------- /////////////////////////////////////////////////////////////////// BATT_I2C_BUFF_CLEAR(); //-------------------------------------------------------- // -------------------------------------------------------------------------------------------->>>>>>>>>Un-seal //-------------------------------------------------------- Batt_i2c_Buff.write[0]=(uint8_t)(CONTROL_UNSEAL); Batt_i2c_Buff.write[1]=(uint8_t)(CONTROL_UNSEAL >> 8); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); delayMS(10); for(config_lookCnt=0;config_lookCnt<REG_DATA_WAIT_MAX_CNT;config_lookCnt++) { BATT_I2C_BUFF_CLEAR(); Batt_i2c_Buff.write[0]=(uint8_t)(CONTROL_SET_CFGUPDATE); Batt_i2c_Buff.write[1]=(uint8_t)(CONTROL_SET_CFGUPDATE >> 8); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); Batt_i2c_Buff.readSwap[0].u16_data=0; batt_i2c_repeat_read(REG_FLAGS,Batt_i2c_Buff.readSwap[0].u8_buff,2); if(Batt_i2c_Buff.readSwap[0].u16_data & FLAGS_CFGUPD) { DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "batt-Config Success[%d]", 1,config_lookCnt); break; } } /////////////////////////////////////////////////////////////////// delayMS(1100); Batt_i2c_Buff.write[0]=0x02; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); // 32-bytes Batt_i2c_Buff.write[0]=0xA5; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x02; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0xA5); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x24; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x69; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x24; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x69); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x30; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0xBD; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x30; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0xBD); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x31; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0xAD; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x31; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0xAD); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x40; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x90; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x40; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x90); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x44; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x48; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x44; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x48); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x53; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x53); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x01; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x12; //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x01; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x12); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x02; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x26; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x50; Batt_i2c_Buff.write[1]=0x02; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x26); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x51; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x8A; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x51; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x8A); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x52; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x7E; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x52; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x7E); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x52; Batt_i2c_Buff.write[1]=0x01; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0x2C; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x52; Batt_i2c_Buff.write[1]=0x01; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0x2C); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x55; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0xE1; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x55; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0xE1); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); Batt_i2c_Buff.write[0]=0x70; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); batt_i2c_write(REGISTERS_BLOCK_OP_CONFIG,BlockConfigArry[BlockCfg_Seq++],BATT_I2C_WRITE_MAX_SIZE); Batt_i2c_Buff.write[0]=0xFF; batt_i2c_write(REG_BLOCK_DATA_CHECKSUM,Batt_i2c_Buff.write,1); //////////////////////////////////////////////////////////////////// delayMS(CONFG_INTERVAL_DELAY_MS); Batt_i2c_Buff.write[0]=0x70; Batt_i2c_Buff.write[1]=0x00; batt_i2c_write(REG_DATA_CLASS,Batt_i2c_Buff.write,2); CheckSum_Result=RdComp_BlockData_Checksum(0xFF); DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "BATT_CHKS:: %d, [0x%02X][0x%02X]", 3,CheckSum_Result,Batt_i2c_Buff.CheckSumOK,Batt_i2c_Buff.Read_CheckSum); //-------------------------------------------------------- // -------------------------------------------------------------------------------------------->>>>>>>>>Exit 0xCFGUPDATE //-------------------------------------------------------- for(config_lookCnt=0;config_lookCnt<REG_DATA_WAIT_MAX_CNT;config_lookCnt++) { BATT_I2C_BUFF_CLEAR(); Batt_i2c_Buff.write[0]=(uint8_t)(CONTROL_SOFT_RESET); Batt_i2c_Buff.write[1]=(uint8_t)(CONTROL_SOFT_RESET >> 8); batt_i2c_write(REG_CTRL,Batt_i2c_Buff.write,2); Batt_i2c_Buff.readSwap[0].u16_data=0; batt_i2c_repeat_read(REG_FLAGS,Batt_i2c_Buff.readSwap[0].u8_buff,2); if(!(Batt_i2c_Buff.readSwap[0].u16_data & FLAGS_CFGUPD)) { DBG_BUFFER(MODULE_DRIVERTASK, LEVEL_INFO, "batt-Config exit Success[%d]", 1,config_lookCnt); break; } } }
Regards,
Nate