diff --git a/ECU_APP/diagnose/DTC/DCM_DTC.c b/ECU_APP/diagnose/DTC/DCM_DTC.c index bf9612f..26cd855 100644 --- a/ECU_APP/diagnose/DTC/DCM_DTC.c +++ b/ECU_APP/diagnose/DTC/DCM_DTC.c @@ -1,8 +1,8 @@ /************************************************************ - | 文件名: DCM_DTC.c - | 描述:DTC相关服务函数 + | 鏂囦欢鍚: DCM_DTC.c + | 鎻忚堪锛欴TC鐩稿叧鏈嶅姟鍑芥暟 | - | 版权声明 + | 鐗堟潈澹版槑 ***********************************************************/ //DCM_DTC.c #include "Dcm_App_Cfg.h" @@ -13,6 +13,27 @@ //#include "r_fdl_types.h" #include "Dcm_extern.h" +const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={ + { 0,0xA8,0x80,0x16}, + { 1,0xA8,0x80,0x17}, + { 2,0xA8,0x80,0x88}, + { 3,0xA8,0x81,0x23}, + { 4,0xA8,0x82,0x23}, + { 5,0xA8,0x83,0x23}, + { 6,0xA8,0x84,0x23}, + { 7,0xA8,0x85,0x23}, + { 8,0xA8,0x86,0x25}, + { 9,0xC1,0x00,0x8}}, + {10,0xD1,0x10,0x87}, + {11,0xD2,0x06,0x82}, + {12,0xD4,0x06,0x83}, + {13,0xD2,0x0B,0x82}, + {14,0xD4,0x0B,0x83}, + {15,0xD2,0x14,0x82}, + {16,0xD4,0x14,0x83} +}; + +/* const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={ { 0,0xF0,0x06,0x16}, { 1,0xF0,0x06,0x17}, @@ -29,10 +50,10 @@ const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={ {12,0x91,0x86,0x14}, {13,0xC0,0x73,0x00}, }; - -DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; // DTC 状态数组 -static uint16 tDiagStart; //上电复位后网络诊断延迟时间 -uint16 tDiagStartVolt; // 电源电压异常恢复后诊断延迟时间 +*/ +DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; // DTC 鐘舵佹暟缁 +static uint16 tDiagStart; //涓婄數澶嶄綅鍚庣綉缁滆瘖鏂欢杩熸椂闂 +uint16 tDiagStartVolt; // 鐢垫簮鐢靛帇寮傚父鎭㈠鍚庤瘖鏂欢杩熸椂闂 /********************************************************/ @@ -501,10 +522,10 @@ static void MotorLockChk(void) static void CanDTC_CycChk(void) { PowerVoltageChk(); - TempMotorFeedbackChk(); - ModeMotorFeedbackChk(); - RecMotorFeedbackChk(); - EvaSensorChk(); + //TempMotorFeedbackChk(); + //ModeMotorFeedbackChk(); + //RecMotorFeedbackChk(); + //EvaSensorChk(); } extern uint8 GetNormalMsgSts(void); @@ -522,7 +543,7 @@ void CanDTC_Task(void) //CanDTC_CompErrChk(); //CanDTC_MotorRunTimeChk(); - MotorLockChk(); + //MotorLockChk(); if(DtcTestCycleTim < DTC_TEST_CYCLE_TIM) { @@ -594,14 +615,14 @@ uint8 MngDcm_ReportNumberOfDTCByStatusMask(void) LaDcm_u_TempBuffer[3] = ISO_14229_1_DTC_FORMAT; LaDcm_u_TempBuffer[4] = 0; LaDcm_u_TempBuffer[5] = DtcCnt; - SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ + SetCanTp_TxBuffer(6U,LaDcm_u_TempBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultPosRsp; } else { - /*设置NRC31*/ - MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ - SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ + /*璁剧疆NRC31*/ + MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*鏁寸悊璐熷搷搴旀暟鎹*/ + SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultNegRsp; } return LeDcm_u_Result; @@ -630,17 +651,17 @@ uint8 MngDcm_ReportDTCByStatusMask(void) LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcHigh; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcMiddle; LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow; - LaDcm_u_TempBuffer[DtcReporLength++] = GetDtcStutas(DtcIndex); + LaDcm_u_TempBuffer[DtcReporLength++] = GetDtcStutas(DtcIndex) & DTC_STATUS_AVAILABILITY_MASK; } } - SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ + SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultPosRsp; } else { - /*设置NRC31*/ - MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ - SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ + /*璁剧疆NRC31*/ + MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*鏁寸悊璐熷搷搴旀暟鎹*/ + SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultNegRsp; } return LeDcm_u_Result; @@ -670,14 +691,14 @@ uint8 MngDcm_ReportDTCSnapshotRecordByDTCNumber(void) DtcReporLength = 6; if(GetDtcSnapshotRecord(DtcIndex,LaDcm_u_TempBuffer+6,&DtcReporLength,DtcSnapshotRecordNum) != DCM_NORESULT) { - SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ + SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultPosRsp; } else { - /*设置NRC31*/ - MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ - SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ + /*璁剧疆NRC31*/ + MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*鏁寸悊璐熷搷搴旀暟鎹*/ + SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultNegRsp; } break; @@ -685,9 +706,9 @@ uint8 MngDcm_ReportDTCSnapshotRecordByDTCNumber(void) } if((DtcIndex == DCM_SUPDTC_COUNT) && (DtcReporLength == 0)) { - /*设置NRC31*/ - MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*整理负响应数据*/ - SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*调用接口发送响应数据*/ + /*璁剧疆NRC31*/ + MngDcm_PrepareNegRsp(VeDcm_h_RqustInfo.Sid,CaDcm_u_NRCData[DCM_NRC31]); /*鏁寸悊璐熷搷搴旀暟鎹*/ + SetCanTp_TxBuffer(3U,VaDcm_u_NegRspTxBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultNegRsp; } @@ -731,7 +752,7 @@ uint8 MngDcm_ReportDTCExtendedDataRecordByDTCNumber(void) LaDcm_u_TempBuffer[23] = 0xFF; LaDcm_u_TempBuffer[24] = 0xFF; LaDcm_u_TempBuffer[25] = 0xFF; - SetCanTp_TxBuffer(25,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ + SetCanTp_TxBuffer(25,LaDcm_u_TempBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultPosRsp; break; } @@ -760,7 +781,7 @@ uint8 MngDcm_ReportSupportedDTC(void) LaDcm_u_TempBuffer[DtcReporLength++] = CaDcm_u_DtcTable[DtcIndex].DtcLow; LaDcm_u_TempBuffer[DtcReporLength++] = DTC_STATUS_AVAILABILITY_MASK; } - SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*调用接口发送响应数据*/ + SetCanTp_TxBuffer(DtcReporLength,LaDcm_u_TempBuffer); /*璋冪敤鎺ュ彛鍙戦佸搷搴旀暟鎹*/ LeDcm_u_Result = CeDcm_e_ResultPosRsp; return LeDcm_u_Result; } diff --git a/ECU_APP/diagnose/DTC/DCM_DTC.h b/ECU_APP/diagnose/DTC/DCM_DTC.h index eaedc17..f0a320a 100644 --- a/ECU_APP/diagnose/DTC/DCM_DTC.h +++ b/ECU_APP/diagnose/DTC/DCM_DTC.h @@ -7,12 +7,12 @@ #define DCM_19SUPDTCEXTDATARECORD_COUNT (4U) -/* 19 06支持的DTCExtDataRecord 参数个数 */ -#define DCM_SUPDTC_COUNT ( 14U ) -/* 产品支持的DTC个数 */ +/* 19 06支锟街碉拷DTCExtDataRecord 锟斤拷锟斤拷锟斤拷锟斤拷 */ +#define DCM_SUPDTC_COUNT ( 17U ) +/* 锟斤拷品支锟街碉拷DTC锟斤拷锟斤拷 */ -#define DTC_TEST_CYCLE_TIM 40U // 40mS一个周期 +#define DTC_TEST_CYCLE_TIM 40U // 40mS一锟斤拷锟斤拷锟斤拷 #define ISO_15031_6_DTC_FORMAT 0U #define ISO_14229_1_DTC_FORMAT 1U @@ -21,19 +21,19 @@ #define DTC_STATUS_AVAILABILITY_MASK 0x09U typedef uint8 (*ReportDTCExtDataFun)(uint8* LeDemDtcNum,uint8 LeDemParameter,uint8* LeDemDataRecord); -/*19 06 服务支持的 DTCExtDataRecordNumber 列表结构体*/ +/*19 06 锟斤拷锟斤拷支锟街碉拷 DTCExtDataRecordNumber 锟叫憋拷锟结构锟斤拷*/ typedef struct { - uint8 DTCExtDataRecordNumber; /*扩展数据number*/ - ReportDTCExtDataFun Function; /*扩展数据number 对应函数的处理函数*/ + uint8 DTCExtDataRecordNumber; /*锟斤拷展锟斤拷锟斤拷number*/ + ReportDTCExtDataFun Function; /*锟斤拷展锟斤拷锟斤拷number 锟斤拷应锟斤拷锟斤拷锟侥达拷锟斤拷锟斤拷锟斤拷*/ }DTCExtDataRecordType; typedef struct { uint8 DtcIndex; - uint8 DtcHigh; /*DTC 高字节*/ - uint8 DtcMiddle; /*DTC 中间字节*/ - uint8 DtcLow; /*DTC 低字节*/ + uint8 DtcHigh; /*DTC 锟斤拷锟街斤拷*/ + uint8 DtcMiddle; /*DTC 锟叫硷拷锟街斤拷*/ + uint8 DtcLow; /*DTC 锟斤拷锟街斤拷*/ }TsDcm_h_DtcGroupType; typedef enum @@ -93,6 +93,8 @@ extern DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; #define AC_LOW_VOLTAGE 0 #define AC_OVER_VOLTAGE 1 +#define AC_BusOff 3 + #define AC_TEMP_MOTOR_SHORT_CUT_TO_VCC 2 #define AC_TEMP_MOTOR_SHORT_CUT_TO_GND 3 #define AC_TEMP_MOTOR_LOCK 4 @@ -104,7 +106,7 @@ extern DtcStutas_T DtcStutas[DCM_SUPDTC_COUNT]; #define AC_REC_MOTOR_LOCK 10 #define AC_EVA_SENSOR_SHORT_CUT_TO_VCC 11 #define AC_EVA_SENSOR_SHORT_CUT_TO_GND 12 -#define AC_BusOff 13 + extern uint8_t BusOffCnt ; diff --git a/ECU_APP/diagnose/extern.c b/ECU_APP/diagnose/extern.c index 4297af2..d107feb 100644 --- a/ECU_APP/diagnose/extern.c +++ b/ECU_APP/diagnose/extern.c @@ -503,12 +503,13 @@ void GetManufacturingDate(unsigned char* date) //鑾峰彇can鎬荤嚎鍑洪敊鐘讹拷? //杩斿洖锟?? /******************************/ +extern unsigned char ucBusOffModeState; unsigned char GetCanBusOffErr(void) { -// if(BusOff_flag==0) -// return 0; -// else -// return 1; + if(ucBusOffModeState>=8) + return 1; + else + return 0; } /******************************/ //鑾峰彇BCM鑺傜偣涓㈠け鐘讹拷? diff --git a/ECU_APP/rscan_driver/r_rl78_can_irq.c b/ECU_APP/rscan_driver/r_rl78_can_irq.c index 1ccadaa..48c162c 100644 --- a/ECU_APP/rscan_driver/r_rl78_can_irq.c +++ b/ECU_APP/rscan_driver/r_rl78_can_irq.c @@ -78,7 +78,7 @@ void __near RSCAN_INTCANGRECC_interrupt(void) R_CAN_ReadRxFIFO(CAN_RXFIFO1, &RxCanMessage); if ((RxCanMessage.IDL == CANTP_ADDR_PHY_REQ) || (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ)) { - if (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ && RxCanMessage.DB[1] == 0x3E && RxCanMessage.DB[2] == 0x80) + if (RxCanMessage.IDL == CANTP_ADDR_FUNC_REQ && RxCanMessage.DB[1] == 0x3E && RxCanMessage.DB[2] == 0x80 && RxCanMessage.DB[0] == 0x02) resetS3Server(); /*閲嶇疆S3server璁℃椂*/ else RxIndicationCanIf_Messages(0, RxCanMessage.IDL, RxCanMessage.DLC, RxCanMessage.DB); diff --git a/ECU_APP/user/appTask.c b/ECU_APP/user/appTask.c index cb64148..d4fbdb3 100644 --- a/ECU_APP/user/appTask.c +++ b/ECU_APP/user/appTask.c @@ -561,6 +561,11 @@ void BusOff_Detect(void) } else { + if (ucBusOffModeState < 8) + { + ucBusOffModeState++; + } + uiBusOffCnt = SLOW_BUSOFF_THRESHOULD; //soft recover } BusOff_Recovery();