/************************************************************
*函数名称:int16_t Get_Battery1_Info(uint8_t slaveAddr, uint8_t Comcode)
*函数功能:获取电池信息
*函数形参:slaveAddr,从机地址,Comcode,命令
*函数返回值:将数据返回出来,可能是电压,电流,RSOC,RMC,温度等,具体跟Comcode相关
*************************************************************/
int16_t Get_Battery1_Info(uint8_t slaveAddr, uint8_t Comcode)
{
int16_t Value;
uint8_t data[2] = {0};
SMBus1_Start();
SMBus1_Send_Byte(slaveAddr);//发送地址
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("SlaveAddr wait ack fail!rn");
return -1;
}
SMBus1_Send_Byte(Comcode);
Ddl_Delay1us(90); //需要注意的是,这个地方的延时特别长
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("Comcode wait ack fail!rn");
return -1;
}
SMBus1_Start();
SMBus1_Send_Byte(slaveAddr|0x01);//发送地址
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("slaveAddr+1 wait ack fail!rn");
return -1;
}
Ddl_Delay1us(50); //需要注意的是,这个地方的延时特别长
data[0] = SMBus1_Read_Byte();
SMBus1_Ack();
Ddl_Delay1us(125); //需要注意的是,这个地方的延时特别长
data[1] = SMBus1_Read_Byte();
SMBus1_NAck();
Ddl_Delay1us(58);
SMBus1_Stop();
Value = (data[0] |(data[1]<<8));
batterry_info.LostContact[0] = 0;
Ddl_Delay1us(100);
return Value;
}
/************************************************************
*函数名称:int16_t Get_Battery1_Info(uint8_t slaveAddr, uint8_t Comcode)
*函数功能:获取电池信息
*函数形参:slaveAddr,从机地址,Comcode,命令
*函数返回值:将数据返回出来,可能是电压,电流,RSOC,RMC,温度等,具体跟Comcode相关
*************************************************************/
int16_t Get_Battery1_Info(uint8_t slaveAddr, uint8_t Comcode)
{
int16_t Value;
uint8_t data[2] = {0};
SMBus1_Start();
SMBus1_Send_Byte(slaveAddr);//发送地址
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("SlaveAddr wait ack fail!rn");
return -1;
}
SMBus1_Send_Byte(Comcode);
Ddl_Delay1us(90); //需要注意的是,这个地方的延时特别长
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("Comcode wait ack fail!rn");
return -1;
}
SMBus1_Start();
SMBus1_Send_Byte(slaveAddr|0x01);//发送地址
if(SMBus1_Wait_Ack() == 1)
{
batterry_info.LostContact[0] = 1;
// printf("slaveAddr+1 wait ack fail!rn");
return -1;
}
Ddl_Delay1us(50); //需要注意的是,这个地方的延时特别长
data[0] = SMBus1_Read_Byte();
SMBus1_Ack();
Ddl_Delay1us(125); //需要注意的是,这个地方的延时特别长
data[1] = SMBus1_Read_Byte();
SMBus1_NAck();
Ddl_Delay1us(58);
SMBus1_Stop();
Value = (data[0] |(data[1]<<8));
batterry_info.LostContact[0] = 0;
Ddl_Delay1us(100);
return Value;
}
举报