Commit 1cb64f87 authored by 张金硕's avatar 张金硕

Merge branch 'LYK' into 'dev'

诊断增加DID,可读可写,修改22/2E/27服务,11服务复位前增加延时,QAC问题修改

See merge request !83
parents c99dcdd1 345a423c
......@@ -68,6 +68,7 @@ static void Power_KL30_Init(void)
g_stRTCInformation.u8RTCYear = 20;
RTE_RTC_Init(g_stRTCInformation);
Menu_User_Init();
UDS_Startup_Init();
Can_Init();
Protocol_KL30_Wakeup_Init();
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 500);
......
......@@ -2,7 +2,7 @@
#define __FLASH_H__
#include <stdint.h>
#include "common.h"
#define SECTOR_SIZE 512
#define SECTOR_SIZE 1024
#define WORD_SIZE 4
//#define FLASH_PROTCET
#define PROTECT_VALUE ((uint32_t)0x1234ABCD)
......
......@@ -61,40 +61,46 @@ int EraseChip (uint32_t adr)
* @param adr - sector address of user code flash
* @return status: 0 - OK, 1 - Failed
***********************************************************************************************************************/
int EraseSector (uint32_t adr)
int EraseSector(uint32_t adr)
{
#ifdef FLASH_PROTCET
if(flash_protect_flag != PROTECT_VALUE)
{
return(1);
}
flash_protect_flag = 0;
if (flash_protect_flag != PROTECT_VALUE)
{
return (1);
}
flash_protect_flag = 0;
#endif
__DI;
__DI;
FMC->FLERMD = 0x10;
FMC->FLPROT = 0xF1;
FMC->FLOPMD1 = 0x55;
FMC->FLOPMD2 = 0xAA;
FMC->FLOPMD2 = 0xAA;
// Write data to start address of sector to trigger Erase Operation
*(uint32_t *) adr = 0xFFFFFFFF;
*(uint32_t *)adr = 0xFFFFFFFF;
// polling Erase Over Flag
while((FMC->FLSTS & FMC_FLSTS_OVF_Msk) == 0);
while ((FMC->FLSTS & FMC_FLSTS_OVF_Msk) == 0)
{
;
}
FMC->FLSTS = FMC_FLSTS_OVF_Msk;
FMC->FLERMD = 0x00;
FMC->FLPROT = 0xF0;
if(FMC->FLSTS & FMC_FLSTS_EVF_Msk)
/* if(FMC->FLSTS & FMC_FLSTS_EVF_Msk)
{
FMC->FLSTS = FMC_FLSTS_EVF_Msk;
__EI;
return(1); /* verify ng */
return(1);
}
else
{
__EI;
return(0); /* verify ok */
}
return(0);
} */
__EI;
return 0;
}
/***********************************************************************************************************************
......
......@@ -203,11 +203,13 @@ void UDS_S_Data_Indication(uint16_t S_TAtype, uint8_t *S_Data, uint16_t S_Length
返回值:无 SYSC0_RUNPLL2CNTR
******************************************************************************/
extern uint8_t S3_Server_refresh;
extern uint8_t S3_ServerEN;
extern uint8_t SessionType;
void UDS_Process_Service_Request(void)
{
if (UDS_APP_RX.A_PDU.New)
{
S3_Server_refresh = 1;
S3_ServerEN = 0; // 收到消息时,暂停S3Timer
switch (UDS_APP_RX.A_PDU.A_PCI.SI)
{
case 0x10: UDS_Service_10_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
......@@ -218,11 +220,11 @@ void UDS_Process_Service_Request(void)
UDS_Service_22_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
}
break;
/* case 0x2E: UDS_Service_2E_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
break;
case 0x27: UDS_Service_27_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
break;
case 0x28: UDS_Service_28_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
case 0x2E: UDS_Service_2E_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
break;
/* case 0x28: UDS_Service_28_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
break;
case 0x85: UDS_Service_85_Indication(UDS_APP_RX.A_PDU.TA_type, UDS_APP_RX.A_PDU.Length, UDS_APP_RX.A_PDU.Data);
break; */
......@@ -239,6 +241,12 @@ void UDS_Process_Service_Request(void)
break;
}
UDS_APP_RX.A_PDU.New = 0;
if(SessionType > DefaultSession) // 非默认会话时执行
{
S3_Server_refresh = 1; // 诊断请求处理完成, 刷新S3Timer
S3_ServerEN = 1; // 消息处理完成,恢复S3Timer计时
}
}
}
......
This diff is collapsed.
......@@ -47,6 +47,8 @@
#define FLASH_APP_RODATA_INFO (0x00501C00UL) /* 存储只读DID信息 */
#define FLASH_APP_RWDATA_INFO (0x00502000UL) /* 存储可写的DID信息 */
#define FLASH_PAGE_SIZE (0x400UL) /* FLASH 页面大小 */
#define Data_Flash_Addr_BootValid_OFFSET 0x00000000
#define Data_Flash_Addr_DiagReceive_OFFSET 0x00002000
#define Data_Flash_Addr_Diag2E_OFFSET 0x00004000
......@@ -56,6 +58,8 @@
#define Jump_To_Boot_No_Answer 0xA77A8AA8
#define Flag_App_OTAStatus 0x3663B88B // ����Boot��ԭ������ΪOTA
#define FLAG_APP_FLAG (0xA77A5AA5U) /* 表示APP标识已写入 */
#define EnableInterrupts \
{ \
__asm CLI; \
......@@ -176,8 +180,6 @@
// #define sendKey_LV11 0x12
#define NormalKeyUnlock 0x01
#define NormalKeyLock 0x00
#define BootKeyUnlock 0x02
#define BootKeyLock 0x00
#define RequestSeedMaxCnt 0x04
#define AttemptMaxCnt 0x03
......@@ -338,26 +340,45 @@ typedef struct
uint8_t OpCode;
} DiagSendDataNeg;
void UDS_Service_10_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
void UDS_Service_11_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
void UDS_Service_22_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
void UDS_Service_3E_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
void S3_ServerCNTT(void);
extern void DIAG_InitParameter(void);
typedef struct
{
uint32_t Flag;
uint8_t DID_5000[32]; /* programming date */
// uint8_t fill_data[17]; /* 用于保证该结构体长度是4的倍数 */
} Diag_Write_Data_t;
extern void UDS_Service_10_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void UDS_Service_11_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void UDS_Service_22_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void UDS_Service_27_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void UDS_Service_2E_Indication(uint32_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void UDS_Service_3E_Indication(uint16_t A_TA_type, uint16_t A_Length, uint8_t *A_Data);
extern void S3_ServerCNTT(void);
extern void UDS_Normal_Init(void);
extern void UDS_Startup_Init(void);
typedef void (*InitFunction)(void);
/***********Local Functin*************/
uint8_t GetCurrentSession(void);
uint8_t SerXXNRC12Filter(uint8_t insub, const uint8_t *supportsub, uint8_t size, uint8_t *index);
uint8_t SerXXNRC13Filter(uint8_t type, uint8_t serlength, const uint8_t *length, uint8_t index);
uint8_t SerXXNRC22Filter(void);
uint8_t SerXXNRC31DIDFilter(uint16_t inDID, const uint16_t *DIDList, uint8_t size, uint8_t *index);
uint8_t SerXXNRC7EFilter(const uint8_t *SubSupportSession, uint8_t index);
uint8_t SerXXNRC7FFilter(uint8_t SupportSession);
void Write_App_InValid(uint32_t m32);
extern uint8_t GetCurrentSession(void);
extern uint8_t SerXXNRC12Filter(uint8_t insub, const uint8_t *supportsub, uint8_t size, uint8_t *index);
extern uint8_t SerXXNRC13Filter(uint8_t type, uint8_t serlength, const uint8_t *length, uint8_t index);
extern uint8_t SerXXNRC22Filter(void);
extern uint8_t SerXXNRC31DIDFilter(uint16_t inDID, const uint16_t *DIDList, uint8_t size, uint8_t *index);
extern uint8_t SerXXNRC7EFilter(const uint8_t *SubSupportSession, uint8_t index);
extern uint8_t SerXXNRC7FFilter(uint8_t SupportSession);
extern void Write_App_InValid(uint32_t m32);
extern void Get_Into_630H_Update_MCU_Mode(void);
extern void Check_MCU_Info_in_630H(void);
extern void Ser27_CreateRandomSeed(void);
extern uint32_t CalculateKey(uint8_t seed_array[]);
extern uint32_t Combine_U8_Into_U32(uint8_t *U8);
extern uint8_t Write_Data_Flash(uint32_t addr, uint32_t size, uint8_t *data);
extern void erase_memory(uint32_t start_addr, uint32_t end_addr);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment