|
@@ -38,6 +38,7 @@ extern UINT32 Timer_count;
|
|
|
extern volatile BOOL Sleep_flag;
|
|
|
extern AppNVMDataType AppNVMData;
|
|
|
extern AppDataBody AppDataInfo;
|
|
|
+extern UINT8 WorkFlag;
|
|
|
//全局变量输出区
|
|
|
BOOL UartBattInfoRecvFlag = false;
|
|
|
QueueHandle_t UartWriteCmdHandle = NULL;
|
|
@@ -75,7 +76,7 @@ BOOL BattHeaterSwitch(UINT8* heaterSwitch);
|
|
|
UINT16 encryptionAlgorithm (UINT16 plainText);
|
|
|
UINT8 decryptionAlgorithm (UINT16 cipherText);
|
|
|
UINT8 Uart_Encrypt_Send(void);
|
|
|
-
|
|
|
+UINT8 BmsErrorDecode(UINT32 battWarningState);
|
|
|
//BMS升级函数声明
|
|
|
UINT8 SP_BMS_Update_CheckSUM(UINT8* pSendData,UINT8 len);
|
|
|
void SP_BMS_Update_Service();
|
|
@@ -176,7 +177,11 @@ static void UartTask(void* arg)
|
|
|
currentTimerCount = Timer_count;
|
|
|
if(BMS_Fota_update_flag)
|
|
|
{
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_UPDATE);
|
|
|
+ if(WorkFlag==0x00)
|
|
|
+ {
|
|
|
+ PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_UPDATE);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
if(AppNVMData.isBattLocked==TRUE && ((UartReadMsg.data[(0x09+BATT_CELL_VOL_NUM+BATT_TEMP_NUM+2)*2+1])>>1)&0x03!=0x00 && Timer_count%10==0)//try to lock
|
|
|
{
|
|
@@ -249,6 +254,7 @@ static void UartTask(void* arg)
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_UART_STATE_UPDATE:
|
|
|
+ UartBattInfoRecvFlag = FALSE;
|
|
|
#if BMS_MANUFACTURE==1
|
|
|
{
|
|
|
SP_BMS_Update_Service();
|
|
@@ -347,9 +353,7 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
|
|
|
minCellVol = (dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2] << 8) | dataPtr[(0x1A+BATT_CELL_VOL_NUM+TEMP_NUM)*2 + 1];
|
|
|
|
|
|
battHeatEnableState = dataPtr[(0x1C+BATT_CELL_VOL_NUM+TEMP_NUM)*2+1]&0x01;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
maxCellTemp = 0x00;
|
|
|
minCellTemp = 0xFF;
|
|
|
for(i=0;i<BATT_TEMP_NUM;i++)
|
|
@@ -359,20 +363,7 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
|
|
|
}
|
|
|
nbSwVersion = APPSWVERSION;
|
|
|
nbHwVersion = HWVERSION;
|
|
|
- UINT16 ErrorNumTemp;
|
|
|
- UINT8 ret;
|
|
|
- ErrorNumTemp = 0xFF00;
|
|
|
- if(osOK==osMutexAcquire(Error_Mutex, 100))
|
|
|
- {
|
|
|
- ret = PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("get Muxtex error\n");
|
|
|
- #endif
|
|
|
- }
|
|
|
- osMutexRelease(Error_Mutex);
|
|
|
+ BmsErrorDecode(battWarningState);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -2726,4 +2717,175 @@ UINT16 MS_BMS_Update_CRC16(UINT8* pSendData,UINT16 len)
|
|
|
__invert_uint16(&wCRCin, &wCRCin);
|
|
|
crc_rslt = ((wCRCin << 8) & 0xFF00) | ((wCRCin >> 8) & 0x00FF);
|
|
|
return (crc_rslt);
|
|
|
+}
|
|
|
+
|
|
|
+UINT8 BmsErrorDecode(UINT32 battWarningState)
|
|
|
+{
|
|
|
+ UINT16 ErrorNumTemp;
|
|
|
+ UINT8 ret;
|
|
|
+ if(battWarningState==0)
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(osOK==osMutexAcquire(Error_Mutex, 100))
|
|
|
+ {
|
|
|
+ ret = ((battWarningState) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 7;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在电芯过放告警故障!!\n";单体电压过低
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 1) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 10;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在总电压过放告警故障!!\n";总电压过低
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 2) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 8;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在电芯过压告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 3) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 11;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在总电压过压告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 4) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 12;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在放电过流告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 5) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 13;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在充电过流告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 6) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 2;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在放电过温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 7) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 2;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在充电过温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 8) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ //str += "ERROR:存在环境高温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 9) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ //str += "ERROR:存在环境低温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 10) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 27;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在battSOC低告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 11) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 3;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在MOS高温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 16) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 18;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在温度采集失效/传感器故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 17) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 19;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在电压采集失效/断线故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 18) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 17;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在放电MOS失效故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 19) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 16;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在充电MOS失效故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 20) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 22;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在电芯不均衡告警!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 22) & 0x01) == 1;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 1;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在放电低温告警故障!!\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ((battWarningState >> 23) & 0x01) == 1 ;
|
|
|
+ if (ret)
|
|
|
+ {
|
|
|
+ ErrorNumTemp = 1;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ //str += "ERROR:存在充电低温告警故障!!\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("get Muxtex error\n");
|
|
|
+ #endif
|
|
|
+ }
|
|
|
+ osMutexRelease(Error_Mutex);
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
}
|