Обновление

This commit is contained in:
cfif 2026-01-12 13:55:30 +03:00
parent 62cd50c41f
commit 047dd3d4b1
2 changed files with 85 additions and 26 deletions

View File

@ -496,6 +496,20 @@ typedef struct __attribute__ ((packed)) {
uint8_t COUNT;
} eXcpCommand_Program_ProgramNext_D0_CA;
typedef struct __attribute__ ((packed)) {
eXcpTypeCommand COM;
uint8_t RESERVED;
uint16_t CODESIZE;
} eXcpCommand_Program_Prepare_CC;
typedef struct __attribute__ ((packed)) {
eXcpTypeCommand COM;
uint8_t COMPRESSION_METHOD;
uint8_t ENCRYPTION_METHOD;
uint8_t PROGRAM_METHOD;
uint8_t ACCESS_METHOD;
} eXcpCommand_Program_Format_CB;
typedef struct __attribute__ ((packed)) {
eXcpTypeCommand COM;
@ -559,6 +573,13 @@ typedef struct __attribute__ ((packed)) {
uint32_t VERIFICATION_VALUE;
} eXcpCommand_Program_Verify_C8;
typedef struct __attribute__ ((packed)) {
eXcpTypeCommand COM;
uint8_t ACCESS_MODE;
uint8_t LOGICAL_DATA_SEGMENT_NUMBER;
} eXcpCommand_XCP_GET_CAL_PAGE_EA;
typedef bool (xcp_clear_flash_func)(uint32_t firstPageAddr, uint32_t totalSize);
typedef bool (xcp_write_flash_func)(uint32_t beginPageAddr, void *sourceRamAddr, uint32_t size);
@ -572,6 +593,7 @@ typedef struct {
uint8_t RESOURCE;
uint8_t ADR_EXT;
uint32_t ADR_MTA;
uint8_t PAGE_ID;

View File

@ -852,7 +852,6 @@ static uint8_t XCP_PROGRAM_D0(tCanSerialPortFrameXCP *env) {
}
static uint8_t PROGRAM_VERIFY_C8(tCanSerialPortFrameXCP *env) {
eXcpCommand_Program_Verify_C8 *request = (eXcpCommand_Program_Verify_C8 *) env->canFrame.data;
@ -879,6 +878,34 @@ static uint8_t XCP_PROGRAM_NEXT_CA(tCanSerialPortFrameXCP *env) {
return 0;
}
static uint8_t XCP_PROGRAM_PREPARE_CC(tCanSerialPortFrameXCP *env) {
eXcpCommand_Program_Prepare_CC *request = (eXcpCommand_Program_Prepare_CC *) env->canFrame.data;
if ((env->ADR_MTA < env->startFlashAdr) || ((env->ADR_MTA + request->CODESIZE) > env->endFlashAdr)) {
env->response[0] = XCP_COMMAND_DISCONNECT;
env->response[1] = XCP_ERR_GENERIC;
return 2;
}
env->response[0] = XCP_COMMAND_CONNECT;
return 1;
return 0;
}
static uint8_t XCP_PROGRAM_FORMAT_CB(tCanSerialPortFrameXCP *env) {
eXcpCommand_Program_Format_CB *request = (eXcpCommand_Program_Format_CB *) env->canFrame.data;
env->response[0] = XCP_COMMAND_CONNECT;
return 1;
return 0;
}
static uint8_t XCP_PROGRAM_RESET_CF(tCanSerialPortFrameXCP *env) {
env->response[0] = XCP_COMMAND_CONNECT;
@ -952,10 +979,20 @@ static uint8_t XCP_GET_SECTOR_INFO_CD(tCanSerialPortFrameXCP *env) {
static uint8_t XCP_SET_CALIBRATION_PAGE_EB(tCanSerialPortFrameXCP *env) {
eXcpCommand_SET_CALIBRATION_PAGE_EB *request = (eXcpCommand_SET_CALIBRATION_PAGE_EB *) env->canFrame.data;
env->PAGE_ID = request->PAGE;
env->response[0] = XCP_COMMAND_CONNECT;
return 1;
}
static uint8_t XCP_GET_CAL_PAGE_EA(tCanSerialPortFrameXCP *env) {
eXcpCommand_XCP_GET_CAL_PAGE_EA *request = (eXcpCommand_XCP_GET_CAL_PAGE_EA *) env->canFrame.data;
env->response[0] = XCP_COMMAND_CONNECT;
env->response[1] = env->PAGE_ID;
return 2;
}
const eXcp_com xcp_com[256] = {
{NULL, ""},
@ -1155,18 +1192,18 @@ const eXcp_com xcp_com[256] = {
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{PROGRAM_VERIFY_C8, "PROGRAM_VERIFY_C8"},
{NULL, ""},
{NULL, ""}, // 0xC5 DTO_CTR_PROPERTIES
{NULL, ""}, // 0xC6 TIME_CORRELATION_PROPERTIES
{NULL, ""}, // 0xC7 WRITE_DAQ_MULTIPLE
{PROGRAM_VERIFY_C8, "PROGRAM_VERIFY_C8"},
{NULL, ""}, // 0xC9 PROGRAM_MAX (This command does not support block transfer)
{XCP_PROGRAM_NEXT_CA, "XCP_PROGRAM_NEXT_CA"},
{NULL, ""},
{NULL, ""},
{XCP_PROGRAM_FORMAT_CB, "XCP_PROGRAM_FORMAT_CB"}, // 0xCB PROGRAM_FORMAT
{XCP_PROGRAM_PREPARE_CC, "XCP_PROGRAM_PREPARE_CC"}, // 0xCC PROGRAM_PREPARE
{XCP_GET_SECTOR_INFO_CD, "XCP_GET_SECTOR_INFO_CD"},
{XCP_GET_PGM_PROCESSOR_INFO_CE, "XCP_GET_PGM_PROCESSOR_INFO_CE"},
{XCP_PROGRAM_RESET_CF, "XCP_PROGRAM_RESET_CF"},
{XCP_PROGRAM_D0, "XCP_PROGRAM_D0"},
{XCP_PROGRAM_D0, "XCP_PROGRAM_D0"}, // This command does not support block transfer
{XCP_PROGRAM_CLEAR_D1, "XCP_PROGRAM_CLEAR_D1"},
{XCP_PROGRAM_START_D2, "XCP_PROGRAM_START_D2"},
{XCP_ALLOC_ODT_ENTRY_D3, "XCP_ALLOC_ODT_ENTRY_D3"},
@ -1178,7 +1215,7 @@ const eXcp_com xcp_com[256] = {
{XCP_GET_DAQ_RESOLUTION_INFO_D9, "XCP_GET_DAQ_RESOLUTION_INFO_D9"},
{XCP_GET_DAQ_PROCESSOR_INFO_DA, "XCP_GET_DAQ_PROCESSOR_INFO_DA"},
{XCP_READ_DAQ_DB, "XCP_READ_DAQ_DB"},
{NULL, ""},
{NULL, ""}, //0xDC GET_DAQ_CLOCK
{XCP_START_STOP_SYNCH_DD, "XCP_START_STOP_SYNCH_DD"},
{XCP_START_STOP_DAQ_LIST_DE, "XCP_START_STOP_DAQ_LIST_DE"},
{XCP_GET_DAQ_LIST_MODE_DF, "XCP_GET_DAQ_LIST_MODE_DF"},
@ -1186,29 +1223,29 @@ const eXcp_com xcp_com[256] = {
{XCP_WRITE_DAQ_E1, "XCP_WRITE_DAQ_E1"},
{XCP_SET_DAQ_PTR_E2, "XCP_SET_DAQ_PTR_E2"},
{XCP_CLEAR_DAQ_LIST_E3, "XCP_CLEAR_DAQ_LIST_E3"},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{NULL, ""}, // 0xE4 COPY_CAL_PAGE
{NULL, ""}, // 0xE5 GET_SEGMENT_MODE
{NULL, ""}, // 0xE6 SET_SEGMENT_MODE
{NULL, ""}, // 0xE7 GET_PAGE_INFO
{NULL, ""}, // 0xE8 GET_SEGMENT_INFO
{NULL, ""}, // 0xE9 GET_PAG_PROCESSOR_INFO
{XCP_GET_CAL_PAGE_EA, "XCP_GET_CAL_PAGE_EA"}, // 0xEA GET_CAL_PAGE
{XCP_SET_CALIBRATION_PAGE_EB, "XCP_SET_CALIBRATION_PAGE_EB"},
{NULL, ""},
{NULL, ""},
{XCP_COMMAND_DOWNLOAD_MAX_EE, "XCP_COMMAND_DOWNLOAD_MAX_EE"},
{NULL, ""}, // 0xEC MODIFY_BITS
{NULL, ""}, // 0xEB SHORT_DOWNLOAD (This command does not support block transfer)
{XCP_COMMAND_DOWNLOAD_MAX_EE, "XCP_COMMAND_DOWNLOAD_MAX_EE"}, // This command does not support block transfer
{XCP_COMMAND_DOWNLOAD_NEXT_EF, "XCP_COMMAND_DOWNLOAD_NEXT_EF"},
{XCP_COMMAND_DOWNLOAD_F0, "XCP_COMMAND_DOWNLOAD_F0"},
{NULL, ""},
{NULL, ""},
{NULL, ""},
{XCP_COMMAND_SHORT_UPLOAD_F4, "XCP_COMMAND_SHORT_UPLOAD_F4"},
{NULL, ""}, // 0XF1 USER_CMD
{NULL, ""}, // 0xF2 DOWNLOAD
{NULL, ""}, // 0xF3 DOWNLOAD_NEXT
{XCP_COMMAND_SHORT_UPLOAD_F4, "XCP_COMMAND_SHORT_UPLOAD_F4"}, // This command does not support block transfer
{XCP_COMMAND_UPLOAD_F5, "XCP_COMMAND_UPLOAD_F5"},
{XCP_COMMAND_SET_MTA_F6, "XCP_COMMAND_SET_MTA_F6"},
{XCP_UNLOCK_F7, "XCP_UNLOCK_F7"},
{XCP_GET_SEED_F8, "XCP_GET_SEED_F8"},
{NULL, ""},
{NULL, ""},
{NULL, ""}, // 0xF9 SET_REQUEST
{NULL, ""}, // 0xFA GET_ID
{XCP_GET_COMM_MODE_INFO_FB, "XCP_GET_COMM_MODE_INFO_FB"},
{XCP_COMMAND_SYNCH_FC, "XCP_COMMAND_SYNCH_FC"},
{XCP_COMMAND_GET_STATUS_FD, "XCP_COMMAND_GET_STATUS_FD"},