Fix bootloader
This commit is contained in:
parent
c0c42339f1
commit
456b4a8b70
2 changed files with 11 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue