소스 검색

1,按照小牙盘原协议增加历史信息返回;
2,增加MCU ID读取。

dd 3 달 전
부모
커밋
ddddb8c820

+ 4 - 4
1.FrameLayer/Source/app.c

@@ -130,10 +130,10 @@ void AppLoop()
             DISABLE_IRQ; /* MCU Core and GPIO configuration */
             cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
             cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
-            cp_stHistoryPara.ulRealODOTime+= (cp_stBikeRunInfoPara.ulRealODOTime >>10);
-            cp_stBikeRunInfoPara.ulRiTime=0;
-            cp_stBikeRunInfoPara.ulRiTirpTime=0;
-            cp_stBikeRunInfoPara.ulRealODOTime =0;
+            cp_stHistoryPara.ulRealODOTime += (cp_stBikeRunInfoPara.ulRealODOTime >> 10);
+            cp_stBikeRunInfoPara.ulRiTime = 0;
+            cp_stBikeRunInfoPara.ulRiTirpTime = 0;
+            cp_stBikeRunInfoPara.ulRealODOTime = 0;
             mn_voEEHistoryParaUpdate();
             /* Error Log Write */
             flash_voErrorWrite(); //故障日志+历史信息

+ 44 - 6
3.BasicFunction/Include/canAppl.h

@@ -75,10 +75,8 @@ typedef struct
     UBYTE                 GearSt;         ///>助力档位,地址偏移13
     MC_LightSwitch_Struct_t LightSwitch;    ///>灯开关 0xF0-关,0xF1-开,地址偏移14
     UBYTE                 SOC;            ///>剩余电量 1%,地址偏移15
-    UWORD                RemainDistance; ///>续航里程 1km,地址偏移16
-                                            //	UBYTE RS1[2];
-    UWORD TorqueReg;                        ///>力矩传感器AD值,地址偏移18
-   // UWORD ODO_Km;                        ///>总里程 1km,地址偏移18
+    UWORD                RemainDistance; ///>续航里程 1km,地址偏移16                                            
+    UWORD TorqueReg;                        ///>力矩传感器AD值,地址偏移18   
     UBYTE  PowerPerKm;                    ///>平均功耗 0.01Ah/km ,地址偏移20
     UBYTE  T_PCB;                         ///>PCB温度 +40℃,地址偏移21
     UBYTE  T_Coil;                        ///>绕组温度 +40℃,地址偏移22
@@ -88,8 +86,7 @@ typedef struct
     UBYTE TorqueSensorData1;              ///>力矩传感器 1 原始值27
     UBYTE TorqueSensorData2;              ///>力矩传感器 2 原始值28
     UBYTE TorqueSensorData3;              ///>力矩传感器 3 原始值29
-    UBYTE  RS2;                        ///>预留 1bytes
-
+    UBYTE  RS2;                           ///>预留 1bytes
 } MC_RunInfo_Struct_t;
 
 /**
@@ -409,6 +406,47 @@ typedef struct
     UBYTE  RS[2];
 }MC_MotorParam_Struct_t;
 
+//MC运行历史,占用空间48bytes
+typedef struct
+{
+    uint32_t PowerOnCnt;             //开机次数,地址偏移0
+	uint32_t RunTime;                //运行总时间 min,地址偏移4
+	uint16_t OC_ProtectCnt;          //过流保次数 ,地址偏移8
+	uint16_t UV_ProtectCnt;          //低压保护次数,地址偏移10
+	uint16_t OV_ProtectCnt;          //高压保护次数,地址偏移12
+	uint16_t LockRotor_ProtectCnt;   //堵转保护次数 ,地址偏移14
+	uint16_t OT_ProtectCnt;          //温度保护次数,地址偏移16
+	uint16_t SPS_FaultCnt;           //速度传感器错误次数,地址偏移18
+	uint16_t TQS_FaultCnt;           //力矩传感器错误次数 ,地址偏移20
+	uint16_t Hall_FaultCnt;          //霍尔传感器错误次数 ,地址偏移22
+	uint16_t PhaseLine_FaultCnt;     //马达相线错误次数,地址偏移24
+	uint16_t NTC_FaultCnt;           //NTC错误次数,地址偏移26
+	uint16_t BMS_Check_FaultCnt;     //BMS校验错误次数,地址偏移28
+	uint16_t HMI_Check_FaultCnt;     //HMI校验错误次数,地址偏移30
+	uint16_t PBU_Check_FaultCnt;     //PBU校验错误次数 ,地址偏移32
+	uint8_t T_PCB_Max;               //PCB历史最高温,地址偏移34
+	uint8_t T_PCB_Min;               //PCB历史最低温,地址偏移35
+	uint32_t ODO_Km;                 //出厂后ODO里程,地址偏移36
+	uint8_t T_Coil_Max;              //绕组历史最高温,地址偏移40
+	uint8_t T_Coil_Min;	             //绕组历史最低温,地址偏移41
+	uint8_t T_MCU_Max;               //MCU历史最高温,地址偏移42
+	uint8_t T_MCU_Min;               //MCU历史最低温,地址偏移43
+	uint32_t ODO_Time;               //出厂后ODO时间,地址偏移44
+}MC_RunLog1_Struct_t;
+
+//MC运行历史,占用空间24bytes
+typedef struct
+{
+    uint16_t MCU_FaultCnt;
+	uint16_t CadenceSensor_FaultCnt;
+	uint16_t GasSensor_FaultCnt;
+	uint16_t MOS_ShortCircuit_FaultCnt;
+	uint16_t VoltageChangeOrOverSpeed_FaultCnt;
+	uint16_t Circuit_FaultCnt;
+	uint16_t TE_MCU_FaultCnt;
+	uint16_t TE_Circuit_FaultCnt;
+}MC_RunLog2_Struct_t;
+
 /***************************************
  *
  *   Host computer Type  Definations

+ 7 - 1
3.BasicFunction/Source/canAppl.c

@@ -269,7 +269,13 @@ void  Can_voInitMC_Run(void)
    // flash_voErrorRead();
 
     // MC版本信息初始化,Mode和SN从EEPROM读取
-    strncpy(MC_VerInfo.HW_Version, (char *)"SC20100101V1    ", 16); //长度不超过16
+    strncpy(MC_VerInfo.HW_Version, (char *)"VTA010155A0001  ", 16); //长度不超过16
+    UBYTE MCU_ID[4] = {0, }, MCU_ID_Cal[2] = {0, };
+    memcpy((UBYTE*)MCU_ID, (UBYTE*)(0x41C40000), 4);
+    MCU_ID_Cal[0] = MCU_ID[0] ^ MCU_ID[1];
+    MCU_ID_Cal[1] = MCU_ID[2] ^ MCU_ID[3];
+    MC_VerInfo.HW_Version[14] = MCU_ID_Cal[0];
+    MC_VerInfo.HW_Version[15] = MCU_ID_Cal[1];
 
     // Software version
     char chFwVersion[16]="V1r0r0_";

+ 55 - 49
3.BasicFunction/Source/usart.c

@@ -595,7 +595,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         case 0x1A00: //按小牙盘原协议返回控制参数1
         {
             MC_ConfigParam1_Struct_t MC_ConfigParam1;
-            MC_ConfigParam1.GasCtrlMode_Param = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH;
+            MC_ConfigParam1.GasCtrlMode_Param = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH / 10;
             MC_ConfigParam1.StarModel = MC_UpcInfo.stBikeInfo.uwStartMode;
             MC_ConfigParam1.StopTime = 100;
             MC_ConfigParam1.SpeedLimit = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart / 10;
@@ -605,7 +605,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_ConfigParam1.CurrentLimit = MC_UpcInfo.stTestParaInfo.uwPwrLimit / MC_UpcInfo.stMotorInfo.uwRVolV;
             MC_ConfigParam1.TempTH_Alarm = MC_UpcInfo.stMContorlInfo.uwPwrLimitStartCe + 40;
             MC_ConfigParam1.TempTH_Protect = MC_UpcInfo.stMContorlInfo.uwAlamOverHeatCe + 40;
-            MC_ConfigParam1.NoPBU_Flag = (MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable == 0xAA) ? 0xAA : 0x55;;
+            MC_ConfigParam1.NoPBU_Flag = (MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable == 0xAA) ? 0xAA : 0x55;
             MC_ConfigParam1.WheelSize = MC_UpcInfo.stBikeInfo.uwWheelPerimeter;
             MC_ConfigParam1.SerialNum = MC_UpcInfo.stTestParaInfo.RunModelSelect;
             MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN = 100;
@@ -631,7 +631,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
 
         case 0x1B20: //按小牙盘原协议写入部分控制参数
         {
-            MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH = Data[0];
+            MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH = Data[0] * 10;
             MC_UpcInfo.stBikeInfo.uwStartMode = Data[1];
             MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart = Data[4] * 10;
             MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStop = Data[4] * 10 + 20;
@@ -640,9 +640,9 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_UpcInfo.stTestParaInfo.uwPwrLimit = MC_UpcInfo.stMotorInfo.uwRVolV * Data[8];
             MC_UpcInfo.stBikeInfo.uwWheelPerimeter = Data[12];
             MC_UpcInfo.stTestParaInfo.RunModelSelect = Data[13];
-            MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm = Data[24];
             MC_UpcInfo.stMContorlInfo.uwAlamUVolV = (UWORD)Data[28] + (Data[29] << 8);
             MC_UpcInfo.stBikeInfo.uwCartSpdKmH = Data[30];
+            MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm = Data[24];
 
             MC_UpcInfo.stBikeInfo.uwSaveFlg = TRUE;
             MC_UpcInfo.stAssistInfo.uwSaveFlg = TRUE;
@@ -704,6 +704,44 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         case 0x1E00: //查询历史信息
         {
             SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB74C, (UBYTE *)&MC_UpcInfo.stHistoryInfo.uwOpenTimes);
+
+            //按小牙盘原协议返回历史信息
+            MC_RunLog1_Struct_t MC_RunLog1;
+            MC_RunLog1.PowerOnCnt = MC_UpcInfo.stHistoryInfo.uwOpenTimes;
+            MC_RunLog1.RunTime = (ULONG)(MC_UpcInfo.stHistoryInfo.uwUsedTimeH << 16) + MC_UpcInfo.stHistoryInfo.uwUsedTimeL;
+            MC_RunLog1.OC_ProtectCnt = MC_UpcInfo.stHistoryInfo.uwAlamSOcurTimes;
+            MC_RunLog1.UV_ProtectCnt = MC_UpcInfo.stHistoryInfo.uwAlamUVolTimes;
+            MC_RunLog1.OV_ProtectCnt = MC_UpcInfo.stHistoryInfo.uwAlamOVolTimes;
+            MC_RunLog1.LockRotor_ProtectCnt = MC_UpcInfo.stHistoryInfo.uwAlamRotorLockTimes;
+            MC_RunLog1.OT_ProtectCnt = MC_UpcInfo.stHistoryInfo.uwAlamOHeatTimes;
+            MC_RunLog1.SPS_FaultCnt = MC_UpcInfo.stHistoryInfo.uwBikeSpdSensorAlamTimes;
+            MC_RunLog1.TQS_FaultCnt = MC_UpcInfo.stHistoryInfo.uwTorSensorAlamTimes;
+            MC_RunLog1.Hall_FaultCnt = MC_UpcInfo.stHistoryInfo.uwPosSensorAlamTimes;
+            MC_RunLog1.PhaseLine_FaultCnt = MC_UpcInfo.stHistoryInfo.uwAlamPhsLossTimes;
+            MC_RunLog1.NTC_FaultCnt = 0;
+            MC_RunLog1.BMS_Check_FaultCnt = 0;
+            MC_RunLog1.HMI_Check_FaultCnt = 0;
+            MC_RunLog1.PBU_Check_FaultCnt = 0;
+            MC_RunLog1.T_PCB_Max = 0;
+            MC_RunLog1.T_PCB_Min = 0;
+            MC_RunLog1.ODO_Km = (ULONG)(MC_UpcInfo.stHistoryInfo.uwRealODOTripH << 16) + MC_UpcInfo.stHistoryInfo.uwRealODOTripL;
+            MC_RunLog1.T_Coil_Max = MC_UpcInfo.stHistoryInfo.swNTCTempMaxCe + 40;
+            MC_RunLog1.T_Coil_Min = MC_UpcInfo.stHistoryInfo.swNTCTempMinCe + 40;
+            MC_RunLog1.T_MCU_Max = 0;
+            MC_RunLog1.T_MCU_Min = 0;
+            MC_RunLog1.ODO_Time = (ULONG)(MC_UpcInfo.stHistoryInfo.uwRealODOTimeH << 16) + MC_UpcInfo.stHistoryInfo.uwRealODOTimeL;
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA230, (UBYTE*)&MC_RunLog1.PowerOnCnt);
+
+            MC_RunLog2_Struct_t MC_RunLog2;
+            MC_RunLog2.MCU_FaultCnt = 0;
+            MC_RunLog2.CadenceSensor_FaultCnt = MC_UpcInfo.stHistoryInfo.uwCadSensorAlamTimes;
+            MC_RunLog2.GasSensor_FaultCnt = 0;
+            MC_RunLog2.MOS_ShortCircuit_FaultCnt = MC_UpcInfo.stHistoryInfo.uwAlamHOcurTimes;
+            MC_RunLog2.VoltageChangeOrOverSpeed_FaultCnt = 0;
+            MC_RunLog2.Circuit_FaultCnt = 0;
+            MC_RunLog2.TE_MCU_FaultCnt = 0;
+            MC_RunLog2.TE_Circuit_FaultCnt = 0;
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xAC10, (UBYTE*)&MC_RunLog2.MCU_FaultCnt);
             break;
         }
 
@@ -765,7 +803,6 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             {
                 //执行复位,跳转进入Bootloader
                 SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
-//                __set_FAULTMASK(1);//关闭所有中断
                 DL_WWDT_disablePower(WWDT0_INST);
                 NVIC_SystemReset();
             }
@@ -776,35 +813,16 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             if (strncmp("CLEAR", (char *)Data, DataLength) == 0)
             {
                 DISABLE_IRQ;
-                
-                //flash_voParaInit();
                 flash_voErrorClear();//历史信息
                 que_voInit(&que_stFlashErrorLog);
-                flash_voSysParaInit();
                 CodeHistoryParaDelete();
                 mn_voEEHistoryParaUpdate();
                 flash_voSysParaInit();
-                flash_voSysParaWrite();//
-                flash_HistoryWrite(); //
+                flash_voSysParaWrite();
+                flash_HistoryWrite();
                 ENABLE_IRQ;
-               /* DISABLE_IRQ;
-
-                i2c_voDefaultWriteBuffer();
-                i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-
-                CodeHistoryParaDelete();
-                mn_voEEHistoryParaUpdate();
-                i2c_voHistoryWriteBuffer();
-                i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-
-                ENABLE_IRQ;*/
-
-              //  if (I2C_EEFltFlg != TRUE)
-                {
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
-                }
                 
-                //GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);
+                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             }
             break;
         }
@@ -813,25 +831,13 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             if (strncmp("RECOVERY", (char *)Data, DataLength) == 0)
             {
                 DISABLE_IRQ;
-                
-                //flash_voParaInit();
-              //  flash_voWrite();
-                flash_voSysParaInit();
                 flash_voSysParaInit();
-                flash_voSysParaWrite();//tbd
-                
+                flash_voSysParaWrite();
                 ENABLE_IRQ;
-                /*DISABLE_IRQ;
-                i2c_voDefaultWriteBuffer();
-                i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-                cp_stFlg.ParaSaveEEFlg = FALSE;
-                ENABLE_IRQ;*/
+                
                 cp_stFlg.ParaSaveEEFlg = FALSE;
-               // if (I2C_EEFltFlg != TRUE)
-                {
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
-                }
-               //GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);
+                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
+
             }
             break;
         }
@@ -898,12 +904,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         {
             do
             {
-                uint32_t DataLength, AddressBegin, AddressEnd;
-                AddressBegin = (uint32_t)((Data[0] << 24) + (Data[1] << 16) + (Data[2] << 8) + (Data[3]));
-                AddressEnd = (uint32_t)((Data[4] << 24) + (Data[5] << 16) + (Data[6] << 8) + (Data[7]));
+                ULONG DataLength, AddressBegin, AddressEnd;
+                AddressBegin = (ULONG)((Data[0] << 24) + (Data[1] << 16) + (Data[2] << 8) + (Data[3]));
+                AddressEnd = (ULONG)((Data[4] << 24) + (Data[5] << 16) + (Data[6] << 8) + (Data[7]));
 
-                if(((AddressBegin <= AddressEnd) &&(AddressBegin>0) &&(AddressEnd<=(uint32_t)(0x0001FFFF)))
-                    ||((AddressBegin <= AddressEnd) &&(AddressBegin>=(uint32_t)(0x20200000)) &&(AddressEnd<(uint32_t)(0x20208000))) )
+                if(((AddressBegin <= AddressEnd) && (AddressBegin>0) && (AddressEnd<=(ULONG)(0x0001FFFF)))
+                    ||((AddressBegin <= AddressEnd) && (AddressBegin >= (ULONG)(0x20200000)) && (AddressEnd < (ULONG)(0x20208000))) )
                 {
                     DataLength = AddressEnd - AddressBegin+ 1;
                 
@@ -926,7 +932,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_ConfigParam2_Struct_t MC_ConfigParam2;
             MC_ConfigParam2.ZeroAngle_Pitch = 0;
             MC_ConfigParam2.ZeroAngle_Roll = 0;
-            MC_ConfigParam2.UseAttitudeAngle_Flag = 0xAA;
+            MC_ConfigParam2.UseAttitudeAngle_Flag = 0x55;
             MC_ConfigParam2.MC_Light_Mode = MC_UpcInfo.stBikeInfo.uwLightConfig >> 12;
             MC_ConfigParam2.HeadLightVol = MC_UpcInfo.stBikeInfo.uwLightConfig;
             MC_ConfigParam2.TailLightVol = (MC_UpcInfo.stBikeInfo.uwLightConfig >> 8) & 0x0F;

+ 4 - 0
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Source/CodePara.c

@@ -261,6 +261,7 @@ void CodeParaInit(void)
     cp_stBikeRunInfoPara.uwCruisDis = 0;
 #if(EMCDEAL_EN==0)
     cp_stBikeRunInfoPara.uwLightSwitch = 0;
+    MC_ControlCode.LightSwitch = MC_LightSwitch_OFF;
 #else
     cp_stBikeRunInfoPara.uwLightSwitch = 1;
     MC_ControlCode.LightSwitch = MC_LightSwitch_ON;
@@ -302,6 +303,9 @@ void CodeHistoryParaDelete(void)
     cp_stHistoryPara.ulODOTrip = 0;
     cp_stHistoryPara.ulODOTime = 0;
 
+    cp_stHistoryPara.ulRealODOTrip = 0;
+    cp_stHistoryPara.ulRealODOTime = 0;
+
     cp_stHistoryPara.ulTripSum = 0;
     cp_stHistoryPara.ulTripSumTime = 0;