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.

BQ27426: Fuel gauge IC

Part Number: BQ27426

Hi. I am trying to read the device type of BQ27426 fuel gauge EVM. 

static int16_t BQ27426_i2cReadBytes(uint8_t reg, uint8_t *data, uint8_t len)
{
    ret_code_t err_code;
	m_xfer_done = false;
	err_code = nrf_drv_twi_tx(&twi0,BQ72426_I2C_ADDRESS, &reg, 1, true);
    APP_ERROR_CHECK(err_code);
   
	while(m_xfer_done == false){}
	if(NRF_SUCCESS != err_code)
	{
		return false;
	}
	m_xfer_done = false;
	err_code = nrf_drv_twi_rx(&twi0,BQ72426_I2C_ADDRESS, data, len );
    APP_ERROR_CHECK(err_code);
  
	while(m_xfer_done == false){}
	if(NRF_SUCCESS != err_code)
	{
		return false;
	}
    
	return true;
}

static int16_t BQ27426_i2cWriteBytes(uint8_t reg, uint8_t *data, uint8_t len)
{
    ret_code_t err_code  = nrf_drv_twi_tx(&twi0,BQ72426_I2C_ADDRESS ,data, len , false);
    APP_ERROR_CHECK(err_code); 
   
 
    while (m_xfer_done == false);
    if (err_code != NRF_SUCCESS)
    {
        NRF_LOG_INFO("Failed while calling twi tx, err_code = %d", err_code);
        return err_code;
    }
        nrf_delay_ms( BQ27426_DELAY );

    return NRF_SUCCESS;
}

uint16_t BQ27426_deviceType(void)
{  
    NRF_LOG_INFO("Reading device type...");
    uint16_t DeviceType = BQ27426_readControlWord(BQ27426_CONTROL_DEVICE_TYPE);
    NRF_LOG_INFO("Device type read :0x%x",DeviceType);
    return DeviceType;
}
static uint16_t BQ27426_readControlWord(uint16_t function) {

    uint8_t command[2] = {function & 0x00FF, function >> 8};
    uint8_t data[2] = {0, 0};
    NRF_LOG_INFO("Control word send: ");
    NRF_LOG_HEXDUMP_INFO(command,sizeof(command));
    BQ27426_i2cWriteBytes((uint8_t) 0, command,2);

    if (BQ27426_i2cReadBytes((uint8_t) 0, data, 2)) {
         NRF_LOG_INFO("Control word read: ");
          NRF_LOG_HEXDUMP_INFO(data,sizeof(data));
        return ((uint16_t) data[1] << 8) | data[0]; //Return 1
    }
    else{
        NRF_LOG_INFO("Failed to read Control word ");
        return false;
    }

   
}
I was getting the correct device type of 0x426, but now I am getting the wrong values sometimes it is 0x8C or 0x9c. Can somebody help me understand what's the problem.
I have attached the code for reference.