From 916318f6ef0437ac4ed609f1f5a05c43db9eda18 Mon Sep 17 00:00:00 2001 From: cfif Date: Thu, 28 May 2026 11:28:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanUds.c | 100 ++++++++++++------------------------------------------- CanUds.h | 9 +---- 2 files changed, 22 insertions(+), 87 deletions(-) diff --git a/CanUds.c b/CanUds.c index bc00f73..d52107e 100644 --- a/CanUds.c +++ b/CanUds.c @@ -949,10 +949,6 @@ static uint16_t vUDS_check_Programming_Preconditions(tCanUds *env, eUdsRoutineCo return 0xFF00 | UDS_error_sub_functionNotSupported; } - env->CheckSum_BlockMain = false; - env->CheckSum_BlockCalib = false; - env->CheckSum_BlockMeta = false; - // env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess; // return 4 + 1; return 4; @@ -992,33 +988,8 @@ static uint16_t vUDS_routine_Compare_Checksum(tCanUds *env, eUdsRoutineControlTy if (crc32_calc == crc32_received) { env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess; - - if (env->udsBlock == UDS_BlockMain) { - env->CheckSum_BlockMain = true; - } - - if (env->udsBlock == UDS_BlockCalib) { - env->CheckSum_BlockCalib = true; - } - - if (env->udsBlock == UDS_BlockMeta) { - env->CheckSum_BlockMeta = true; - } - } else { env->dataResponse[4] = UDS_routine_RoutineStartStopFailure; - - if (env->udsBlock == UDS_BlockMain) { - env->CheckSum_BlockMain = false; - } - - if (env->udsBlock == UDS_BlockCalib) { - env->CheckSum_BlockCalib = false; - } - - if (env->udsBlock == UDS_BlockMeta) { - env->CheckSum_BlockMeta = false; - } } @@ -1046,8 +1017,6 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u env->udsBlock = UDS_BlockMain; } else if (eraseMemory->memoryAddress == ADR_HEX_BlockCalib) { env->udsBlock = UDS_BlockCalib; - } else if (eraseMemory->memoryAddress == ADR_HEX_BlockMeta) { - env->udsBlock = UDS_BlockMeta; } if (env->udsBlock == UDS_BlockInit) { @@ -1067,10 +1036,6 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u result = env->clear_flash_func(ADR_HEX_Mapped_BlockCalib, SIZE_HEX_BlockCalib); } - if (env->udsBlock == UDS_BlockMeta) { - result = env->clear_flash_func(ADR_HEX_Mapped_BlockMeta, SIZE_HEX_BlockMeta); - } - // bool result = FLASHDRIVER_FlashEraseBlock(FLASH_BLOCK_SELECT1); if (result) { @@ -1094,53 +1059,41 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType return 0xFF00 | UDS_error_sub_functionNotSupported; } - char *version_id_main = (char *) (ADR_HEX_BlockMain + 0x400); - int result = memcmp(version_id_main, version_id, 9); +// char *version_id_main = (char *) (ADR_HEX_BlockMain + 0x400); +// int result = memcmp(version_id_main, version_id, 9); +// if (result != 0) { +// LoggerErrorStatic(LOGGER, LOG_SIGN, "Software incompatibility"); +// env->dataResponse[4] = 3; +// return 4 + 1; +// } - if ((env->CheckSum_BlockMain == false) || (env->CheckSum_BlockCalib == false) || (env->CheckSum_BlockMeta == false)) { - LoggerErrorStatic(LOGGER, LOG_SIGN, "At least one logical block missing"); - env->dataResponse[4] = 4; - return 4 + 1; - } + setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending); + uint32_t crc32_calc = UdsCrc32Update(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockMain, SIZE_HEX_BlockMain - 4, + SendUpdatePendingCrc, env, 200); + crc32_calc = UdsCrc32Finalize(crc32_calc); + + uint32_t crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockMain + SIZE_HEX_BlockMain - 4)); + + if (crc32_calc != crc32_file) { + env->dataResponse[4] = UDS_routine_RoutineStartStopFailure; - if (result != 0) { - LoggerErrorStatic(LOGGER, LOG_SIGN, "Software incompatibility"); - env->dataResponse[4] = 3; return 4 + 1; } setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending); - - uint32_t crc32_calc = UdsCrc32Update(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockMain, - SIZE_HEX_BlockMain + SIZE_HEX_BlockCalib + SIZE_HEX_BlockMeta - 4, - SendUpdatePendingCrc, env, 200); + crc32_calc = UdsCrc32Update(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockCalib, SIZE_HEX_BlockCalib - 4, + SendUpdatePendingCrc, env, 200); crc32_calc = UdsCrc32Finalize(crc32_calc); - memcpy(&env->data->data[1024], (uint8_t *) ADR_HEX_Mapped_BlockMeta, SIZE_HEX_BlockMeta); - uint32_t *crcFromFlash = (uint32_t *)&env->data->data[1024 + SIZE_HEX_BlockMeta - 4]; - *crcFromFlash = crc32_calc; + crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockCalib + SIZE_HEX_BlockCalib - 4)); - result = env->clear_flash_func(ADR_HEX_Mapped_BlockMeta, SIZE_HEX_BlockMeta); + if (crc32_calc != crc32_file) { + env->dataResponse[4] = UDS_routine_RoutineStartStopFailure; - if (result == false) { - LoggerErrorStatic(LOGGER, LOG_SIGN, "General failure"); - env->dataResponse[4] = 1; return 4 + 1; } - result = env->write_flash_func(ADR_HEX_Mapped_BlockMeta, &env->data->data[1024], SIZE_HEX_BlockMeta); - - if (result == false) { - LoggerErrorStatic(LOGGER, LOG_SIGN, "General failure"); - env->dataResponse[4] = 1; - return 4 + 1; - } - -#if (LOG_UDS == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Update Crc: 0x%08X", *crcFromFlash) -#endif - env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess; return 4 + 1; @@ -1444,10 +1397,6 @@ static uint16_t RequestDownload_34(tCanUds *env) { env->udsBlock = UDS_BlockCalib; } - if (com->memoryAddress == ADR_HEX_BlockMeta) { - env->udsBlock = UDS_BlockMeta; - } - if (env->udsBlock == UDS_BlockInit) { return setResponseError(env, UDS_RequestDownload, UDS_error_requestSequenceError); } @@ -1471,13 +1420,6 @@ static uint16_t RequestDownload_34(tCanUds *env) { } - if (env->udsBlock == UDS_BlockMeta) { - - if (com->memorySize > SIZE_HEX_BlockMeta) { - return setResponseError(env, UDS_RequestDownload, UDS_error_requestOutOfRange); - } - - } if (env->currentSession == UDS_session_defaultSession) { return setResponseError(env, UDS_RoutineControl, UDS_error_conditionsNotCorrect); diff --git a/CanUds.h b/CanUds.h index 6ee42ae..c13ee4e 100644 --- a/CanUds.h +++ b/CanUds.h @@ -22,15 +22,12 @@ #define ADR_HEX_BlockMain 0x01020000 #define ADR_HEX_BlockCalib 0x010D0000 -#define ADR_HEX_BlockMeta 0x010FF800 #define ADR_HEX_Mapped_BlockMain 0x01100000 #define ADR_HEX_Mapped_BlockCalib 0x011B0000 -#define ADR_HEX_Mapped_BlockMeta 0x011DF800 #define SIZE_HEX_BlockMain (704 * 1024) -#define SIZE_HEX_BlockCalib (190 * 1024) -#define SIZE_HEX_BlockMeta (2 * 1024) +#define SIZE_HEX_BlockCalib (192 * 1024) #define LEN_DEBUG_UDS_BUFF 128 @@ -152,7 +149,6 @@ typedef enum { typedef enum { UDS_BlockMain = 0, UDS_BlockCalib = 1, - UDS_BlockMeta = 2, UDS_BlockInit = 0xff } eUdsBlock; @@ -212,9 +208,6 @@ typedef struct { uint32_t DownloadFirmwareSize; eUdsBlock udsBlock; - bool CheckSum_BlockMain; - bool CheckSum_BlockCalib; - bool CheckSum_BlockMeta; uint32_t CurrentBlockAdr; uint32_t CurrentBlockSize;