Обновление
This commit is contained in:
parent
0915a5f9f5
commit
b2c9e201cb
12
APP/Clock.c
12
APP/Clock.c
|
|
@ -106,8 +106,8 @@ static void Bsp_SCG_Init(void) {
|
||||||
.bLock = false,
|
.bLock = false,
|
||||||
.bCm = false,
|
.bCm = false,
|
||||||
.bTrEn = false,
|
.bTrEn = false,
|
||||||
.bLpen = false,
|
.bLpen = true,
|
||||||
.bSten = false,
|
.bSten = true,
|
||||||
.eDivH = SCG_ASYNCCLOCKDIV_BY1,
|
.eDivH = SCG_ASYNCCLOCKDIV_BY1,
|
||||||
.eDivM = SCG_ASYNCCLOCKDIV_BY1,
|
.eDivM = SCG_ASYNCCLOCKDIV_BY1,
|
||||||
.eDivL = SCG_ASYNCCLOCKDIV_BY2,
|
.eDivL = SCG_ASYNCCLOCKDIV_BY2,
|
||||||
|
|
@ -165,6 +165,14 @@ static void Bsp_PCC_Init(void) {
|
||||||
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
||||||
|
|
||||||
PCC_SetPcc(&bSP_PCC_Config);
|
PCC_SetPcc(&bSP_PCC_Config);
|
||||||
|
|
||||||
|
// PCC_CLK_WKU0
|
||||||
|
bSP_PCC_Config.eClockName = PCC_CLK_WKU0;
|
||||||
|
bSP_PCC_Config.bEn = true;
|
||||||
|
bSP_PCC_Config.eClkSrc = PCC_CLKGATE_UNINVOLVED;
|
||||||
|
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
||||||
|
|
||||||
|
PCC_SetPcc(&bSP_PCC_Config);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bsp_Systick_Init(void)
|
void Bsp_Systick_Init(void)
|
||||||
|
|
|
||||||
102
APP/main.c
102
APP/main.c
|
|
@ -62,8 +62,6 @@ const DMA_InitType dmaInitCfg =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static _Noreturn void MainTransmitter_Thread(tBootMma *env) {
|
static _Noreturn void MainTransmitter_Thread(tBootMma *env) {
|
||||||
|
|
||||||
DMA_Init(DMA_INSTANCE_0, &dmaInitCfg);
|
DMA_Init(DMA_INSTANCE_0, &dmaInitCfg);
|
||||||
|
|
@ -90,6 +88,12 @@ static _Noreturn void MainTransmitter_Thread(tBootMma *env) {
|
||||||
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Initialization of subsystems")
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Initialization of subsystems")
|
||||||
|
|
||||||
|
if (RGM_SRS_WAKEUP_MASK == (RGM->SRS & RGM_SRS_WAKEUP_MASK)) {
|
||||||
|
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "The bootloader is ignored (waking up)")
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
// StorageOnFlash_Init(&env->slog.logger);
|
// StorageOnFlash_Init(&env->slog.logger);
|
||||||
|
|
||||||
// NVM_STORAGE.nf_storage_param.logger = &env->slog.logger;
|
// NVM_STORAGE.nf_storage_param.logger = &env->slog.logger;
|
||||||
|
|
@ -98,63 +102,66 @@ static _Noreturn void MainTransmitter_Thread(tBootMma *env) {
|
||||||
// &env->slog.logger);
|
// &env->slog.logger);
|
||||||
|
|
||||||
|
|
||||||
FirmwareLoader_Init(&env->FIRMWARE_HVAC, FIRMWARE_MAIN_AREA_LENGTH, FIRMWARE_MAIN_ADDR,
|
FirmwareLoader_Init(&env->FIRMWARE_HVAC, FIRMWARE_MAIN_AREA_LENGTH, FIRMWARE_MAIN_ADDR,
|
||||||
FIRMWARE_MAIN_UPDATE_ADDR);
|
FIRMWARE_MAIN_UPDATE_ADDR);
|
||||||
|
|
||||||
bool isMain = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.main);
|
bool isMain = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.main);
|
||||||
|
|
||||||
if (isMain) {
|
if (isMain) {
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware: Checksum is correct")
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware: Checksum is correct")
|
||||||
} else {
|
} else {
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware: Checksum is not correct")
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware: Checksum is not correct")
|
||||||
|
|
||||||
if (*env->FIRMWARE_HVAC.main.metadata.crc == 0) {
|
if (*env->FIRMWARE_HVAC.main.metadata.crc == 0) {
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware: Checksum not found (The program may have been flashed using JTAG ?)")
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN,
|
||||||
}
|
"Main firmware: Checksum not found (The program may have been flashed using JTAG ?)")
|
||||||
}
|
|
||||||
|
|
||||||
bool isUpdate = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.update);
|
|
||||||
|
|
||||||
if (isUpdate) {
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Recovery firmware: Checksum is correct")
|
|
||||||
} else {
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Recovery firmware: Checksum is not correct")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Есть обновление
|
|
||||||
if (isUpdate) {
|
|
||||||
|
|
||||||
// Если текущая прошивка (isMain) неисправна (не загружена) или в секции обновления находится отличная от текущей прошивка
|
|
||||||
bool isNewFirmware = FirmwareLoader_IsUpdateAndMainAreDifferent(&env->FIRMWARE_HVAC);
|
|
||||||
|
|
||||||
// !isMain - Не совпадает crc основной прошивки isNewFirmware - есть рабочая прошивка в обновлении, которая отличается от основной (main)
|
|
||||||
if ((!isMain) || (isNewFirmware)) {
|
|
||||||
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Update detected")
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Starting the update process")
|
|
||||||
|
|
||||||
// Обновление
|
|
||||||
// FirmwareLoader_CopyUpdateToMain(&env->FIRMWARE_HVAC);
|
|
||||||
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Update complete")
|
|
||||||
|
|
||||||
// Проверка crc
|
|
||||||
isMain = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.main);
|
|
||||||
|
|
||||||
if (isMain) {
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware (after update): Checksum is correct")
|
|
||||||
} else {
|
|
||||||
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware (after update): Checksum is not correct")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
bool isUpdate = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.update);
|
||||||
|
|
||||||
|
if (isUpdate) {
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Recovery firmware: Checksum is correct")
|
||||||
|
} else {
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Recovery firmware: Checksum is not correct")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Есть обновление
|
||||||
|
if (isUpdate) {
|
||||||
|
|
||||||
|
// Если текущая прошивка (isMain) неисправна (не загружена) или в секции обновления находится отличная от текущей прошивка
|
||||||
|
bool isNewFirmware = FirmwareLoader_IsUpdateAndMainAreDifferent(&env->FIRMWARE_HVAC);
|
||||||
|
|
||||||
|
// !isMain - Не совпадает crc основной прошивки isNewFirmware - есть рабочая прошивка в обновлении, которая отличается от основной (main)
|
||||||
|
if ((!isMain) || (isNewFirmware)) {
|
||||||
|
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Update detected")
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Starting the update process")
|
||||||
|
|
||||||
|
// Обновление
|
||||||
|
// FirmwareLoader_CopyUpdateToMain(&env->FIRMWARE_HVAC);
|
||||||
|
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Update complete")
|
||||||
|
|
||||||
|
// Проверка crc
|
||||||
|
isMain = FirmwareLoader_CheckBlock(&env->FIRMWARE_HVAC, &env->FIRMWARE_HVAC.main);
|
||||||
|
|
||||||
|
if (isMain) {
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Main firmware (after update): Checksum is correct")
|
||||||
|
} else {
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN,
|
||||||
|
"Main firmware (after update): Checksum is not correct")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
SystemDelayMs(10);
|
SystemDelayMs(10);
|
||||||
|
|
||||||
BootJumpToAddress(FIRMWARE_MAIN_ADDR);
|
BootJumpToAddress(FIRMWARE_MAIN_ADDR);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Bootloader error")
|
||||||
SystemDelayMs(1000);
|
SystemDelayMs(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -171,6 +178,7 @@ int main(void) {
|
||||||
|
|
||||||
NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
|
NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
|
||||||
|
|
||||||
|
|
||||||
osKernelInitialize();
|
osKernelInitialize();
|
||||||
|
|
||||||
tBootMma *env = &MAIN_BOOT_ENV;
|
tBootMma *env = &MAIN_BOOT_ENV;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue