diff --git a/controller/fw/bootloader/include/flash.h b/controller/fw/bootloader/include/flash.h index 32255f0..b4b882a 100644 --- a/controller/fw/bootloader/include/flash.h +++ b/controller/fw/bootloader/include/flash.h @@ -18,11 +18,13 @@ enum { pid_p = 1, pid_i, pid_d, + firmw, foc_id, angl, vel }; + /* for saved in FLASH float data*/ union{ uint32_t i; @@ -33,14 +35,14 @@ union{ // Flash sectors for STM32F407 #define APP_ADDRESS 0x08008000 // Адрес основной прошивки -#define FLAG_BOOT 0x08060000 // Адрес хранения флага для обновления прошивки +// #define FLAG_BOOT 0x08060000 // Адрес хранения флага для обновления прошивки #define UPDATE_FLAG 0xDEADBEEF // Уникальное 32-битное значение #define BOOT_CAN_ID 0x01 // CAN ID бутлоадера #define BOOT_CAN_END 0x02 // CAN ID завершения передачи #define DATA_CAN_ID 0x03 // CAN ID данных #define ACK_CAN_ID 0x05 // CAN ID подтверждения #define MAX_FW_SIZE 0x3FFF // Макс. размер прошивки (256KB) -#define PARAM_COUNT 4 // count data in flash +#define PARAM_COUNT 5 // count data in flash #define SECTOR_6 0x08040000 // 128KB #define SECTOR_6_END (SECTOR_6 + 128 * 1024) // sector 6 end // Flash keys for unlocking flash memory diff --git a/controller/fw/bootloader/src/main.cpp b/controller/fw/bootloader/src/main.cpp index 74e48be..4782660 100644 --- a/controller/fw/bootloader/src/main.cpp +++ b/controller/fw/bootloader/src/main.cpp @@ -49,6 +49,8 @@ void setup() { // // Проверка флага обновления // erase_sector(7); // flash_program_word(FLAG_BOOT,0xDEADBEEF,BYTE32); + // flash_record = load_params(); + // write_param(firmw,UPDATE_FLAG); flash_record = load_params(); // write_param(addr_id,33); // flash_record = load_params(); @@ -56,7 +58,7 @@ void setup() { мы сохраняем как флаг, так и аддрес устройства к которому будет обращатлься во время прошивки */ - if(*(volatile uint32_t*)(FLAG_BOOT) == UPDATE_FLAG) { + if(flash_record[firmw].value == UPDATE_FLAG) { fw_update = true; for(int i = 0; i < 5;i++){ GPIOC->ODR ^= GPIO_ODR_OD10; // Индикация обновления @@ -103,10 +105,13 @@ void process_can_message(const CAN_message_t &msg) { case BOOT_CAN_END: // Завершение передачи if(verify_firmware()) { send_ack(0xAA); - erase_sector(7); // Сброс флага + HAL_Delay(500); + // erase_sector(7); // Сброс флага + write_param(firmw,0); //reset flasg NVIC_SystemReset(); } else { send_ack(0x55); + erase_flash_pages(); //if error } break; }