Other Parts Discussed in Thread: EV2400
Hi,
I am using BQ25883 to charge 2 LiFePO4's in series, I programmed the registers which I think necessary, as following
#define BQ25883ID (0b00011000)
void BQ25883_init(void) {
uint8_t v;
v = i2c_read1ByteRegister(0x6B, 0x25) & 0b01111000;
if(v != BQ25883ID) {
while(1) ;
}
v = i2c_read1ByteRegister(0x6B, 0x05) & (~(BIT4 | BIT5)); // disable WD timer, WATCHDOG[1:0]=='00'
i2c_write1ByteRegister(0x6B, 0x05, v);
v = i2c_read1ByteRegister(0x6B, 0x06) & (~(BIT2 | BIT3)) | BIT1; // recharge threshold offset==300mV (200mv+100mV offset), precharge to fast-charge threshold as 5.6V, charger disabled
i2c_write1ByteRegister(0x6B, 0x06, v);
v = i2c_read1ByteRegister(0x6B, 0x07) & (~(BIT0 | BIT1 | BIT2 | BIT3)); // Minimum System Voltage as 6.0V (SYS_MIN[3:0]=='0000'))
i2c_write1ByteRegister(0x6B, 0x07, v);
v = i2c_read1ByteRegister(0x6B, 0x01) &(~(BIT0 | BIT1 | BIT3 | BIT5)) | (BIT2 | BIT4); // fast charge current as 1A (ICHG[5:0]='010100')
i2c_write1ByteRegister(0x6B, 0x01, v);
// termination current and precharge current as default of 150mA, no registers mod is needed
i2c_write1ByteRegister(0x6B, 0x00, 0b00101000); // Battery Charge voltage as 7.2V, VREG[7:0] = '00101000'
v = i2c_read1ByteRegister(0x6B, 0x06) | BIT3; // enable charge again
i2c_write1ByteRegister(0x6B, 0x06, v);
}
I verified the I2C interface is working on board, and the code executes beyond this BQ25883_init().
However, the charging current remains ~300mA after BQ25883_init(), the micro is one without any debug facility, so I didn't verify which charging stage it is in. I checked BQ25883 in autonomous mode (I don't have an EV2400), the charging current is also ~300mA.
I must missed something simple. Can you help here?
Thank you very much
Don