Browse Source

【V3.0.0.22】-1.增加三轴数据,2.屏蔽NB满充保护,3.Gps逻辑修改,4.CAN增加

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
bad54fabc9
10 changed files with 200 additions and 156 deletions
  1. 2 2
      inc/AppConfig.h
  2. 2 2
      inc/AppSignal.h
  3. 81 79
      inc/AppTaskTcp.h
  4. 11 3
      src/AppFunc.c
  5. 2 1
      src/AppSignal.c
  6. 25 0
      src/AppTaskGps.c
  7. 2 16
      src/AppTaskMain.c
  8. 49 26
      src/AppTaskTcp.c
  9. 4 3
      src/AppTaskUart.c
  10. 22 24
      src/sensor.c

+ 2 - 2
inc/AppConfig.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-21 16:54:48
+ * @LastEditTime : 2021-10-22 12:13:12
  * @Description  : App Config H file 配置文件,可以针对不同参数进行更改
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppConfig.h
  */
@@ -14,7 +14,7 @@
 #define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
 #define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "RLTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x03000015        //数据模块软件版本号
+#define APPSWVERSION 0x03000016        //数据模块软件版本号
 #define RELAYCONFIG 0                  //继电器配置
 #define TCP_ADD "iotp.fast-fun.cn"     //数据上传的地址
 #define TCP_PORT 8712                  //数据上传的端口

+ 2 - 2
inc/AppSignal.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-18 14:38:28
+ * @LastEditTime : 2021-10-22 11:54:52
  * @Description  : Global variable definition H file
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppSignal.h
  */
@@ -84,7 +84,7 @@ extern UINT16 nbHwVersion;
 extern UINT16 avrgCellVol;
 extern UINT16 ErrorNum[ErrorNumLength];
 extern UINT16 updateDifferDataPackageCounter;
-
+extern INT16 xyzData[3];
 //declear the UINT32 vars
 extern UINT32 battBalanceoInfo;
 extern UINT32 battProtectState;

+ 81 - 79
inc/AppTaskTcp.h

@@ -30,18 +30,18 @@
 #include "AppConfig.h"
 #include "AppFunc.h"
 
-#define PROC_TCP_TASK_STACK_SIZE           (2048 + 1024)
-#define APP_EVENT_QUEUE_SIZE               (10)
-#define QMSG_ID_BASE               (0x16) 
-#define QMSG_ID_NW_IP_READY        (QMSG_ID_BASE)
-#define QMSG_ID_NW_IP_SUSPEND      (QMSG_ID_BASE + 1)
-#define QMSG_ID_NW_IP_NOREACHABLE  (QMSG_ID_BASE + 2)
-#define QMSG_ID_SOCK_SENDPKG       (QMSG_ID_BASE + 4)
-#define QMSG_ID_SOCK_RECVPKG       (QMSG_ID_BASE + 5)
-#define QMSG_ID_SOCK_LISTEN        (QMSG_ID_BASE + 6)
-#define QMSG_ID_SOCK_EXIT          (QMSG_ID_BASE + 7)
+#define PROC_TCP_TASK_STACK_SIZE (2048 + 1024)
+#define APP_EVENT_QUEUE_SIZE (10)
+#define QMSG_ID_BASE (0x16)
+#define QMSG_ID_NW_IP_READY (QMSG_ID_BASE)
+#define QMSG_ID_NW_IP_SUSPEND (QMSG_ID_BASE + 1)
+#define QMSG_ID_NW_IP_NOREACHABLE (QMSG_ID_BASE + 2)
+#define QMSG_ID_SOCK_SENDPKG (QMSG_ID_BASE + 4)
+#define QMSG_ID_SOCK_RECVPKG (QMSG_ID_BASE + 5)
+#define QMSG_ID_SOCK_LISTEN (QMSG_ID_BASE + 6)
+#define QMSG_ID_SOCK_EXIT (QMSG_ID_BASE + 7)
 // typedef struct BattInfoType
-// {	
+// {
 // 	UINT8	sendTimeUTC[6];
 // 	UINT8	msgMark;
 // 	UINT8	msgCollectionTimeUTC[6];
@@ -67,99 +67,101 @@
 // 	UINT8 	battotherTemp[BMS_OTHER_TEMP+NB_OTHER_TEMP_NUM];
 // }BattInfoType;
 // typedef struct BattMsgtoTcpType
-// {	
+// {
 // 	UINT8 	startSymbol[2];
 // 	UINT8	cmdSymbol;
 // 	UINT8	ansSymbol;
 // 	UINT8	SN[BATT_SN_LEN];
 // 	UINT8	encryptMethod;
-// 	UINT8	dataLength[2];	
-// 	BattInfoType battInfo;	
+// 	UINT8	dataLength[2];
+// 	BattInfoType battInfo;
 // 	UINT8	CRC;
 // }BattMsgtoTcpType;
 /*---------------------------------------------------------------------------*/
 typedef struct HeartMsgtoTcpType
-{	
-	UINT8 	startSymbol[2];
-	UINT8	cmdSymbol;
-	UINT8	ansSymbol;
-	UINT8	SN[BATT_SN_LEN];
-	UINT8	encryptMethod;
-	UINT8	dataLength[2];		
-	UINT8	CRC;
-}HeartMsgtoTcpType;
+{
+	UINT8 startSymbol[2];
+	UINT8 cmdSymbol;
+	UINT8 ansSymbol;
+	UINT8 SN[BATT_SN_LEN];
+	UINT8 encryptMethod;
+	UINT8 dataLength[2];
+	UINT8 CRC;
+} HeartMsgtoTcpType;
 typedef struct _GPSInfoType
 {
-	UINT8	sendTimeUTC[6];
-	UINT8	msgMark;
-	UINT8	msgCollectionTimeUTC[6];
+	UINT8 sendTimeUTC[6];
+	UINT8 msgMark;
+	UINT8 msgCollectionTimeUTC[6];
 	GPSInfo GpsInfoData;
-	UINT8	Tac[2];
-	UINT8	CellID[4];
-	
-}GPSInfoType;
+	UINT8 Tac[2];
+	UINT8 CellID[4];
+	UINT8 xData[2];
+	UINT8 yData[2];
+	UINT8 zData[2];
+} GPSInfoType;
 typedef struct GPSMsgtoTcpType
 {
-	UINT8 	startSymbol[2];
-	UINT8	cmdSymbol;
-	UINT8	ansSymbol;
-	UINT8	SN[BATT_SN_LEN];
-	UINT8	encryptMethod;
-	UINT8	dataLength[2];	
-	GPSInfoType gpsInfo;	
-	UINT8	CRC;
-}GPSMsgtoTcpType;
+	UINT8 startSymbol[2];
+	UINT8 cmdSymbol;
+	UINT8 ansSymbol;
+	UINT8 SN[BATT_SN_LEN];
+	UINT8 encryptMethod;
+	UINT8 dataLength[2];
+	GPSInfoType gpsInfo;
+	UINT8 CRC;
+} GPSMsgtoTcpType;
 /*---------------------------------------------------------------------------*/
 typedef struct _VerInfoType
 {
-	UINT8	sendTimeUTC[6];
-	UINT8	msgMark;
-	UINT8	msgCollectionTimeUTC[6];
-	UINT8	ICCID[20];
-	UINT8	IMEI[15];
-	UINT8	BMSHwVersion[2];
-	UINT8	BMSSwVersion[4];
-	UINT8	NBHwVersion[2];
-	UINT8	BLVersion[4];
-	UINT8	DRVVersion[4];
-	UINT8	APPVersion[4];
-	UINT8	BmsType;
-	UINT8	BmsInfo;
-	UINT8   DataModuleType;
-}VerInfoType;
+	UINT8 sendTimeUTC[6];
+	UINT8 msgMark;
+	UINT8 msgCollectionTimeUTC[6];
+	UINT8 ICCID[20];
+	UINT8 IMEI[15];
+	UINT8 BMSHwVersion[2];
+	UINT8 BMSSwVersion[4];
+	UINT8 NBHwVersion[2];
+	UINT8 BLVersion[4];
+	UINT8 DRVVersion[4];
+	UINT8 APPVersion[4];
+	UINT8 BmsType;
+	UINT8 BmsInfo;
+	UINT8 DataModuleType;
+} VerInfoType;
 typedef struct VersionMsgtoTcpType
 {
-	UINT8 	startSymbol[2];
-	UINT8	cmdSymbol;
-	UINT8	ansSymbol;
-	UINT8	SN[BATT_SN_LEN];
-	UINT8	encryptMethod;
-	UINT8	dataLength[2];	
-	VerInfoType VerInfo;	
-	UINT8	CRC;
-}VersionMsgtoTcpType;
+	UINT8 startSymbol[2];
+	UINT8 cmdSymbol;
+	UINT8 ansSymbol;
+	UINT8 SN[BATT_SN_LEN];
+	UINT8 encryptMethod;
+	UINT8 dataLength[2];
+	VerInfoType VerInfo;
+	UINT8 CRC;
+} VersionMsgtoTcpType;
 typedef struct _DebugInfoType
 {
-	UINT8	sendTimeUTC[6];
-	UINT8	msgMark;
-	UINT8  	DebugLen[2];
-}DebugInfoType;
+	UINT8 sendTimeUTC[6];
+	UINT8 msgMark;
+	UINT8 DebugLen[2];
+} DebugInfoType;
 typedef struct DebugMsgtoTcp_Type
 {
-	UINT8 	startSymbol[2];
-	UINT8	cmdSymbol;
-	UINT8	ansSymbol;
-	UINT8	SN[BATT_SN_LEN];
-	UINT8	encryptMethod;
-	UINT8	dataLength[2];		
+	UINT8 startSymbol[2];
+	UINT8 cmdSymbol;
+	UINT8 ansSymbol;
+	UINT8 SN[BATT_SN_LEN];
+	UINT8 encryptMethod;
+	UINT8 dataLength[2];
 	DebugInfoType DebugInfo;
-	UINT8	CRC;
-}DebugMsgtoTcpType;
+	UINT8 CRC;
+} DebugMsgtoTcpType;
 typedef enum
 {
-    APP_SOCKET_CONNECTION_CLOSED = 0,
-    APP_SOCKET_CONNECTION_CONNECTING,
-    APP_SOCKET_CONNECTION_CONNECTED,    
-}AppSocketConnectionStatus;
+	APP_SOCKET_CONNECTION_CLOSED = 0,
+	APP_SOCKET_CONNECTION_CONNECTING,
+	APP_SOCKET_CONNECTION_CONNECTED,
+} AppSocketConnectionStatus;
 void AppTaskTcpInit(void *arg);
 void AppTaskTcpDeInit(void *arg);

+ 11 - 3
src/AppFunc.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-21 19:04:28
+ * @LastEditTime : 2021-10-22 14:27:36
  * @Description  : 应用层函数定义区,UTF-8
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppFunc.c
  */
@@ -2267,12 +2267,12 @@ void UDS_Service(CAN_Msg_Type *CanRxMsg)
 						posCode = GpsFlag;
 						UDSPositiveAnswer(0x05, i, posCode); //gps satellite num(uint8), should be modified
 					}
-					else if (UDSSubService[i] == 0x0F) //read ram data  22 0F xx xx xx xx XX XX
+					else if (UDSSubService[i] == 0x0E) //read ram data  22 0E xx xx xx xx XX XX
 					{
 						UINT32 *addr = (UINT32 *)(CanRxMsg[i].Data[5] | (CanRxMsg[i].Data[4] << 8) | (CanRxMsg[i].Data[3] << 16) | (CanRxMsg[i].Data[2] << 24));
 						UINT16 size = CanRxMsg[i].Data[7] | (CanRxMsg[i].Data[6] << 8);
 						UINT32 retData = *(addr);
-						UDSPositiveAnswer(8, i, retData); // 08 78 22 0F xx xx xx xx
+						UDSPositiveAnswer(8, i, retData); // 08 78 22 0E xx xx xx xx
 					}
 					else
 					{
@@ -2347,6 +2347,14 @@ void UDS_Service(CAN_Msg_Type *CanRxMsg)
 						updateDifferDataByteLen = (CanRxMsg[i].Data[2] << 16) | (CanRxMsg[i].Data[3] << 8) | CanRxMsg[i].Data[4];
 						UDSPositiveAnswer(0x04, i, 00);
 					}
+					else if (UDSSubService[i] == 0x0E) //write ram data  2E 0E xx xx xx xx XX XX
+					{
+						UINT32 *addr = (UINT32 *)(CanRxMsg[i].Data[5] | (CanRxMsg[i].Data[4] << 8) | (CanRxMsg[i].Data[3] << 16) | (CanRxMsg[i].Data[2] << 24));
+						UINT16 data = CanRxMsg[i].Data[7] | (CanRxMsg[i].Data[6] << 8);
+						*(addr) = data;
+						UINT32 retData = *(addr);
+						UDSPositiveAnswer(8, i, retData); // 08 78 2E 0E xx xx xx xx
+					}
 					else
 					{
 						UDSNegtiveAnswer(0x05, i, 0xEE);

+ 2 - 1
src/AppSignal.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-21 18:59:43
+ * @LastEditTime : 2021-10-22 11:54:34
  * @Description  : Global variable definition c file,此文件存放App使用到的全局变量
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppSignal.c
  */
@@ -80,6 +80,7 @@ UINT16 maxCellVol = 0;                     //最大单体电压
 UINT16 minCellVol = 0;                     //最小单体电压
 UINT16 nbHwVersion = 0;                    //数据模块硬件状态
 UINT16 updateDifferDataPackageCounter = 0; //差分包升级计数器
+INT16 xyzData[3] = {0};                    //xyz三轴数据
 
 /**declear the uint32 vars**/
 UINT32 battBalanceoInfo = 0; //电池均衡状态

+ 25 - 0
src/AppTaskGps.c

@@ -39,6 +39,11 @@ static void GpsTask(void *arg)
 	UINT16 direction;
 	UINT16 GpsNoDataCounter = 0;
 	UINT8 index = 0;
+	UINT8 xyzCounter = 0;
+	INT16 xData[3] = {0};
+	INT16 yData[3] = {0};
+	INT16 zData[3] = {0};
+	INT16 xyzDataBuffer[3] = {0};
 	GPSInfo GpsInfoData;
 	PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_INIT);
 	while (1)
@@ -196,6 +201,26 @@ static void GpsTask(void *arg)
 					free(msg.dataPtr);
 				msg.dataPtr = NULL;
 			}
+			if (getbit(PadInterrupt, 3) == 1 || getbit(PadInterrupt, 4) == 1 || TimeCounter % 50 == 0)
+			{
+				//SL_SC7A20_Reg_read_all();
+				UINT8 ret = SL_SC7A20_Read_XYZ_Data(xyzDataBuffer);
+				xData[xyzCounter] = xyzDataBuffer[0];
+				yData[xyzCounter] = xyzDataBuffer[1];
+				zData[xyzCounter] = xyzDataBuffer[2];
+				xyzCounter++;
+				if (xyzCounter > 2)
+				{
+					xyzCounter = 0;
+				}
+				xyzData[0] = (xData[0] + xData[1] + xData[2]) / 3;
+				xyzData[1] = (yData[0] + yData[1] + yData[2]) / 3;
+				xyzData[2] = (zData[0] + zData[1] + zData[2]) / 3;
+#ifdef USING_PRINTF
+				printf("\n%d %d %d \r\n", xyzData[0], xyzData[1], xyzData[2]);
+#endif
+			}
+
 			PROC_GPS_STATE_SWITCH(PROCESS_GPS_STATE_IDLE);
 			break;
 		}

+ 2 - 16
src/AppTaskMain.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-21 16:47:53
+ * @LastEditTime : 2021-10-22 11:13:19
  * @Description  : 主要负责:1.工作模式转换2.定时器定时3.定时保存运行数据4.异常状态重启
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppTaskMain.c
  */
@@ -109,7 +109,7 @@ static void MainTask(void *arg)
             {
                 xTimerReset(work_timer, 0);
             }
-            if (TcpErrorcount >= 10 && getbit(PadInterrupt, 0) == 0x00)
+            if ((TcpErrorcount >= 10 && getbit(PadInterrupt, 0) == 0x00) || (NB_Fota_update_flag == TRUE))
             {
                 AppDataInfo.appDataModify = true;
                 AppDataInfo.SysReStartCount = AppDataInfo.SysReStartCount + 1;
@@ -142,20 +142,6 @@ static void MainTask(void *arg)
         case PROCESS_STATE_LISTEN:
         {
             PROC_APP_STATE_SWITCH(LISTEN);
-            if (NB_Fota_update_flag)
-            {
-                if (AppDataInfo.appDataModify)
-                {
-                    SaveAppData();
-                }
-                if (BcuDataInfo.appDataModify)
-                {
-                    SaveBcuData();
-                }
-                appSetCFUN(0);
-                osDelay(1000);
-                EC_SystemReset();
-            }
             if (UartInterruptcount > 1)
             {
                 if (UartInterruptcount > 10)

+ 49 - 26
src/AppTaskTcp.c

@@ -272,14 +272,14 @@ static void TcpDataInfoAssembleSend()
     if (getbit(PadInterrupt, 3) == 1 || getbit(PadInterrupt, 4) == 1) //有震动产生,提高位置信息发送频率
     {
         GpsSendFreq = AppDataInfo.PosInfoSendFreqHigh;
-        if (send_counter % 10 == 0)
+        if (send_counter % 20 == 0)
         {
             clrbit(PadInterrupt, 3);
             clrbit(PadInterrupt, 4);
         }
     }
-    BattSendFreq = 10;
     UINT8 DebugFeq = 10;
+    DebugFeq = BattSendFreq;
     if (send_counter % BattSendFreq == 0 && send_counter != 0)
     {
         UINT16 ErrorTemp = 0x00;
@@ -429,32 +429,56 @@ static void TcpDataInfoAssembleSend()
         if (ret == 0)
         {
             memcpy((UINT8 *)&GpsToTcpInfo.gpsInfo.GpsInfoData, (UINT8 *)&GpsRecvData, sizeof(GPSInfo));
-            GpsToTcpInfo.gpsInfo.Tac[0] = tac >> 8;
-            GpsToTcpInfo.gpsInfo.Tac[1] = tac & 0xFF;
-            GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 24;
-            GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 16;
-            GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 8;
-            GpsToTcpInfo.gpsInfo.CellID[0] = cellId;
-            GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType) - 1);
-            if (1)
+        }
+        else
+        {
+            memset((UINT8 *)&GpsToTcpInfo.gpsInfo.GpsInfoData, 0x00, sizeof(GPSInfo));
+        }
+        GpsToTcpInfo.gpsInfo.Tac[0] = tac >> 8;
+        GpsToTcpInfo.gpsInfo.Tac[1] = tac & 0xFF;
+        GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 24;
+        GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 16;
+        GpsToTcpInfo.gpsInfo.CellID[0] = cellId >> 8;
+        GpsToTcpInfo.gpsInfo.CellID[0] = cellId;
+        UINT16 xyzDatacahce[3] = {0};
+        memcpy(xyzDatacahce, xyzData, 3);
+        for (UINT8 i = 0; i < 3; i++)
+        {
+            if (xyzDatacahce[i] > 0x8000) // 数据为负
+            {
+                xyzDatacahce[i] = (UINT16)((UINT16)(~(xyzDatacahce[i])) + 1);
+                xyzDatacahce[i] = 20000U - xyzDatacahce[i];
+            }
+            else
             {
-                len = tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
+                xyzDatacahce[i] = xyzDatacahce[i] + 20000U;
+            }
+        }
+        GpsToTcpInfo.gpsInfo.xData[0] = xyzDatacahce[0] >> 8;
+        GpsToTcpInfo.gpsInfo.xData[1] = xyzDatacahce[0];
+        GpsToTcpInfo.gpsInfo.yData[0] = xyzDatacahce[1] >> 8;
+        GpsToTcpInfo.gpsInfo.yData[1] = xyzDatacahce[1];
+        GpsToTcpInfo.gpsInfo.zData[0] = xyzDatacahce[2] >> 8;
+        GpsToTcpInfo.gpsInfo.zData[1] = xyzDatacahce[2];
+        GpsToTcpInfo.CRC = bcc_chk((UINT8 *)&GpsToTcpInfo, sizeof(GPSMsgtoTcpType) - 1);
+        if (1)
+        {
+            len = tcpipConnectionSend(socContext.id, (UINT8 *)&GpsToTcpInfo, sizeof(GpsToTcpInfo), 0, 0, 0);
 #ifdef USING_PRINTF1
-                for (int i = 0; i < sizeof(GpsToTcpInfo); i++)
-                {
-                    printf("%02x ", *((UINT8 *)&GpsToTcpInfo + i));
-                }
-                printf("-[%d]-Gpslen:%d\n", __LINE__, len);
+            for (int i = 0; i < sizeof(GpsToTcpInfo); i++)
+            {
+                printf("%02x ", *((UINT8 *)&GpsToTcpInfo + i));
+            }
+            printf("-[%d]-Gpslen:%d\n", __LINE__, len);
 #endif
-                if (len > 0)
-                {
-                    TcpSendLen = 0x04 | TcpSendLen;
-                }
-                else
-                {
-                    TcpSendLen = 0xFB & TcpSendLen;
-                    sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
-                }
+            if (len > 0)
+            {
+                TcpSendLen = 0x04 | TcpSendLen;
+            }
+            else
+            {
+                TcpSendLen = 0xFB & TcpSendLen;
+                sendQueueMsg(QMSG_ID_NW_IP_SUSPEND, 0);
             }
         }
     }
@@ -531,7 +555,6 @@ static void TcpDataInfoAssembleSend()
             len = tcpipConnectionSend(socContext.id, (UINT8 *)&VerMsgToTcpInfo, sizeof(VerMsgToTcpInfo), 0, 0, 0);
             if (len > 0)
             {
-                BMSupdatestatus = 0xFF;
                 TcpSendLen = 0x01 | TcpSendLen;
             }
             else

+ 4 - 3
src/AppTaskUart.c

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-21 19:08:59
+ * @LastEditTime : 2021-10-22 14:26:30
  * @Description  : file content
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppTaskUart.c
  */
@@ -182,6 +182,7 @@ static void UartTask(void *arg)
 		}
 		case PROCESS_UART_STATE_UPDATE:
 		{
+			BMSupdatestatus = 0xFF;
 			UartRecvFlag = 0;
 #if BMS_MANUFACTURE == 1
 			BMSupdatestatus = SP_BMS_Update_Service();
@@ -295,11 +296,11 @@ void Uart_Cmd_Control(QueueHandle_t UartWriteCmdHandle, UartBuffer UartAnswerDat
 	//控制充电禁止
 	if (getbit(BcuFltAct, 6) == 0)
 	{
-		if (maxCellVol > 4180 && maxCellVol < 5000)
+		if ((maxCellVol > 4190 && maxCellVol < 5000) && battSOC >= 99)
 		{
 			ChargeForbiddenControl = 1;
 		}
-		else if (maxCellVol < 4130 && maxCellVol > 0)
+		else if (maxCellVol < 4150 && maxCellVol > 0)
 		{
 			ChargeForbiddenControl = 0;
 		}

+ 22 - 24
src/sensor.c

@@ -260,30 +260,30 @@ INT8 SL_SC7A20_INT_Config(void)
     UINT8 SL_Read_Reg;
 
     /*******************AOI1  IN  INT1********************/
-    SL_Read_Reg = 0x08; //AOI1 LATCH
+    SL_Read_Reg = 0x00; //AOI1 LATCH
     GSENSOR_WriteReg(SL_SC7A20_CTRL_REG5, SL_Read_Reg);
 
-    SL_Read_Reg = SL_SC7A20_INT_ACTIVE_HIGH_LEVEL;
+    SL_Read_Reg = SL_SC7A20_INT_ACTIVE_LOWER_LEVEL;
     //interrupt happen,int pin output lower level
     GSENSOR_WriteReg(SL_SC7A20_CTRL_REG6, SL_Read_Reg);
 
     //AOI1 CONFIG
     SL_Read_Reg = 0x00;               //0x7F
-    SL_Read_Reg = SL_Read_Reg | 0x40; //�����˶�ʶ��ģʽ
-    SL_Read_Reg = SL_Read_Reg | 0x03; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
-    SL_Read_Reg = SL_Read_Reg | 0x0C; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
-    SL_Read_Reg = SL_Read_Reg | 0x30; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ
+    SL_Read_Reg = SL_Read_Reg | 0x00; //�����˶�ʶ��ģʽ
+    SL_Read_Reg = SL_Read_Reg | 0x02; //X ��ߵ��¼� X�����ݵľ���ֵ������ֵ
+    SL_Read_Reg = SL_Read_Reg | 0x08; //Y ��ߵ��¼� Y�����ݵľ���ֵ������ֵ
+    SL_Read_Reg = SL_Read_Reg | 0x20; //Z ��ߵ��¼� Z�����ݵľ���ֵ������ֵ
     GSENSOR_WriteReg(SL_SC7A20_INT1_CFG, SL_Read_Reg);
 
     //HPF SET
     //  GSENSOR_ReadReg(SL_SC7A20_CTRL_REG2,1, &SL_Read_Reg);
-    SL_Read_Reg = 0xcf; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
+    SL_Read_Reg = 0x81; //SL_Read_Reg|0x81;//Normal HP , HPF TO AOI1
     GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
 
     //�ж���ֵ����
     GSENSOR_WriteReg(SL_SC7A20_INT1_THS, SL_SC7A20_INT_THS_20PERCENT);
     //������ֵ����ʱ�䴥���ж�
-    GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_30CLK);
+    GSENSOR_WriteReg(SL_SC7A20_INT1_DURATION, SL_SC7A20_INT_DURATION_10CLK);
 
     //AOI1 TO INT1
     // GSENSOR_ReadReg(SL_SC7A20_CTRL_REG3,1, &SL_Read_Reg);
@@ -310,9 +310,9 @@ INT8 SL_SC7A20_INT_Config(void)
     //    GSENSOR_WriteReg(SL_SC7A20_CTRL_REG2, SL_Read_Reg);
 
     //�ж���ֵ����
-    GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_5PERCENT);
+    GSENSOR_WriteReg(SL_SC7A20_INT2_THS, SL_SC7A20_INT_THS_20PERCENT);
     //������ֵ����ʱ�䴥���ж�
-    GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_2CLK);
+    GSENSOR_WriteReg(SL_SC7A20_INT2_DURATION, SL_SC7A20_INT_DURATION_10CLK);
 
     //AOI2 TO INT2
     GSENSOR_ReadReg(SL_SC7A20_CTRL_REG6, 1, &SL_Read_Reg);
@@ -489,9 +489,8 @@ void SL_SC7A20_Reg_read_all(void)
     for (adr = 0x20; adr <= 0x3F; adr++)
     {
         GSENSOR_ReadReg(adr, 1, &SL_Read_Reg);
-        printf("%#x = %#x\r\n", adr, SL_Read_Reg);
+        printf("%#x = %#x, ", adr, SL_Read_Reg);
     }
-
     printf("SL_SC7A20_Reg_readall --------\r\n");
 }
 
@@ -548,23 +547,22 @@ INT8 SL_SC7A20_Read_XYZ_Data(INT8 *SL_SC7A20_Data_XYZ_Buf)
 INT8 SL_SC7A20_Read_XYZ_Data(INT16 *SL_SC7A20_Data_XYZ_Buf)
 {
     UINT8 SL_Read_Buf[7];
-
     GSENSOR_ReadReg(SL_SC7A20_STATUS_REG, 1, &SL_Read_Buf[0]);
-#ifdef USING_PRINTF
-    printf("SL_SC7A20_STATUS_REG = %#x\r\n", SL_Read_Buf[0]);
-#endif
     if ((SL_Read_Buf[0] & 0x0f) == 0x0f)
     {
-        GSENSOR_ReadReg(SL_SC7A20_DATA_OUT, 6, &SL_Read_Buf[1]);
-#ifdef USING_PRINTF
-        printf("SL_SC7A20_DATA_OUT22 = %#x\r\n", SL_Read_Buf[1]);
-#endif
+        for (UINT8 i = 1; i < 7; i++)
+        {
+            GSENSOR_ReadReg(SL_SC7A20_STATUS_REG + i, 1, &SL_Read_Buf[i]);
+        }
         SL_SC7A20_Data_XYZ_Buf[0] = (INT16)((SL_Read_Buf[2] << 8) + SL_Read_Buf[1]);
         SL_SC7A20_Data_XYZ_Buf[1] = (INT16)((SL_Read_Buf[4] << 8) + SL_Read_Buf[3]);
         SL_SC7A20_Data_XYZ_Buf[2] = (INT16)((SL_Read_Buf[6] << 8) + SL_Read_Buf[5]);
-#ifdef USING_PRINTF
-        printf("SL_SC7A20_DATA_OUT BUF:X = %d,Y = %d,Z = %d\r\n", SL_SC7A20_Data_XYZ_Buf[0], SL_SC7A20_Data_XYZ_Buf[1], SL_SC7A20_Data_XYZ_Buf[2]);
-#endif
+        SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] >> 4;
+        SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] >> 4;
+        SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] >> 4;
+        SL_SC7A20_Data_XYZ_Buf[0] = SL_SC7A20_Data_XYZ_Buf[0] * 2;
+        SL_SC7A20_Data_XYZ_Buf[1] = SL_SC7A20_Data_XYZ_Buf[1] * 2;
+        SL_SC7A20_Data_XYZ_Buf[2] = SL_SC7A20_Data_XYZ_Buf[2] * 2;
         return 1;
     }
     else
@@ -584,7 +582,7 @@ void GsensorInit(void)
         SL_SC7A20_FS_Config(SL_SC7A20_FS_4G);
         SL_SC7A20_INT_Config();
         //SL_SC7A20_INT_RESET();
-        SL_SC7A20_Power_Config(SL_SC7A20_LOWER_POWER_ODR_400HZ);
+        SL_SC7A20_Power_Config(SL_SC7A20_ODR_400HZ);
     }
 }
 #endif