Tool/software: Linux
Hi Experts,
I have question about how to let FG(BQ27621) into a power saving mode.
When FG is connected to battery that >2.45v, it will start to drain current from battery.
we measured 90uA vs 25uA battery drain, with FG, vs FG removed.
We think we can reduce current consumption if we can let FG into sleep mode.
But how to achieve that?
1) What bit should I set ??
2) Need to set "EffectiveCurrent" ??
-- Here is my BQ27621 status ---
gauge test
openend I2C bus
FW_VERSION = 0x0105
DEV_TYPE = 0x0621
CMD_EffectiveCurrent = 63964 [mA] /* sometimes is 0369 [mA] */
CONTROL_STATUS = 0x0004
SUB_CMD_SET_HIBERNATE
CONTROL_STATUS = 0x0044
SUB_CMD_CLEAR_HIBERNATE
CONTROL_STATUS = 0x0004
Data Class 'State' (0x52):
43 33 00 09 79 1C 6B 09 79 0C 80 00 C8 00 32 00
14 03 E8 01 00 C8 10 04 00 0A 10 F9 FF F3 FF F7
00 19 01 2C 12 02 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Data Class 'State' (68):
14 00 03 08 98 00
closed I2C bus
==========================================
Here is my testing program flow:
printf("openend I2C bus\n\r");
gauge_address(pHandle, GAUGE_DEVICE_ADDRESS);
nResult = gauge_control(pHandle, SUB_CMD_FW_VERSION);
printf(" FW_VERSION = 0x%04X\n\r", nResult);
nResult = gauge_control(pHandle, SUB_CMD_DEV_TYPE);
printf(" DEV_TYPE = 0x%04X\n\r", nResult);
nResult = gauge_cmd_read(pHandle, CMD_EffectiveCurrent);
printf(" CMD_EffectiveCurrent = 0x%04X %04d [mA]\n\r", nResult,nResult);
nResult = gauge_control(pHandle, SUB_CMD_CONTROL_STATUS);
printf(" CONTROL_STATUS = 0x%04X\n\r", nResult);
sleep(2);
nResult = gauge_control(pHandle, SUB_CMD_SET_HIBERNATE);
printf(" SUB_CMD_SET_HIBERNATE = 0x%04X\n\r", nResult);
//-------------------------
sleep(2);
nResult = gauge_control(pHandle, SUB_CMD_CONTROL_STATUS);
printf(" CONTROL_STATUS = 0x%04X\n\r", nResult);
//-------------------------
sleep(2);
nResult = gauge_control(pHandle, SUB_CMD_CLEAR_HIBERNATE);
printf(" SUB_CMD_CLEAR_HIBERNATE = 0x%04X\n\r", nResult);
sleep(2);
nResult = gauge_control(pHandle, SUB_CMD_CONTROL_STATUS);
printf(" CONTROL_STATUS = 0x%04X\n\r", nResult);
//-------------------------
sleep(2);
//read data class DC_STATE:
n = gauge_read_data_class(pHandle, DC_STATE, pData, DC_STATE_LENGTH);
if(n) printf("Error reading data class, %d\n\r", n);
printf("Data Class 'State' (0x52):\n\r");
print_data(pData, DC_STATE_LENGTH);
//read data class 68:
n = gauge_read_data_class(pHandle, 68, pData, 6);
if(n) printf("Error reading data class, %d\n\r", n);
printf("Data Class 'State' (68):\n\r");
print_data(pData, 6);
gauge_exit(pHandle, SOFT_RESET);
close(i2c.nI2C);
printf("closed I2C bus\n\r");
==========================================
thanks
HB