STM32通过I2C与BQ27542通信,以获取电池电压为例,发送完0x08地址信息以后、等待,然后必须延时2s(如下标红的代码所示)左右才能获取到电压值,否则获取的值都是0xFF,为什么需要这么长的延时时间,这是什么原因?
static T_U16 DrvBQ27542Read(T_U8 reg)
{
T_U16 reg_value;
DrvIICStart();
//send write command
DrvIICSendByte(COMMAND_BQ27542_WRITE);
//wait ack
DrvIICWaitAck();
//send address
DrvIICSendByte(reg);
//wait ack
DrvIICWaitAck();
DelayMs(2000);
//I2C start
DrvIICStart();
//send read command
DrvIICSendByte(COMMAND_BQ27542_READ);
//wait ack
DrvIICWaitAck();
DelayUs(500);
//lsb value
reg_value_lsb = DrvIICReadByte(1);
DelayUs(100);
//msb value
reg_value_msb = DrvIICReadByte(0);
reg_value = ((reg_value_msb << 8)&0xff00)|(reg_value_lsb&0x00ff);
//I2C stop
DrvIICStop();
return reg_value;
}