Обновление 23.06.2026
This commit is contained in:
parent
0f6418ea57
commit
44cfb4662f
73
CanUds.c
73
CanUds.c
|
|
@ -234,8 +234,6 @@ void SendUpdatePendingFlashClear(void *env) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setDefaultSecurityAccess(tCanUds *env) {
|
static void setDefaultSecurityAccess(tCanUds *env) {
|
||||||
// env->udsFirmwareStepsMain = UDS_Firmware_Step_None;
|
|
||||||
// env->udsFirmwareStepsCalib = UDS_Firmware_Step_None;
|
|
||||||
env->SA.requestSequenceRequestSeed = false;
|
env->SA.requestSequenceRequestSeed = false;
|
||||||
env->SA.stateSecurityAccess = false;
|
env->SA.stateSecurityAccess = false;
|
||||||
env->SA.counter_max_attempts_default = 0;
|
env->SA.counter_max_attempts_default = 0;
|
||||||
|
|
@ -887,8 +885,11 @@ static uint16_t CommunicationControl_28(tCanUds *env) {
|
||||||
|
|
||||||
if (com->sub_function == UDS_sub_enableRxAndTx) {
|
if (com->sub_function == UDS_sub_enableRxAndTx) {
|
||||||
set_CCU_Mute(env->canSpamTransmitter, false);
|
set_CCU_Mute(env->canSpamTransmitter, false);
|
||||||
|
set_DBG_CCU_Mute(env->canSpamDebugTransmitter, false);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
set_CCU_Mute(env->canSpamTransmitter, true);
|
set_CCU_Mute(env->canSpamTransmitter, true);
|
||||||
|
set_DBG_CCU_Mute(env->canSpamDebugTransmitter, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
env->dataResponse[0] = UDS_Communication_Control | 0b1000000;
|
env->dataResponse[0] = UDS_Communication_Control | 0b1000000;
|
||||||
|
|
@ -1063,7 +1064,7 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u
|
||||||
if ((result1) && (result2)) {
|
if ((result1) && (result2)) {
|
||||||
env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess;
|
env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess;
|
||||||
|
|
||||||
// env->udsFirmwareStepsMain = UDS_Firmware_Step_EraseMemory;
|
env->udsFirmwareStepsMain = UDS_Firmware_Step_EraseMemory;
|
||||||
|
|
||||||
return 4 + 1;
|
return 4 + 1;
|
||||||
}
|
}
|
||||||
|
|
@ -1078,7 +1079,7 @@ static uint16_t vUDS_routine_Erase_Memory(tCanUds *env, eUdsRoutineControlType u
|
||||||
if (result1) {
|
if (result1) {
|
||||||
env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess;
|
env->dataResponse[4] = UDS_routine_RoutineStartStopSuccess;
|
||||||
|
|
||||||
// env->udsFirmwareStepsCalib = UDS_Firmware_Step_EraseMemory;
|
env->udsFirmwareStepsCalib = UDS_Firmware_Step_EraseMemory;
|
||||||
|
|
||||||
return 4 + 1;
|
return 4 + 1;
|
||||||
}
|
}
|
||||||
|
|
@ -1134,14 +1135,67 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
|
||||||
// return 4 + 1;
|
// return 4 + 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
if (env->udsFirmwareStepsMain != UDS_Firmware_Step_EraseMemory) {
|
||||||
|
|
||||||
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
uint32_t size = SIZE_HEX_BlockMain / 4;
|
||||||
|
uint32_t adr_map = ADR_HEX_Mapped_BlockMain;
|
||||||
|
uint32_t adr_orig = ADR_HEX_BlockMain;
|
||||||
|
result = P_bInternalFlashPage_CopyRange(adr_map, adr_orig, size, NULL, NULL);
|
||||||
|
if (result == false) {
|
||||||
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
return 4 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
adr_map = ADR_HEX_Mapped_BlockMain + size;
|
||||||
|
adr_orig = ADR_HEX_BlockMain + size;
|
||||||
|
result = P_bInternalFlashPage_CopyRange(adr_map, adr_orig, size, NULL, NULL);
|
||||||
|
if (result == false) {
|
||||||
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
return 4 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
adr_map = ADR_HEX_Mapped_BlockMain + size;
|
||||||
|
adr_orig = ADR_HEX_BlockMain + size;
|
||||||
|
result = P_bInternalFlashPage_CopyRange(adr_map, adr_orig, size, NULL, NULL);
|
||||||
|
if (result == false) {
|
||||||
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
return 4 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
adr_map = ADR_HEX_Mapped_BlockMain + size;
|
||||||
|
adr_orig = ADR_HEX_BlockMain + size;
|
||||||
|
result = P_bInternalFlashPage_CopyRange(adr_map, adr_orig, size, NULL, NULL);
|
||||||
|
if (result == false) {
|
||||||
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
return 4 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->udsFirmwareStepsCalib != UDS_Firmware_Step_EraseMemory) {
|
||||||
|
|
||||||
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
result = P_bInternalFlashPage_CopyRange(ADR_HEX_Mapped_BlockCalib, ADR_HEX_BlockCalib, SIZE_HEX_BlockCalib,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
|
if (result == false) {
|
||||||
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
|
||||||
|
return 4 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
uint32_t crc32_calc = UdsCrc32Update_Hardware(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockMain,
|
uint32_t crc32_calc = UdsCrc32Update_Hardware(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockMain,
|
||||||
SIZE_HEX_BlockMain - 4,
|
SIZE_HEX_BlockMain - 4,
|
||||||
SendUpdatePendingCrc, env, 200);
|
SendUpdatePendingCrc, env, 200);
|
||||||
|
|
||||||
uint32_t crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockMain + SIZE_HEX_BlockMain - 4));
|
uint32_t crc32_file = (*(uint32_t * )(ADR_HEX_Mapped_BlockMain + SIZE_HEX_BlockMain - 4));
|
||||||
|
|
||||||
if (crc32_calc != crc32_file) {
|
if (crc32_calc != crc32_file) {
|
||||||
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
|
@ -1153,7 +1207,7 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
|
||||||
crc32_calc = UdsCrc32Update_Hardware(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockCalib, SIZE_HEX_BlockCalib - 4,
|
crc32_calc = UdsCrc32Update_Hardware(0xFFFFFFFF, (uint8_t *) ADR_HEX_Mapped_BlockCalib, SIZE_HEX_BlockCalib - 4,
|
||||||
SendUpdatePendingCrc, env, 200);
|
SendUpdatePendingCrc, env, 200);
|
||||||
|
|
||||||
crc32_file = (*(uint32_t *) (ADR_HEX_Mapped_BlockCalib + SIZE_HEX_BlockCalib - 4));
|
crc32_file = (*(uint32_t * )(ADR_HEX_Mapped_BlockCalib + SIZE_HEX_BlockCalib - 4));
|
||||||
|
|
||||||
if (crc32_calc != crc32_file) {
|
if (crc32_calc != crc32_file) {
|
||||||
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
|
@ -1179,7 +1233,7 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
|
||||||
return 4 + 1;
|
return 4 + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size = D_sInternalFlashPage_Write(0x04000000, 0, (uint8_t *) &NumberBank, 8);
|
size_t size = D_sInternalFlashPage_Write(0x04000000, 0, (uint8_t * ) & NumberBank, 8);
|
||||||
|
|
||||||
if (size != 8) {
|
if (size != 8) {
|
||||||
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
env->dataResponse[4] = UDS_routine_RoutineStartStopFailure;
|
||||||
|
|
@ -1187,6 +1241,8 @@ vUDS_routine_Check_Programming_Dependancies(tCanUds *env, eUdsRoutineControlType
|
||||||
return 4 + 1;
|
return 4 + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
env->udsFirmwareStepsMain = UDS_Firmware_Step_None;
|
||||||
|
env->udsFirmwareStepsCalib = UDS_Firmware_Step_None;
|
||||||
|
|
||||||
// env->udsFirmwareStepsMain = UDS_Firmware_Step_Dependancies;
|
// env->udsFirmwareStepsMain = UDS_Firmware_Step_Dependancies;
|
||||||
// env->udsFirmwareStepsCalib = UDS_Firmware_Step_Dependancies;
|
// env->udsFirmwareStepsCalib = UDS_Firmware_Step_Dependancies;
|
||||||
|
|
@ -1995,6 +2051,7 @@ void CanUds(tCanUds *env) {
|
||||||
#endif
|
#endif
|
||||||
setDefaultSecurityAccess(env);
|
setDefaultSecurityAccess(env);
|
||||||
set_CCU_Mute(env->canSpamTransmitter, false);
|
set_CCU_Mute(env->canSpamTransmitter, false);
|
||||||
|
set_DBG_CCU_Mute(env->canSpamDebugTransmitter, false);
|
||||||
set_NoBitsDTC(env->Diagnostic, false);
|
set_NoBitsDTC(env->Diagnostic, false);
|
||||||
env->currentSession = UDS_session_defaultSession;
|
env->currentSession = UDS_session_defaultSession;
|
||||||
statusData.Status_Active_Diagnostic_Session.Active_Diagnostic_Session = env->currentSession;
|
statusData.Status_Active_Diagnostic_Session.Active_Diagnostic_Session = env->currentSession;
|
||||||
|
|
@ -2022,6 +2079,7 @@ void CanUds_Init(
|
||||||
tSerialPortFrameIO *CanIO,
|
tSerialPortFrameIO *CanIO,
|
||||||
tDeviceStorage *deviceStorage,
|
tDeviceStorage *deviceStorage,
|
||||||
tCanSpamTransmitter *canSpamTransmitter,
|
tCanSpamTransmitter *canSpamTransmitter,
|
||||||
|
tCanSpamDebugTransmitter *canSpamDebugTransmitter,
|
||||||
tAdc0Task *adcTask0,
|
tAdc0Task *adcTask0,
|
||||||
uds_clear_flash_func *clear_flash_func,
|
uds_clear_flash_func *clear_flash_func,
|
||||||
uds_write_flash_func *write_flash_func,
|
uds_write_flash_func *write_flash_func,
|
||||||
|
|
@ -2034,6 +2092,7 @@ void CanUds_Init(
|
||||||
env->adcTask0 = adcTask0;
|
env->adcTask0 = adcTask0;
|
||||||
env->filterIdCount = 2;
|
env->filterIdCount = 2;
|
||||||
env->canSpamTransmitter = canSpamTransmitter;
|
env->canSpamTransmitter = canSpamTransmitter;
|
||||||
|
env->canSpamDebugTransmitter = canSpamDebugTransmitter;
|
||||||
env->clear_flash_func = clear_flash_func;
|
env->clear_flash_func = clear_flash_func;
|
||||||
env->write_flash_func = write_flash_func;
|
env->write_flash_func = write_flash_func;
|
||||||
|
|
||||||
|
|
|
||||||
7
CanUds.h
7
CanUds.h
|
|
@ -9,6 +9,7 @@
|
||||||
#include "DeviceStorage.h"
|
#include "DeviceStorage.h"
|
||||||
#include "DiagnosticTask.h"
|
#include "DiagnosticTask.h"
|
||||||
#include "CanSpamTransmitter.h"
|
#include "CanSpamTransmitter.h"
|
||||||
|
#include "CanSpamDebugTransmitter.h"
|
||||||
#include "AdcTasks.h"
|
#include "AdcTasks.h"
|
||||||
|
|
||||||
#define LOG_UDS 0
|
#define LOG_UDS 0
|
||||||
|
|
@ -203,6 +204,7 @@ typedef struct {
|
||||||
uint32_t currentSessionTesterPresentTimeout;
|
uint32_t currentSessionTesterPresentTimeout;
|
||||||
|
|
||||||
tCanSpamTransmitter *canSpamTransmitter;
|
tCanSpamTransmitter *canSpamTransmitter;
|
||||||
|
tCanSpamDebugTransmitter *canSpamDebugTransmitter;
|
||||||
|
|
||||||
uint32_t randomSecuritySeed;
|
uint32_t randomSecuritySeed;
|
||||||
|
|
||||||
|
|
@ -222,8 +224,8 @@ typedef struct {
|
||||||
uint32_t DownloadFirmwareSize;
|
uint32_t DownloadFirmwareSize;
|
||||||
eUdsBlock udsBlock;
|
eUdsBlock udsBlock;
|
||||||
|
|
||||||
// eUdsFirmwareSteps udsFirmwareStepsMain;
|
eUdsFirmwareSteps udsFirmwareStepsMain;
|
||||||
// eUdsFirmwareSteps udsFirmwareStepsCalib;
|
eUdsFirmwareSteps udsFirmwareStepsCalib;
|
||||||
|
|
||||||
uint32_t CurrentBlockAdr;
|
uint32_t CurrentBlockAdr;
|
||||||
uint32_t CurrentBlockSize;
|
uint32_t CurrentBlockSize;
|
||||||
|
|
@ -252,6 +254,7 @@ void CanUds_Init(
|
||||||
tSerialPortFrameIO *CanIO,
|
tSerialPortFrameIO *CanIO,
|
||||||
tDeviceStorage *deviceStorage,
|
tDeviceStorage *deviceStorage,
|
||||||
tCanSpamTransmitter *canSpamTransmitter,
|
tCanSpamTransmitter *canSpamTransmitter,
|
||||||
|
tCanSpamDebugTransmitter *canSpamDebugTransmitter,
|
||||||
tAdc0Task *adcTask0,
|
tAdc0Task *adcTask0,
|
||||||
uds_clear_flash_func *clear_flash_func,
|
uds_clear_flash_func *clear_flash_func,
|
||||||
uds_write_flash_func *write_flash_func,
|
uds_write_flash_func *write_flash_func,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue