Browse Source

重卡OTA程序测试

LAPTOP-KB7QFH2U\ChenJie-PC 2 years ago
parent
commit
7063161524

+ 4 - 4
.settings/language.settings.xml

@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1344555311870217521" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="78452478683048187" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -16,7 +16,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1344555311870217521" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="78452478683048187" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -27,7 +27,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1344555311870217521" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="78452478683048187" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -38,7 +38,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1344555311870217521" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" console="false" env-hash="78452478683048187" id="com.freescale.s32ds.cross.gnu.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT S32DS Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

+ 19 - 0
.vscode/c_cpp_properties.json

@@ -0,0 +1,19 @@
+{
+    "configurations": [
+        {
+            "name": "Win32",
+            "includePath": [
+                "${workspaceFolder}/**"
+            ],
+            "defines": [
+                "_DEBUG",
+                "UNICODE",
+                "_UNICODE"
+            ],
+            "cStandard": "c17",
+            "cppStandard": "c++17",
+            "intelliSenseMode": "windows-msvc-x64"
+        }
+    ],
+    "version": 4
+}

+ 8 - 2
Project_Settings/Debugger/S32K146_4G_Debug_RAM_PNE.launch

@@ -1,7 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="com.pemicro.debug.gdbjtag.pne.launchConfigurationType">
+<booleanAttribute key="com.nxp.s32ds.ext.cdt.debug.svd.ask_before_clean" value="false"/>
+<booleanAttribute key="com.nxp.s32ds.ext.cdt.debug.svd.clean_watch_view" value="false"/>
 <stringAttribute key="com.nxp.s32ds.ext.cdt.debug.svd.merge_strategy" value="ALL"/>
+<stringAttribute key="com.nxp.s32ds.ext.cdt.debug.svd.svd_path" value=""/>
+<booleanAttribute key="com.nxp.s32ds.ext.cdt.debug.svd.use_default" value="true"/>
 <listAttribute key="com.pemicro.debug.gdbjtag.pne.ELVES"/>
+<listAttribute key="com.pemicro.debug.gdbjtag.pne.ELVES_OFFSET"/>
 <intAttribute key="com.pemicro.debug.gdbjtag.pne.NUMBER_ELVES" value="0"/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.PE.BUSERR" value="true"/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.PE.CHKERR" value="true"/>
@@ -42,7 +47,7 @@
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.CYCLONE_IP" value=""/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.DO_RESET_DELAY" value="false"/>
 <intAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.INTERFACE_PORT" value="0"/>
-<stringAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.INTERFACE_PORT_STRING" value="COM1"/>
+<stringAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.INTERFACE_PORT_STRING" value=""/>
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.NETWORK_CARD_IP" value=""/>
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.POWER_DOWN_DELAY" value="250"/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.cyc_ser.POWER_OFF" value="false"/>
@@ -92,7 +97,7 @@
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.ml.CYCLONE_IP" value=""/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.ml.DO_RESET_DELAY" value="false"/>
 <intAttribute key="com.pemicro.debug.gdbjtag.pne.ml.INTERFACE_PORT" value="0"/>
-<stringAttribute key="com.pemicro.debug.gdbjtag.pne.ml.INTERFACE_PORT_STRING" value=""/>
+<stringAttribute key="com.pemicro.debug.gdbjtag.pne.ml.INTERFACE_PORT_STRING" value="USB1"/>
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.ml.NETWORK_CARD_IP" value=""/>
 <stringAttribute key="com.pemicro.debug.gdbjtag.pne.ml.POWER_DOWN_DELAY" value="250"/>
 <booleanAttribute key="com.pemicro.debug.gdbjtag.pne.ml.POWER_OFF" value="false"/>
@@ -174,6 +179,7 @@
 <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
 <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
 <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU ARM PEMicro Interface"/>
+<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDeviceId" value="com.pemicro.debug.gdbjtag.pne.jtagdeviceid"/>
 <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
 <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
 <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>

+ 18 - 11
Project_Settings/Linker_Files/linker_flash_s32k146.ld

@@ -31,13 +31,19 @@
 
 MEMORY
 {         
-    int_flash_interrupts    : ORIGIN = 0x00000000, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
-    int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
-    int_flash               : ORIGIN = 0x00000410, LENGTH = 0x000FFBF0    /* ~1.0MB */ 
+    int_flash_interrupts    : ORIGIN = 0x00014200, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
+   /* int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
+     int_flash               : ORIGIN = 0x00014600, LENGTH = 0x000EBA00    /* ~1.0MB */ 
+/*	int_flash_interrupts    : ORIGIN = 0x00080200, LENGTH = 0x00000400	/**/
+/*	int_flash               : ORIGIN = 0x00080600, LENGTH = 0x0007FA00	/**/
+	
+	m_flexram				: ORIGIN = 0x14000000, LENGTH = 0x00001000	
+	
     int_sram_results        : ORIGIN = 0x1FFF0000, LENGTH = 0x00000100    /* 256bytes */
     int_sram                : ORIGIN = 0x1FFF0100, LENGTH = 0x0001DF00    /* ~120K */
-    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000    /* 4K  */
-    ram_rsvd2               : ORIGIN = 0x2000F000, LENGTH = 0             /* End of SRAM */
+    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000 - 0x10    /* 4K  */
+    ram_rsvd2               : ORIGIN = 0x2000EFF0, LENGTH = 0             /* End of SRAM */
+    ExchangeInfo            : ORIGIN = 0x2000EFF0, LENGTH = 0x10          
 }
 
 
@@ -54,17 +60,17 @@ SECTIONS
     
 	.flash_interrupts :
 	{
-		. = ALIGN(4096);
+		. = ALIGN(512);
         __interrupts_rom_start = .;
         KEEP(*(.intc_vector))    
-        . = ALIGN(4);
+        . = ALIGN(512);
         __interrupts_rom_end = .;
 	} > int_flash_interrupts
 	
-	.flash_config :
-	{
-		KEEP(*(.flash_config))
-	} > int_flash_config
+/*	.flash_config :				*/
+/*	{							*/
+/*		KEEP(*(.flash_config))	*/
+/*	} > int_flash_config		*/
 	
 	.flash :
 	{
@@ -111,6 +117,7 @@ SECTIONS
 		__DATA_ROM = .;
 	} > int_flash
     
+    
     . = ALIGN(4);
     PROVIDE(__exidx_start = .);
     .ARM.exidx :

+ 11 - 18
Project_Settings/Linker_Files/linker_flash_s32k146.ldOTA → Project_Settings/Linker_Files/linker_flash_s32k146.ldfls

@@ -31,19 +31,13 @@
 
 MEMORY
 {         
-    int_flash_interrupts    : ORIGIN = 0x00014200, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
-   /* int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
-     int_flash               : ORIGIN = 0x00014600, LENGTH = 0x000EBA00    /* ~1.0MB */ 
-/*	int_flash_interrupts    : ORIGIN = 0x00080200, LENGTH = 0x00000400	/**/
-/*	int_flash               : ORIGIN = 0x00080600, LENGTH = 0x0007FA00	/**/
-	
-	m_flexram				: ORIGIN = 0x14000000, LENGTH = 0x00001000	
-	
+    int_flash_interrupts    : ORIGIN = 0x00000000, LENGTH = 0x00000400    /* 1K */    /* Do not change this section */
+    int_flash_config        : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* 16bytes */ /* Do not change this section */
+    int_flash               : ORIGIN = 0x00000410, LENGTH = 0x000FFBF0    /* ~1.0MB */ 
     int_sram_results        : ORIGIN = 0x1FFF0000, LENGTH = 0x00000100    /* 256bytes */
     int_sram                : ORIGIN = 0x1FFF0100, LENGTH = 0x0001DF00    /* ~120K */
-    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000 - 0x10    /* 4K  */
-    ram_rsvd2               : ORIGIN = 0x2000EFF0, LENGTH = 0             /* End of SRAM */
-    ExchangeInfo            : ORIGIN = 0x2000EFF0, LENGTH = 0x10          
+    int_sram_stack_c0       : ORIGIN = 0x2000E000, LENGTH = 0x00001000    /* 4K  */
+    ram_rsvd2               : ORIGIN = 0x2000F000, LENGTH = 0             /* End of SRAM */
 }
 
 
@@ -60,17 +54,17 @@ SECTIONS
     
 	.flash_interrupts :
 	{
-		. = ALIGN(512);
+		. = ALIGN(4096);
         __interrupts_rom_start = .;
         KEEP(*(.intc_vector))    
-        . = ALIGN(512);
+        . = ALIGN(4);
         __interrupts_rom_end = .;
 	} > int_flash_interrupts
 	
-/*	.flash_config :				*/
-/*	{							*/
-/*		KEEP(*(.flash_config))	*/
-/*	} > int_flash_config		*/
+	.flash_config :
+	{
+		KEEP(*(.flash_config))
+	} > int_flash_config
 	
 	.flash :
 	{
@@ -117,7 +111,6 @@ SECTIONS
 		__DATA_ROM = .;
 	} > int_flash
     
-    
     . = ALIGN(4);
     PROVIDE(__exidx_start = .);
     .ARM.exidx :

+ 190 - 190
src/AppFuncLib.c

@@ -28,38 +28,38 @@ static uint8 bcc_chk_fota(uint8 *data, uint8 length);
 static uint8 Fota_crc_chk(uint8 *data, uint8 length);
 uint16 GetErrorNum(uint16 *ErrorArray, uint8 Errorlen)
 {
-	uint16 OutNum;
-	OutNum = *(ErrorArray);
-	for (uint8 i = 0; i < Errorlen - 1; i++)
-	{
-		*(ErrorArray + i) = *(ErrorArray + i + 1);
-		if (*(ErrorArray + i + 1) == 0)
-			break;
-	}
-	return OutNum;
+    uint16 OutNum;
+    OutNum = *(ErrorArray);
+    for (uint8 i = 0; i < Errorlen - 1; i++)
+    {
+        *(ErrorArray + i) = *(ErrorArray + i + 1);
+        if (*(ErrorArray + i + 1) == 0)
+            break;
+    }
+    return OutNum;
 }
 uint8 PutErrorNum(uint16 *ErrorArray, uint8 Errorlen, uint16 ErrorNum)
 {
-	for (uint8 i = 0; i < Errorlen; i++)
-	{
-		if (*(ErrorArray + i) == 0)
-		{
-			*(ErrorArray + i) = ErrorNum;
-			return 0;
-		}
-		else
-		{
-			if (*(ErrorArray + i) == ErrorNum)
-			{
-				return 1;
-			}
-			else
-			{
-				continue;
-			}
-		}
-	}
-	return 2;
+    for (uint8 i = 0; i < Errorlen; i++)
+    {
+        if (*(ErrorArray + i) == 0)
+        {
+            *(ErrorArray + i) = ErrorNum;
+            return 0;
+        }
+        else
+        {
+            if (*(ErrorArray + i) == ErrorNum)
+            {
+                return 1;
+            }
+            else
+            {
+                continue;
+            }
+        }
+    }
+    return 2;
 }
 uint16 ATstrdel(char *str)
 {
@@ -413,24 +413,24 @@ uint8 bcc_chk(uint8 *data, uint16 length)
 }
 uint16 crc_chk(uint8 *data, uint8 length)
 {
-	uint8 j;
-	uint16 reg_crc = 0xFFFF;
-	while (length--)
-	{
-		reg_crc ^= *data++;
-		for (j = 0; j < 8; j++)
-		{
-			if (reg_crc & 0x01)
-			{
-				reg_crc = (reg_crc >> 1) ^ 0xA001;
-			}
-			else
-			{
-				reg_crc = reg_crc >> 1;
-			}
-		}
-	}
-	return reg_crc;
+    uint8 j;
+    uint16 reg_crc = 0xFFFF;
+    while (length--)
+    {
+        reg_crc ^= *data++;
+        for (j = 0; j < 8; j++)
+        {
+            if (reg_crc & 0x01)
+            {
+                reg_crc = (reg_crc >> 1) ^ 0xA001;
+            }
+            else
+            {
+                reg_crc = reg_crc >> 1;
+            }
+        }
+    }
+    return reg_crc;
 }
 /**
  * @brief : Fota升级处理函数,将接收的数据进行校验,搬运至升级区域,并进行应答
@@ -440,135 +440,135 @@ uint16 crc_chk(uint8 *data, uint8 length)
  */
 void Fota_Func(uint8 *DataPtr, sint32 connectId)
 {
-	Fota_Type Fota_S;
-	uint8 Fota_Answer[43];
-	uint8 Fota_Cmd;
-	sint8 ret;
-	uint8 *Data_Read_Buffer = NULL;
-	uint8 Data_Read_Crc;
-	if (*(DataPtr + 30) == 0x01)
-	{
-		uint32 FlashAddStart = 0;
-		uint32 appReceviedCRC;
-		Hal_FlsGetAppVectorTableStartAddr(&FlashAddStart);
-		Fota_S.Fota_Flash_Addres = FlashAddStart;
-		Fota_Cmd = *(DataPtr + 31);
-		Fota_Answer[0] = TCP_START_SYM1;
-		Fota_Answer[1] = TCP_START_SYM2;
-		Fota_Answer[2] = TCP_CONCMD_SYM;
-		switch (Fota_Cmd)
-		{
-		case 0x01:
-		{
-			Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-			Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-			if (Fota_S.Fota_All_Data_Len >= 0x7FE00)
-			{
-				Fota_Answer[3] = 0x02;
-			}
-			else
-			{
-				Fota_Answer[3] = 0x01;
-				appReceviedCRC =  (uint32)(*(DataPtr + 42)<<8 | *(DataPtr + 43));
-				Hal_FlsErase(Fota_S.Fota_Flash_Addres,Fota_S.Fota_All_Data_Len,5);
-				Hal_SetAppInfo(Fota_S.Fota_All_Data_Len,appReceviedCRC,CONTROLLER_SELF);
-			}
-			memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-			Fota_Answer[21] = TCP_ENCPT_DISABLE;
-			Fota_Answer[22] = 0x00;
-			Fota_Answer[23] = 0x12;
-			memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-			Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-			tcpipConnectionSend(connectId, Fota_Answer, 43);
-			break;
-		}
-		case 0x02:
-		{
-			Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-			Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-			Fota_S.Fota_Recv_Data_Len = *(DataPtr + 41);
-			memset(Fota_S.Fota_Recv_Data, 0x00, 100);
-			memcpy(Fota_S.Fota_Recv_Data, (DataPtr + 42), *(DataPtr + 41));
-			Fota_S.Fota_CRC = Fota_crc_chk(Fota_S.Fota_Recv_Data, Fota_S.Fota_Recv_Data_Len);
-			if (Fota_S.Fota_CRC == *(DataPtr + Fota_S.Fota_Recv_Data_Len + 42))
-			{
-				uint8 Fota_Recv_Data_Len_4 = 0;
-				if (Fota_S.Fota_Recv_Data_Len % 4 != 0)
-				{
-					Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4 - (Fota_S.Fota_Recv_Data_Len % 4);
-				}
-				else
-				{
-					Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
-				}
-				Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
-				Hal_FlsWrite(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data,Fota_Recv_Data_Len_4, 10);
-				memset(Data_Read_Buffer, 0x00, Fota_S.Fota_Recv_Data_Len);
-				Hal_FlsRead(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len, 10);
-				Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len);
-				if (Data_Read_Crc == Fota_S.Fota_CRC)
-				{
-					Fota_Answer[3] = 0x01;
-				}
-				else
-				{
-					Fota_Answer[3] = 0x02;
-					Hal_FlsErase(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4,5);
-				}
-			}
-			else //数据校验失败
-			{
-				Fota_Answer[3] = 0x02;
-			}
-			if (Data_Read_Buffer != NULL)
-				free(Data_Read_Buffer);
-			Data_Read_Buffer = NULL;
-			memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-			Fota_Answer[21] = TCP_ENCPT_DISABLE;
-			Fota_Answer[22] = 0x00;
-			Fota_Answer[23] = 0x12;
-			memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-			Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-			tcpipConnectionSend(connectId, Fota_Answer, 43);
-			break;
-		}
-		case 0x03:
-		{
-			Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
-			Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
-			Fota_Answer[3] = 0x01;
-			memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-			Fota_Answer[21] = TCP_ENCPT_DISABLE;
-			Fota_Answer[22] = 0x00;
-			Fota_Answer[23] = 0x12;
-			memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-			Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-			tcpipConnectionSend(connectId, Fota_Answer, 43);
-			if (Fota_S.Fota_All_Data_Len == Fota_S.Fota_Current_Addres)
-			{
-				Hal_FlsCheckIsTransferSucceed();
-				Fota_update_flag = TRUE;
-			}
-			else
-			{
-				Fota_update_flag = FALSE;
-			}
-			break;
-		}
-		default:
-		{
-			Fota_Answer[3] = 0x02;
-			memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
-			Fota_Answer[21] = TCP_ENCPT_DISABLE;
-			Fota_Answer[22] = 0x00;
-			Fota_Answer[23] = 0x12;
-			memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
-			Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
-			tcpipConnectionSend(connectId, Fota_Answer, 43);
-			break;
-		}
-		}
-	}
+    Fota_Type Fota_S;
+    uint8 Fota_Answer[43];
+    uint8 Fota_Cmd;
+    sint8 ret;
+    uint8 *Data_Read_Buffer = NULL;
+    uint8 Data_Read_Crc;
+    if (*(DataPtr + 30) == 0x01)
+    {
+        uint32 FlashAddStart = 0;
+        uint32 appReceviedCRC;
+        Hal_FlsGetAppVectorTableStartAddr(&FlashAddStart);
+        Fota_S.Fota_Flash_Addres = FlashAddStart;
+        Fota_Cmd = *(DataPtr + 31);
+        Fota_Answer[0] = TCP_START_SYM1;
+        Fota_Answer[1] = TCP_START_SYM2;
+        Fota_Answer[2] = TCP_CONCMD_SYM;
+        switch (Fota_Cmd)
+        {
+        case 0x01:
+        {
+            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
+            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
+            if (Fota_S.Fota_All_Data_Len >= 0x7FE00)
+            {
+                Fota_Answer[3] = 0x02;
+            }
+            else
+            {
+                Fota_Answer[3] = 0x01;
+                appReceviedCRC = (uint32)(*(DataPtr + 42) << 8 | *(DataPtr + 43));
+                Hal_FlsErase(Fota_S.Fota_Flash_Addres, Fota_S.Fota_All_Data_Len, 5);
+                Hal_SetAppInfo(Fota_S.Fota_All_Data_Len, appReceviedCRC, CONTROLLER_SELF);
+            }
+            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
+            Fota_Answer[21] = TCP_ENCPT_DISABLE;
+            Fota_Answer[22] = 0x00;
+            Fota_Answer[23] = 0x12;
+            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
+            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
+            tcpipConnectionSend(connectId, Fota_Answer, 43);
+            break;
+        }
+        case 0x02:
+        {
+            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
+            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
+            Fota_S.Fota_Recv_Data_Len = *(DataPtr + 41);
+            memset(Fota_S.Fota_Recv_Data, 0x00, 100);
+            memcpy(Fota_S.Fota_Recv_Data, (DataPtr + 42), *(DataPtr + 41));
+            Fota_S.Fota_CRC = Fota_crc_chk(Fota_S.Fota_Recv_Data, Fota_S.Fota_Recv_Data_Len);
+            if (Fota_S.Fota_CRC == *(DataPtr + Fota_S.Fota_Recv_Data_Len + 42))
+            {
+                uint8 Fota_Recv_Data_Len_4 = 0;
+                if (Fota_S.Fota_Recv_Data_Len % 4 != 0)
+                {
+                    Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4 - (Fota_S.Fota_Recv_Data_Len % 4);
+                }
+                else
+                {
+                    Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
+                }
+                Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
+                Hal_FlsWrite(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Fota_S.Fota_Recv_Data, Fota_Recv_Data_Len_4, 10);
+                memset(Data_Read_Buffer, 0x00, Fota_S.Fota_Recv_Data_Len);
+                Hal_FlsRead(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len, 10);
+                Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer, Fota_S.Fota_Recv_Data_Len);
+                if (Data_Read_Crc == Fota_S.Fota_CRC)
+                {
+                    Fota_Answer[3] = 0x01;
+                }
+                else
+                {
+                    Fota_Answer[3] = 0x02;
+                    Hal_FlsErase(Fota_S.Fota_Flash_Addres + Fota_S.Fota_Current_Addres, Fota_Recv_Data_Len_4, 5);
+                }
+            }
+            else //数据校验失败
+            {
+                Fota_Answer[3] = 0x02;
+            }
+            if (Data_Read_Buffer != NULL)
+                free(Data_Read_Buffer);
+            Data_Read_Buffer = NULL;
+            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
+            Fota_Answer[21] = TCP_ENCPT_DISABLE;
+            Fota_Answer[22] = 0x00;
+            Fota_Answer[23] = 0x12;
+            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
+            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
+            tcpipConnectionSend(connectId, Fota_Answer, 43);
+            break;
+        }
+        case 0x03:
+        {
+            Fota_S.Fota_All_Data_Len = *(DataPtr + 33) << 24 | *(DataPtr + 34) << 16 | *(DataPtr + 35) << 8 | *(DataPtr + 36);
+            Fota_S.Fota_Current_Addres = *(DataPtr + 37) << 24 | *(DataPtr + 38) << 16 | *(DataPtr + 39) << 8 | *(DataPtr + 40);
+            Fota_Answer[3] = 0x01;
+            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
+            Fota_Answer[21] = TCP_ENCPT_DISABLE;
+            Fota_Answer[22] = 0x00;
+            Fota_Answer[23] = 0x12;
+            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
+            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
+            tcpipConnectionSend(connectId, Fota_Answer, 43);
+            if (Fota_S.Fota_All_Data_Len == Fota_S.Fota_Current_Addres)
+            {
+                Hal_FlsCheckIsTransferSucceed();
+                Fota_update_flag = TRUE;
+            }
+            else
+            {
+                Fota_update_flag = FALSE;
+            }
+            break;
+        }
+        default:
+        {
+            Fota_Answer[3] = 0x02;
+            memcpy(&Fota_Answer[4], (DataPtr + 4), BATT_SN_LEN);
+            Fota_Answer[21] = TCP_ENCPT_DISABLE;
+            Fota_Answer[22] = 0x00;
+            Fota_Answer[23] = 0x12;
+            memcpy(&Fota_Answer[24], (DataPtr + 24), 18);
+            Fota_Answer[42] = bcc_chk_fota(Fota_Answer, 42);
+            tcpipConnectionSend(connectId, Fota_Answer, 43);
+            break;
+        }
+        }
+    }
 }
 /**
  * @brief : fota网络校验函数
@@ -578,14 +578,14 @@ void Fota_Func(uint8 *DataPtr, sint32 connectId)
  */
 static uint8 bcc_chk_fota(uint8 *data, uint8 length)
 {
-	uint8 bcc_chk_return = 0x00;
-	uint8 count = 0;
-	while (count < length)
-	{
-		bcc_chk_return ^= data[count];
-		count++;
-	}
-	return bcc_chk_return;
+    uint8 bcc_chk_return = 0x00;
+    uint8 count = 0;
+    while (count < length)
+    {
+        bcc_chk_return ^= data[count];
+        count++;
+    }
+    return bcc_chk_return;
 }
 /**
  * @brief : Fota校验函数
@@ -595,10 +595,10 @@ static uint8 bcc_chk_fota(uint8 *data, uint8 length)
  */
 static uint8 Fota_crc_chk(uint8 *data, uint8 length)
 {
-	uint8 reg_crc = 0x00;
-	while (length--)
-	{
-		reg_crc ^= *data++;
-	}
-	return reg_crc;
+    uint8 reg_crc = 0x00;
+    while (length--)
+    {
+        reg_crc ^= *data++;
+    }
+    return reg_crc;
 }

+ 184 - 184
src/AppGlobalVar.c

@@ -42,8 +42,8 @@ sint8 SocketId = -1;
 sint8 RegChkRet = 0;
 char WebSiteIp[20] = {0};
 uint8 TcpWorkState = 0;
- const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
- const uint16 WebSitePort = 8712;
+  const char WebSiteName[] = "\"iotp.fast-fun.cn\"";
+  const uint16 WebSitePort = 8712;
 //const char WebSiteName[] = "\"oss.li-ai.com.cn\"";
 //const uint16 WebSitePort = 8712;
 
@@ -113,186 +113,186 @@ UINT8 BcuRxFlag[28];
 /************************************************************
  *BCU->4G解码变量存放区
  ************************************************************/
-UINT8 BMS_ReqVIN = 0x00;					  //是否请求VIN码,0:预留;1:请求VIN;2:不请求VIN;3:无效;,Re-1,Off-0,
-UINT8 BMS_ReqHVOff = 0x00;					  //是否请求下高压,0:预留;1:请求下高压;2:不请求下高压;3:无效;,Re-1,Off-0,
-UINT8 BMS_ProtocolEditionH = 0x00;			  //通讯协议版本高位(例 : 版本为3 .1, 则此处发3),	, Re - 1, Off - 0,
-UINT8 BMS_ProtocolEditionL = 0x00;			  //通讯协议版本低位(例 : 版本为3 .1, 则此处发1),	, Re - 1, Off - 0,
-UINT8 BMS_CharDevNum = 0x00;				  //可充电装置系统序号(BMS是整车中可充电装置系统中的第几个, 需要整车告知),1,Re-1,Off-0,
-UINT8 BMS_FtPosRly = 0x00;					  //主正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegRly = 0x00;					  //主负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly1 = 0x00;				  //充正1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly1 = 0x00;				  //充负1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly2 = 0x00;				  //充正2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly2 = 0x00;				  //充负2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatRly1 = 0x00;				  //加热1/正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatRly2 = 0x00;				  //加热2/负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_StPosRly = 0x00;					  //主正继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegRly = 0x00;					  //主负继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPreCharRly = 0x00;				  //预充继电器状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPosCharRly1 = 0x00;				  //直流充正继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegCharRly1 = 0x00;				  //直流充负继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StPosCharRly2 = 0x00;				  //直流充正继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_StNegCharRly2 = 0x00;				  //直流充负继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
-UINT8 BMS_FtAuxRelayWeld = 0x00;			  //附件继电器粘连故障(保留),0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_BraOpenCirc = 0x00;				  //支路断路故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtBackCharCurrOutLim = 0x00;		  //回充电流超限报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPosRlyOpen = 0x00;				  //主正继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegRlyOpen = 0x00;				  //主负继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly1Open = 0x00;			  //直流充电正1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPosCharRly2Open = 0x00;			  //直流充电正2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly1Open = 0x00;			  //直流充电负1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNegCharRly2Open = 0x00;			  //直流充电负2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMSContClose = 0x00;			  //加热膜或TMS接触器无法断开报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMSContOpen = 0x00;				  //加热膜或TMS接触器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtTMS = 0x00;						  //热管理系统故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_Ft24VSpy = 0x00;					  // BMS 24V供电异常报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtPACKSelfProt = 0x00;			  //电池包自保护报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharSockTempOver = 0x00;		  //充电插座过温报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtTempOutCtrl = 0x00;				  //热失控报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_StPosHeatRly = 0x00;				  //加热正继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
-UINT8 BMS_StNegHeatRly = 0x00;				  //加热负继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
-UINT8 BMS_CharSysNum = 0x00;				  //可充电储能子系统总数(保留),,Re-1,Off-0,
-UINT8 BMS_FtCode = 0x00;					  //电池系统故障码,详见附表电池系统故障码列表,Re-1,Off-0,
-UINT8 BMS_ST1CheckSum = 0x00;				  // B2V_ST1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
-UINT8 BMS_ST1Counter = 0x00;				  // B2V_ST1的生命信号,0~14循环,15:信号无效,Re-1,Off-0,
-UINT8 BMS_Mode = 0x00;						  // BMS当前状态,0:预留;1:高压上电;2:高压下电;3:无效;,Re-1,Off-0,
-UINT8 BMS_AuxRlySt = 0x00;					  //附件继电器状态,0:开启;1:闭合;,Re-1,Off-0,
-UINT8 BMS_BattBalaSt = 0x00;				  // BMS当前均衡状态,0:未开启均衡;1:开启均衡;,Re-1,Off-0,
-UINT8 BMS_CharGunSt = 0x00;					  //直流充电枪连接状态,0:未连接1 : 连接, Re - 1, Off - 0,
-UINT8 BMS_CharMode = 0x00;					  // BMS当前充电模式,0:预留1 : 直流充电 2 : 交流充电 3 : 其他充电, Re - 1, Off - 0,
-UINT8 BMS_CharSt = 0x00;					  //充电状态,0:可以充电1 : 正在充电 2 : 充电结束 3 : 充电故障, Re - 1, Off - 0,
-UINT8 BMS_FtLvl = 0x00;						  //当前最高故障等级,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempDiff = 0x00;			  //电芯温差异常报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempHigh = 0x00;			  //电芯温度过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPACKOverVolt = 0x00;			  // PACK过压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtPACKUndeVolt = 0x00;			  // PACK欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtSOCLow = 0x00;					  // SOC过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellOverVolt = 0x00;			  //单体电压过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellUndeVolt = 0x00;			  //单体电压欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtIns = 0x00;						  //绝缘报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellOverVoltDiff = 0x00;		  //单体压差过大,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCharCurrOver = 0x00;			  //充电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtDisCharCurrOver = 0x00;			  //放电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtCellTempLow = 0x00;				  //电芯温度过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtBranVoltDifOver = 0x00;			  //支路压差过大报警(存在并联支路的系统),0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtBMSHardWare = 0x00;				  // BMS硬件故障,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtSOCHigh = 0x00;					  // SOC过高报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSOCJump = 0x00;					  // SOC跳变报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtInCom = 0x00;					  // BMS内部通信故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSysMism = 0x00;					  // BMS/可充电储能系统不匹配报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHvIntLock = 0x00;				  //高压互锁报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSmoke = 0x00;					  //火警探测器故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtFire = 0x00;					  //电池包火灾报警,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtNum = 0x00;						  // BMS当前发生的故障总数目(包括GB32960中规定的故障数目),,Re-1,Off-0,
-UINT8 BMS_PackSOC = 0x00;					  //电池包SOC,,Re-0.4,Off-0,
-UINT8 BMS_PackSOH = 0x00;					  //电池包SOH,,Re-0.4,Off-0,
-UINT8 BMS_MaxCellTemp = 0x00;				  //单体最高温度,,Re-1,Off--50,℃
-UINT8 BMS_MinCellTemp = 0x00;				  //单体最低温度,,Re-1,Off--50,℃
-UINT8 BMS_AverCellTemp = 0x00;				  //单体平均温度,,Re-1,Off--50,℃
-UINT8 BMS_MaxCellTempCSC = 0x00;			  //最高温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellTempNum = 0x00;			  //最高温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellTempCSC = 0x00;			  //最低温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellTempNum = 0x00;			  //最低温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellVoltCSC = 0x00;			  //最高电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MaxCellVoltNum = 0x00;			  //最高电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellVoltCSC = 0x00;			  //最低电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_MinCellVoltNum = 0x00;			  //最低电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
-UINT8 BMS_InsDeteSt = 0x00;					  // BMS绝缘检测状态,0:停止检测;1:激活检测;,Re-1,Off-0,
-UINT8 BMS_FtCharInsLow = 0x00;				  //充电绝缘阻值低,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCurrSenr = 0x00;				  //电流传感器故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtHeatingFilm = 0x00;				  //加热膜加热回路故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtMainLoopPreChar = 0x00;			  //主回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtAuxLoopPreChar = 0x00;			  //辅件回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtACANLost = 0x00;				  // ACAN/整车CAN通讯故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtDCDC = 0x00;					  // BMS-DC-DC故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtSOCDif = 0x00;					  // SOC差异过大,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCellOverDisChar = 0x00;			  //电芯过放故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharOver = 0x00;				  //车载储能装置过充报警,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtContDisCharCurrOverLoad = 0x00;	  //持续回充过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_FtContCharCurrOverLoad = 0x00;	  //持续放电过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
-UINT8 BMS_Gun1DCNegTemp = 0x00;				  //充电口1负温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun1DCPosTemp = 0x00;				  //充电口1正温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun2DCNegTemp = 0x00;				  //充电口2负温感值,,Re-1,Off--40,℃
-UINT8 BMS_Gun2DCPosTemp = 0x00;				  //充电口2正温感值,,Re-1,Off--40,℃
-UINT8 BMS_CurrHeatSt = 0x00;				  //当前加热状态,0:未加热;1:加热中;2:预留;3:无效;,Re-1,Off-0,
-UINT8 BMS_CurrCoolSt = 0x00;				  //当前冷却状态,0:未冷却;1:冷却中;2:预留;3:无效;,Re-1,Off-0,
-UINT8 BMS_FtCharCnct = 0x00;				  //插枪连接信号异常,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtOverDisCharCurrDuringChar = 0x00; //充电时放电电流过大,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtCharNTC = 0x00;					  //充电插座NTC故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_FtELock = 0x00;					  //电子锁故障,0:正常; 1:故障,Re-1,Off-0,
-UINT8 BMS_CellVoltFramNum = 0x00;			  //单体电压帧序号,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CellTempFramNum = 0x00;			  //温度帧序号,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CSC_Code = 0x00;					  //子系统编号CSC,有效值1~255,Re-1,Off-0,
-UINT8 BMS_CellTemp[BMS_TEMP_MAX_NUM] = {0x00};			  //当前CSC下的第N个探针的温度,255 "Invalid" 0xFF 无效有效值 0 ~254, 单位 ℃, 范围(-50 ~204)℃, , Re - 1, Off-- 50,℃
-UINT8 BMS_Checksum = 0x00;					  //电池编码信息1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
-UINT8 BMS_PackComp = 0x00;					  //电池厂家,1:"CATL" 2:"Li Shen" 3:"MGL" 4:"SAMSUN" 5:"LG",Re-1,Off-0,
-UINT8 BMS_BattCodeLeng = 0x00;				  //电池编码长度,0:Do not transmit this Code,Re-1,Off-0,
-UINT8 BMS_SN[27] = {0x00};					  //电池编码(SN)字符1(ASCII),,Re-1,Off-0,
-UINT8 BMS_BattType = 0x00;					  //电池类型,1:铅酸电池; 2:镍氢电池; 3:磷酸铁锂电池; 4:锰酸锂电池; 5:钴酸锂电池; 6:三元材料电池; 7:聚合物锂离子电池; 8:钛酸锂电池; 9:超级电容; 10~13:保留; 14:燃料电池;15:保留,Re-1,Off-0,
-UINT8 BMS_CoolType = 0x00;					  //电池冷却方式,0:其他冷却方式1 : 自然冷却 2 : 风扇冷却 3 : 水冷却, Re - 1, Off - 0,
-UINT8 BMS_CSC_Total = 0x00;					  //电池系统中CSC总的数目,,Re-1,Off-0,
-UINT8 BMS_CellVoltLevel = 0x00;				  //单体平台电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_CellMinVolt = 0x00;				  //单体可用最低电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_CellMaxVolt = 0x00;				  //单体可用最高电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
-UINT8 BMS_HVBranNum = 0x00;					  //电池系统高压支路数,,Re-1,Off-0,
-UINT8 BMS_SingleHVBranchCellNum = 0x00;		  //电池系统单支路电芯数,,Re-1,Off-0,
-UINT8 BMS_ReqMode = 0x00;					  // BMS请求设定模式,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
-UINT8 BMS_HVCmd = 0x00;						  //高压请求,0:请求上高压1 : 请求下高压, Re - 1, Off - 0,
-UINT8 BMS_ChgSts = 0x00;					  //充电状态,0:非充电1 : 充电, Re - 1, Off - 0,
-UINT8 BMS_HVRelaySts = 0x00;				  // BMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
-UINT8 BMS_SetTemp = 0x00;					  //设定温度,,Re-1,Off--40,
-UINT8 BMS_Life = 0x00;						  // BMS生命帧,,Re-1,Off-0,
-UINT8 BMS_CRC = 0x00;						  // CRC校验值,,Re-1,Off-0,
-UINT8 TMS_WorkStatus = 0x00;				  // TMS工作状态,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
-UINT8 TMS_HVRelayST = 0x00;					  // TMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
-UINT8 TMS_OutletTemp = 0x00;				  //出水温度(机组到电池),255:无效,Re-1,Off--40,
-UINT8 TMS_InletTemp = 0x00;					  //回水温度(电池到机组),255:无效,Re-1,Off--40,
-UINT8 TMS_ErrCode = 0x00;					  // TMS故障码,0:无故障; 出现 1 种以上循环发送,Re-1,Off-0,
-UINT8 TMS_FaultLevel = 0x00;				  // TMS故障码等级,0:无效1 : 1级故障 2 : 2级故障 3 : 3级故障, Re - 1, Off - 0,
-UINT16 BMS_SoftwareVersion = 0x00;			  //软件版本号:RyyyBzzz(R为软件版本、B为测试版本、正式版本不带B)  ,yyy:0~254,精度1,255:无效,不显示;zzz:0~254,精度1,255:无效,不显示;
-UINT16 BMS_HardwareVersion = 0x00;			  //硬件版本号:VyyyBzzz(V为硬件版本、B为测试版本、正式版本不带B)  ,,Re-1,Off-0,
-UINT16 BMS_PackCurr = 0x00;					  //电池包总电流,充电为负值,放电为正值,,Re-0.1,Off--1000,A
-UINT16 BMS_MaxCharCurr = 0x00;				  //电池包最大回充电流,,Re-0.1,Off--1000,A
-UINT16 BMS_MaxDisCharCurr = 0x00;			  //电池包最大放电电流,,Re-0.1,Off--1000,A
-UINT16 BMS_PosIns = 0x00;					  //母线正对车体绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_NegIns = 0x00;					  //母线负对车体绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_BattVolt = 0x00;					  //电池包内侧电压,,Re-0.1,Off-0,V
-UINT16 BMS_LinkVolt = 0x00;					  //电池包外侧电压,,Re-0.1,Off-0,V
-UINT16 BMS_MaxCellVolt = 0x00;				  //单体最高电压值,,Re-0.001,Off-0,V
-UINT16 BMS_AverCellVolt = 0x00;				  //电芯电压平均值,,Re-0.001,Off-0,V
-UINT16 BMS_MinCellVolt = 0x00;				  //电芯最低电压值,,Re-0.001,Off-0,V
-UINT16 BMS_ContChrgCurr = 0x00;				  // BMS允许的持续回充电流,,Re-0.1,Off-0,A
-UINT16 BMS_ContDisCharCurr = 0x00;			  // BMS允许的持续放电电流,,Re-0.1,Off--1000,A
-UINT16 BMS_CharReqVolt = 0x00;				  //充电所需电压(交流),,Re-0.1,Off-0,V
-UINT16 BMS_CharReqCurr = 0x00;				  //充电所需电流(交流),,Re-0.1,Off--1000,A
-UINT16 BMS_SysInsRes = 0x00;				  //系统绝缘电阻,,Re-1,Off-0,KΩ
-UINT16 BMS_MaxDisCharPwr = 0x00;			  //最大允许放电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_MaxCharPwr = 0x00;				  //最大允许充电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_ContDisCharPwr = 0x00;			  // BMS允许的持续放电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_ContCharPwr = 0x00;				  // BMS允许的持续充电功率,,Re-0.1,Off-0,kw
-UINT16 BMS_InstEngyCons = 0x00;				  //动力电池瞬时百公里能耗,,Re-0.1,Off-0,kwh
-UINT16 BMS_TotalEngyCons = 0x00;			  //动力电池总/平均百公里能耗,,Re-0.1,Off-0,kwh
-UINT16 BMS_SOE = 0x00;						  //剩余电量,,Re-0.01,Off-0,kwh
-UINT16 BMS_RmanCharTime = 0x00;				  //剩余充电时间,,Re-1,Off-0,min
-UINT16 BMS_CharNum = 0x00;					  //充电次数,,Re-1,Off-0,
-UINT16 BMS_CellVolt[BMS_CELL_MAX_NUM] = {0x00};			  //电芯的电压,65535 "Invalid" 0xFFFF 无效有效值 0 ~65534, 范围(0 ~65.534) V, Re - 0.001, Off - 0, V
-UINT16 BMS_BattRateCap = 0x00;				  //电池包额定容量,有效值 0~65534,65535 "Signal Invalid" 无效,Re-1,Off-0,Ah
-UINT16 BMS_BattRateVolt = 0x00;				  //电池包额定电压,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,V
-UINT16 BMS_BattRateEngy = 0x00;				  //电池包额定能量,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,kWh
-UINT16 BMS_CellTotal = 0x00;				  // PACK中单体电芯的总数目,,Re-1,Off-0,
-UINT16 BMS_TempTotal = 0x00;				  // PACK中电芯温度点(探针)的总数目,,Re-1,Off-0,
-UINT16 BMS_SingleCharEngy = 0x00;			  //单次充电kWh 数,,Re-0.1,Off-0,KWh
-UINT16 BMS_SingleCharCapy = 0x00;			  //单次充电Ah 数,,Re-0.1,Off-0,Ah
-UINT16 BMS_HVVolt = 0x00;					  // BMS当前电压,,Re-1,Off-0,
-UINT16 TMS_ReqPow = 0x00;					  // TMS需求功率,65535:无效,Re-0.1,Off-0,Kw
-UINT32 BMS_TotalCharEngy = 0x00;			  //累计充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalDisCharEngy = 0x00;			  //累计放出kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalBackCharEngy = 0x00;		  //累计动能回馈充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalStaCharEngy = 0x00;			  //累计换电站充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalGunCharEngy = 0x00;			  //累计插枪充电充入kWh 数,,Re-0.1,Off-0,KWh
-UINT32 BMS_TotalGunCharCapy = 0x00;			  //累计插枪充电充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalCharCapy = 0x00;			  //累计充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalDisCharCapy = 0x00;			  //累计放出Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalBackCharCapy = 0x00;		  //累计动能回馈充入Ah 数,,Re-0.1,Off-0,Ah
-UINT32 BMS_TotalStaCharCapy = 0x00;			  //累计换电站充入Ah 数,,Re-0.1,Off-0,Ah
+UINT8 BMS_ReqVIN = 0x00;						//是否请求VIN码,0:预留;1:请求VIN;2:不请求VIN;3:无效;,Re-1,Off-0,
+UINT8 BMS_ReqHVOff = 0x00;						//是否请求下高压,0:预留;1:请求下高压;2:不请求下高压;3:无效;,Re-1,Off-0,
+UINT8 BMS_ProtocolEditionH = 0x00;				//通讯协议版本高位(例 : 版本为3 .1, 则此处发3),	, Re - 1, Off - 0,
+UINT8 BMS_ProtocolEditionL = 0x00;				//通讯协议版本低位(例 : 版本为3 .1, 则此处发1),	, Re - 1, Off - 0,
+UINT8 BMS_CharDevNum = 0x00;					//可充电装置系统序号(BMS是整车中可充电装置系统中的第几个, 需要整车告知),1,Re-1,Off-0,
+UINT8 BMS_FtPosRly = 0x00;						//主正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegRly = 0x00;						//主负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly1 = 0x00;					//充正1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly1 = 0x00;					//充负1继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly2 = 0x00;					//充正2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly2 = 0x00;					//充负2继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtHeatRly1 = 0x00;					//加热1/正继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtHeatRly2 = 0x00;					//加热2/负继电器粘连故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_StPosRly = 0x00;						//主正继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StNegRly = 0x00;						//主负继电器状态(如继电器状态由BMS检测),0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StPreCharRly = 0x00;					//预充继电器状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StPosCharRly1 = 0x00;					//直流充正继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StNegCharRly1 = 0x00;					//直流充负继电器1状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StPosCharRly2 = 0x00;					//直流充正继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_StNegCharRly2 = 0x00;					//直流充负继电器2状态,0:预留;1:开启;2:闭合;3:无效;,Re-1,Off-0,
+UINT8 BMS_FtAuxRelayWeld = 0x00;				//附件继电器粘连故障(保留),0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_BraOpenCirc = 0x00;					//支路断路故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtBackCharCurrOutLim = 0x00;			//回充电流超限报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtPosRlyOpen = 0x00;					//主正继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegRlyOpen = 0x00;					//主负继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly1Open = 0x00;				//直流充电正1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtPosCharRly2Open = 0x00;				//直流充电正2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly1Open = 0x00;				//直流充电负1继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNegCharRly2Open = 0x00;				//直流充电负2继电器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtTMSContClose = 0x00;				//加热膜或TMS接触器无法断开报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtTMSContOpen = 0x00;					//加热膜或TMS接触器无法闭合报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtTMS = 0x00;							//热管理系统故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_Ft24VSpy = 0x00;						// BMS 24V供电异常报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtPACKSelfProt = 0x00;				//电池包自保护报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtCharSockTempOver = 0x00;			//充电插座过温报警,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtTempOutCtrl = 0x00;					//热失控报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_StPosHeatRly = 0x00;					//加热正继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
+UINT8 BMS_StNegHeatRly = 0x00;					//加热负继电器状态,0:保留;1:开启;2:闭合;3:无效,Re-1,Off-0,
+UINT8 BMS_CharSysNum = 0x00;					//可充电储能子系统总数(保留),,Re-1,Off-0,
+UINT8 BMS_FtCode = 0x00;						//电池系统故障码,详见附表电池系统故障码列表,Re-1,Off-0,
+UINT8 BMS_ST1CheckSum = 0x00;					// B2V_ST1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
+UINT8 BMS_ST1Counter = 0x00;					// B2V_ST1的生命信号,0~14循环,15:信号无效,Re-1,Off-0,
+UINT8 BMS_Mode = 0x00;							// BMS当前状态,0:预留;1:高压上电;2:高压下电;3:无效;,Re-1,Off-0,
+UINT8 BMS_AuxRlySt = 0x00;						//附件继电器状态,0:开启;1:闭合;,Re-1,Off-0,
+UINT8 BMS_BattBalaSt = 0x00;					// BMS当前均衡状态,0:未开启均衡;1:开启均衡;,Re-1,Off-0,
+UINT8 BMS_CharGunSt = 0x00;						//直流充电枪连接状态,0:未连接1 : 连接, Re - 1, Off - 0,
+UINT8 BMS_CharMode = 0x00;						// BMS当前充电模式,0:预留1 : 直流充电 2 : 交流充电 3 : 其他充电, Re - 1, Off - 0,
+UINT8 BMS_CharSt = 0x00;						//充电状态,0:可以充电1 : 正在充电 2 : 充电结束 3 : 充电故障, Re - 1, Off - 0,
+UINT8 BMS_FtLvl = 0x00;							//当前最高故障等级,0:正常1 : 1级 轻微故障 2 : 2级 较严重故障 3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellTempDiff = 0x00;				//电芯温差异常报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellTempHigh = 0x00;				//电芯温度过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtPACKOverVolt = 0x00;				// PACK过压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtPACKUndeVolt = 0x00;				// PACK欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtSOCLow = 0x00;						// SOC过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellOverVolt = 0x00;				//单体电压过高报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellUndeVolt = 0x00;				//单体电压欠压报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtIns = 0x00;							//绝缘报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellOverVoltDiff = 0x00;			//单体压差过大,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCharCurrOver = 0x00;				//充电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtDisCharCurrOver = 0x00;				//放电电流过大报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtCellTempLow = 0x00;					//电芯温度过低报警,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtBranVoltDifOver = 0x00;				//支路压差过大报警(存在并联支路的系统),0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtBMSHardWare = 0x00;					// BMS硬件故障,0:无故障; 1:1级 轻微故障; 2:2级 较严重故障3 : 3级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtSOCHigh = 0x00;						// SOC过高报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtSOCJump = 0x00;						// SOC跳变报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtInCom = 0x00;						// BMS内部通信故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtSysMism = 0x00;						// BMS/可充电储能系统不匹配报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtHvIntLock = 0x00;					//高压互锁报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtSmoke = 0x00;						//火警探测器故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtFire = 0x00;						//电池包火灾报警,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtNum = 0x00;							// BMS当前发生的故障总数目(包括GB32960中规定的故障数目),,Re-1,Off-0,
+UINT8 BMS_PackSOC = 0x00;						//电池包SOC,,Re-0.4,Off-0,
+UINT8 BMS_PackSOH = 0x00;						//电池包SOH,,Re-0.4,Off-0,
+UINT8 BMS_MaxCellTemp = 0x00;					//单体最高温度,,Re-1,Off--50,℃
+UINT8 BMS_MinCellTemp = 0x00;					//单体最低温度,,Re-1,Off--50,℃
+UINT8 BMS_AverCellTemp = 0x00;					//单体平均温度,,Re-1,Off--50,℃
+UINT8 BMS_MaxCellTempCSC = 0x00;				//最高温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MaxCellTempNum = 0x00;				//最高温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MinCellTempCSC = 0x00;				//最低温度电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MinCellTempNum = 0x00;				//最低温度电芯所在子系统(CSC)内温度探针编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MaxCellVoltCSC = 0x00;				//最高电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MaxCellVoltNum = 0x00;				//最高电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MinCellVoltCSC = 0x00;				//最低电压电芯所在子系统(CSC)编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_MinCellVoltNum = 0x00;				//最低电压电芯所在子系统(CSC)内单体编号,范围(1~255),Re-1,Off-0,
+UINT8 BMS_InsDeteSt = 0x00;						// BMS绝缘检测状态,0:停止检测;1:激活检测;,Re-1,Off-0,
+UINT8 BMS_FtCharInsLow = 0x00;					//充电绝缘阻值低,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtCurrSenr = 0x00;					//电流传感器故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtHeatingFilm = 0x00;					//加热膜加热回路故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtMainLoopPreChar = 0x00;				//主回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtAuxLoopPreChar = 0x00;				//辅件回路预充或预检故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtACANLost = 0x00;					// ACAN/整车CAN通讯故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtDCDC = 0x00;						// BMS-DC-DC故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtSOCDif = 0x00;						// SOC差异过大,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtCellOverDisChar = 0x00;				//电芯过放故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtCharOver = 0x00;					//车载储能装置过充报警,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtContDisCharCurrOverLoad = 0x00;		//持续回充过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_FtContCharCurrOverLoad = 0x00;		//持续放电过流故障,0:正常;1:1级 轻微故障;2:2级 较严重故障3 : 10级 最严重故障, Re - 1, Off - 0,
+UINT8 BMS_Gun1DCNegTemp = 0x00;					//充电口1负温感值,,Re-1,Off--40,℃
+UINT8 BMS_Gun1DCPosTemp = 0x00;					//充电口1正温感值,,Re-1,Off--40,℃
+UINT8 BMS_Gun2DCNegTemp = 0x00;					//充电口2负温感值,,Re-1,Off--40,℃
+UINT8 BMS_Gun2DCPosTemp = 0x00;					//充电口2正温感值,,Re-1,Off--40,℃
+UINT8 BMS_CurrHeatSt = 0x00;					//当前加热状态,0:未加热;1:加热中;2:预留;3:无效;,Re-1,Off-0,
+UINT8 BMS_CurrCoolSt = 0x00;					//当前冷却状态,0:未冷却;1:冷却中;2:预留;3:无效;,Re-1,Off-0,
+UINT8 BMS_FtCharCnct = 0x00;					//插枪连接信号异常,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtOverDisCharCurrDuringChar = 0x00;	//充电时放电电流过大,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtCharNTC = 0x00;						//充电插座NTC故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_FtELock = 0x00;						//电子锁故障,0:正常; 1:故障,Re-1,Off-0,
+UINT8 BMS_CellVoltFramNum = 0x00;				//单体电压帧序号,有效值1~255,Re-1,Off-0,
+UINT8 BMS_CellTempFramNum = 0x00;				//温度帧序号,有效值1~255,Re-1,Off-0,
+UINT8 BMS_CSC_Code = 0x00;						//子系统编号CSC,有效值1~255,Re-1,Off-0,
+UINT8 BMS_CellTemp[BMS_TEMP_MAX_NUM] = {0x00};	//当前CSC下的第N个探针的温度,255 "Invalid" 0xFF 无效有效值 0 ~254, 单位 ℃, 范围(-50 ~204)℃, , Re - 1, Off-- 50,℃
+UINT8 BMS_Checksum = 0x00;						//电池编码信息1的CheckSum,Byte0=Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6 XOR Byte7,Re-1,Off-0,
+UINT8 BMS_PackComp = 0x00;						//电池厂家,1:"CATL" 2:"Li Shen" 3:"MGL" 4:"SAMSUN" 5:"LG",Re-1,Off-0,
+UINT8 BMS_BattCodeLeng = 0x00;					//电池编码长度,0:Do not transmit this Code,Re-1,Off-0,
+UINT8 BMS_SN[27] = {0x00};						//电池编码(SN)字符1(ASCII),,Re-1,Off-0,
+UINT8 BMS_BattType = 0x00;						//电池类型,1:铅酸电池; 2:镍氢电池; 3:磷酸铁锂电池; 4:锰酸锂电池; 5:钴酸锂电池; 6:三元材料电池; 7:聚合物锂离子电池; 8:钛酸锂电池; 9:超级电容; 10~13:保留; 14:燃料电池;15:保留,Re-1,Off-0,
+UINT8 BMS_CoolType = 0x00;						//电池冷却方式,0:其他冷却方式1 : 自然冷却 2 : 风扇冷却 3 : 水冷却, Re - 1, Off - 0,
+UINT8 BMS_CSC_Total = 0x00;						//电池系统中CSC总的数目,,Re-1,Off-0,
+UINT8 BMS_CellVoltLevel = 0x00;					//单体平台电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
+UINT8 BMS_CellMinVolt = 0x00;					//单体可用最低电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
+UINT8 BMS_CellMaxVolt = 0x00;					//单体可用最高电压(非实时变化的值),有效值0~5V;  255 "Signal Invalid" 0xFF 无效,Re-0.1,Off-0,V
+UINT8 BMS_HVBranNum = 0x00;						//电池系统高压支路数,,Re-1,Off-0,
+UINT8 BMS_SingleHVBranchCellNum = 0x00;			//电池系统单支路电芯数,,Re-1,Off-0,
+UINT8 BMS_ReqMode = 0x00;						// BMS请求设定模式,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
+UINT8 BMS_HVCmd = 0x00;							//高压请求,0:请求上高压1 : 请求下高压, Re - 1, Off - 0,
+UINT8 BMS_ChgSts = 0x00;						//充电状态,0:非充电1 : 充电, Re - 1, Off - 0,
+UINT8 BMS_HVRelaySts = 0x00;					// BMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
+UINT8 BMS_SetTemp = 0x00;						//设定温度,,Re-1,Off--40,
+UINT8 BMS_Life = 0x00;							// BMS生命帧,,Re-1,Off-0,
+UINT8 BMS_CRC = 0x00;							// CRC校验值,,Re-1,Off-0,
+UINT8 TMS_WorkStatus = 0x00;					// TMS工作状态,0:关机模式1 : 制冷模式 2 : 制热模式 3 : 自循环模式, Re - 1, Off - 0,
+UINT8 TMS_HVRelayST = 0x00;						// TMS高压继电器状态,0:断开状态; 1:闭合状态; 2~3:无效,Re-1,Off-0,
+UINT8 TMS_OutletTemp = 0x00;					//出水温度(机组到电池),255:无效,Re-1,Off--40,
+UINT8 TMS_InletTemp = 0x00;						//回水温度(电池到机组),255:无效,Re-1,Off--40,
+UINT8 TMS_ErrCode = 0x00;						// TMS故障码,0:无故障; 出现 1 种以上循环发送,Re-1,Off-0,
+UINT8 TMS_FaultLevel = 0x00;					// TMS故障码等级,0:无效1 : 1级故障 2 : 2级故障 3 : 3级故障, Re - 1, Off - 0,
+UINT16 BMS_SoftwareVersion = 0x00;				//软件版本号:RyyyBzzz(R为软件版本、B为测试版本、正式版本不带B)  ,yyy:0~254,精度1,255:无效,不显示;zzz:0~254,精度1,255:无效,不显示;
+UINT16 BMS_HardwareVersion = 0x00;				//硬件版本号:VyyyBzzz(V为硬件版本、B为测试版本、正式版本不带B)  ,,Re-1,Off-0,
+UINT16 BMS_PackCurr = 0x00;						//电池包总电流,充电为负值,放电为正值,,Re-0.1,Off--1000,A
+UINT16 BMS_MaxCharCurr = 0x00;					//电池包最大回充电流,,Re-0.1,Off--1000,A
+UINT16 BMS_MaxDisCharCurr = 0x00;				//电池包最大放电电流,,Re-0.1,Off--1000,A
+UINT16 BMS_PosIns = 0x00;						//母线正对车体绝缘电阻,,Re-1,Off-0,KΩ
+UINT16 BMS_NegIns = 0x00;						//母线负对车体绝缘电阻,,Re-1,Off-0,KΩ
+UINT16 BMS_BattVolt = 0x00;						//电池包内侧电压,,Re-0.1,Off-0,V
+UINT16 BMS_LinkVolt = 0x00;						//电池包外侧电压,,Re-0.1,Off-0,V
+UINT16 BMS_MaxCellVolt = 0x00;					//单体最高电压值,,Re-0.001,Off-0,V
+UINT16 BMS_AverCellVolt = 0x00;					//电芯电压平均值,,Re-0.001,Off-0,V
+UINT16 BMS_MinCellVolt = 0x00;					//电芯最低电压值,,Re-0.001,Off-0,V
+UINT16 BMS_ContChrgCurr = 0x00;					// BMS允许的持续回充电流,,Re-0.1,Off-0,A
+UINT16 BMS_ContDisCharCurr = 0x00;				// BMS允许的持续放电电流,,Re-0.1,Off--1000,A
+UINT16 BMS_CharReqVolt = 0x00;					//充电所需电压(交流),,Re-0.1,Off-0,V
+UINT16 BMS_CharReqCurr = 0x00;					//充电所需电流(交流),,Re-0.1,Off--1000,A
+UINT16 BMS_SysInsRes = 0x00;					//系统绝缘电阻,,Re-1,Off-0,KΩ
+UINT16 BMS_MaxDisCharPwr = 0x00;				//最大允许放电功率,,Re-0.1,Off-0,kw
+UINT16 BMS_MaxCharPwr = 0x00;					//最大允许充电功率,,Re-0.1,Off-0,kw
+UINT16 BMS_ContDisCharPwr = 0x00;				// BMS允许的持续放电功率,,Re-0.1,Off-0,kw
+UINT16 BMS_ContCharPwr = 0x00;					// BMS允许的持续充电功率,,Re-0.1,Off-0,kw
+UINT16 BMS_InstEngyCons = 0x00;					//动力电池瞬时百公里能耗,,Re-0.1,Off-0,kwh
+UINT16 BMS_TotalEngyCons = 0x00;				//动力电池总/平均百公里能耗,,Re-0.1,Off-0,kwh
+UINT16 BMS_SOE = 0x00;							//剩余电量,,Re-0.01,Off-0,kwh
+UINT16 BMS_RmanCharTime = 0x00;					//剩余充电时间,,Re-1,Off-0,min
+UINT16 BMS_CharNum = 0x00;						//充电次数,,Re-1,Off-0,
+UINT16 BMS_CellVolt[BMS_CELL_MAX_NUM] = {0x00}; //电芯的电压,65535 "Invalid" 0xFFFF 无效有效值 0 ~65534, 范围(0 ~65.534) V, Re - 0.001, Off - 0, V
+UINT16 BMS_BattRateCap = 0x00;					//电池包额定容量,有效值 0~65534,65535 "Signal Invalid" 无效,Re-1,Off-0,Ah
+UINT16 BMS_BattRateVolt = 0x00;					//电池包额定电压,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,V
+UINT16 BMS_BattRateEngy = 0x00;					//电池包额定能量,有效值 0~6553.4,65535 "Signal Invalid" 无效,Re-0.1,Off-0,kWh
+UINT16 BMS_CellTotal = 0x00;					// PACK中单体电芯的总数目,,Re-1,Off-0,
+UINT16 BMS_TempTotal = 0x00;					// PACK中电芯温度点(探针)的总数目,,Re-1,Off-0,
+UINT16 BMS_SingleCharEngy = 0x00;				//单次充电kWh 数,,Re-0.1,Off-0,KWh
+UINT16 BMS_SingleCharCapy = 0x00;				//单次充电Ah 数,,Re-0.1,Off-0,Ah
+UINT16 BMS_HVVolt = 0x00;						// BMS当前电压,,Re-1,Off-0,
+UINT16 TMS_ReqPow = 0x00;						// TMS需求功率,65535:无效,Re-0.1,Off-0,Kw
+UINT32 BMS_TotalCharEngy = 0x00;				//累计充入kWh 数,,Re-0.1,Off-0,KWh
+UINT32 BMS_TotalDisCharEngy = 0x00;				//累计放出kWh 数,,Re-0.1,Off-0,KWh
+UINT32 BMS_TotalBackCharEngy = 0x00;			//累计动能回馈充入kWh 数,,Re-0.1,Off-0,KWh
+UINT32 BMS_TotalStaCharEngy = 0x00;				//累计换电站充入kWh 数,,Re-0.1,Off-0,KWh
+UINT32 BMS_TotalGunCharEngy = 0x00;				//累计插枪充电充入kWh 数,,Re-0.1,Off-0,KWh
+UINT32 BMS_TotalGunCharCapy = 0x00;				//累计插枪充电充入Ah 数,,Re-0.1,Off-0,Ah
+UINT32 BMS_TotalCharCapy = 0x00;				//累计充入Ah 数,,Re-0.1,Off-0,Ah
+UINT32 BMS_TotalDisCharCapy = 0x00;				//累计放出Ah 数,,Re-0.1,Off-0,Ah
+UINT32 BMS_TotalBackCharCapy = 0x00;			//累计动能回馈充入Ah 数,,Re-0.1,Off-0,Ah
+UINT32 BMS_TotalStaCharCapy = 0x00;				//累计换电站充入Ah 数,,Re-0.1,Off-0,Ah
 #endif

+ 3 - 3
src/AppGlobalVar.h

@@ -21,13 +21,13 @@
 
 #include "hal_adapter.h"
 // test Var
-//#define defaultSn "GYTEST00000000001"
-#define defaultSn "PZLCLL128N2236001"
+#define defaultSn "GYTEST00000000001"
+// #define defaultSn "PZLCLL128N2236001"
 #define BATT_SN_LEN 17
 #define HWVERSION 0x0001
 #define BLSWVERSION 0x00000001
 #define DRVSWVERSION 0x00000001
-#define APPSWVERSION 0x00000102
+#define APPSWVERSION 0x00000104
 #define BMS_MANUFACTURE 0xFF
 #define BMS_INFO 0xFF
 #define DATA_MODULE_TYPE 0x02

+ 3 - 0
src/AppTaskCan.c

@@ -411,6 +411,9 @@ void BcuDecodeFunction(uint32 ID, uint8 *rawData)
 		TMS_FaultLevel = (UINT8)(((*(UINT8 *)(rawData + 7)) >> 6) & 0x3);
 		BcuRxFlag[27] = 0x01;
 		break;
+	case 0x1C00EDEA:
+		UDSAnsFunc(rawData);
+		break;
 	default:
 		break;
 	}