Обновление

This commit is contained in:
cfif 2026-04-21 15:35:17 +03:00
parent df041e46eb
commit 8cd8b89884
2 changed files with 25 additions and 4 deletions

View File

@ -222,6 +222,21 @@ void ReceivedTP_func(void *arg, tCanTP_data *data) {
} }
*/ */
void setResponseErrorPending(tCanUds *env, eUdsServices service, eUdsResponseError error) {
env->dataResponsePending[0] = 0x7F;
env->dataResponsePending[1] = service;
env->dataResponsePending[2] = error;
CanSerialPortFrameTpTransmit(&env->canSerialPortFrameTp, env->dataResponsePending,
3, PROTOCOL_CAN_ADR_UDS, WAIT_FRAME_WRITE);
}
static void setDefaultSecurityAccess(tCanUds *env) { static void setDefaultSecurityAccess(tCanUds *env) {
env->SA.requestSequenceRequestSeed = false; env->SA.requestSequenceRequestSeed = false;
env->SA.stateSecurityAccess = false; env->SA.stateSecurityAccess = false;
@ -300,11 +315,11 @@ static uint16_t DiagnosticSessionControl_10(tCanUds *env) {
// Нормальный таймаут. Важно: Клиент может отправлять TesterPresent для поддержания сессии // Нормальный таймаут. Важно: Клиент может отправлять TesterPresent для поддержания сессии
// 50 мс // 50 мс
diagnosticSessionsType->P2 = 500; diagnosticSessionsType->P2 = 50;
// Расширенный таймаут. Например, ECU может обрабатывать сложный запрос 2 секунды и отправлять NRC 0x78, затем ответ // Расширенный таймаут. Например, ECU может обрабатывать сложный запрос 2 секунды и отправлять NRC 0x78, затем ответ
// 5000 мс // 500 мс
diagnosticSessionsType->P2Ex = 5000; diagnosticSessionsType->P2Ex = 500;
return 6; return 6;
} }
@ -958,6 +973,8 @@ static uint16_t vUDS_routine_Compare_Checksum(tCanUds *env, eUdsRoutineControlTy
return 0xFF00 | UDS_error_incorrectMessageLengthOrInvalidFormat; return 0xFF00 | UDS_error_incorrectMessageLengthOrInvalidFormat;
} }
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
uint32_t crc32_calc = UdsCrc32((uint8_t *) 0x01100000, 512 * 1024); uint32_t crc32_calc = UdsCrc32((uint8_t *) 0x01100000, 512 * 1024);
uint32_t crc32_received = uint32_t crc32_received =
(env->data->data[4] << 24) | (env->data->data[5] << 16) | (env->data->data[6] << 8) | env->data->data[7]; (env->data->data[4] << 24) | (env->data->data[5] << 16) | (env->data->data[6] << 8) | env->data->data[7];
@ -979,6 +996,8 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u
return 0xFF00 | UDS_error_sub_functionNotSupported; return 0xFF00 | UDS_error_sub_functionNotSupported;
} }
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
bool result = env->clear_flash_func(0x01100000, 512 * 1024); bool result = env->clear_flash_func(0x01100000, 512 * 1024);
// bool result = FLASHDRIVER_FlashEraseBlock(FLASH_BLOCK_SELECT1); // bool result = FLASHDRIVER_FlashEraseBlock(FLASH_BLOCK_SELECT1);

View File

@ -65,7 +65,8 @@ typedef enum {
UDS_error_requestSequenceError = 0x24, UDS_error_requestSequenceError = 0x24,
UDS_error_exceededNumberOfAttempts = 0x36, UDS_error_exceededNumberOfAttempts = 0x36,
UDS_error_requiredTimeDelayNotExpired = 0x37, UDS_error_requiredTimeDelayNotExpired = 0x37,
UDS_error_generalProgrammingFailure = 0x72 UDS_error_generalProgrammingFailure = 0x72,
UDS_error_requestCorrectlyReceived_ResponsePending = 0x78
} eUdsResponseError; } eUdsResponseError;
@ -158,6 +159,7 @@ typedef struct {
tCanTP_data *data; tCanTP_data *data;
uint8_t dataResponse[1024]; uint8_t dataResponse[1024];
uint8_t dataResponsePending[4];
uint8_t filterIdCount; uint8_t filterIdCount;
uint32_t filterReqId[16]; uint32_t filterReqId[16];