Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years ago.
MBED BOOTLOADER PROBLEM FOR STM32F401RE NUCLEO
Hello All,
I am a long time user of mbed. With the intruduction of FlashIAP library and mbed_start_application() method i will try to wirte a bootloader.
Requests: Bootloader will be placed on Sector 0 (0x08000000) of F401; Default application will be placed on Sector 6 (0x0804000) of F401; New application (updated firmware) will be placed on Sector 7 of F401;
Methodolgy is...
Run f401...start bootlader...check eeprom...if any update available write to sector 7 (since default is in sector 6)..jumpt to sector 7 program....if any command received from usart reset board and start bootloader..... write new firmware to sector 6.....jumpt to sector 6...
My problem is i can not jump to sector 6 or sector 7 with below code (it is simplified) (I2C, uart, etc initialized for communication in bootloader code). I am preparing and compiling my code with online compiler;
#include "mbed.h" // UART and I2C satrted.. // bla bla // NEW FIRMWARE CANNOT FOUND. START FROM OLD FIRMWARE LOCATION if (eeprom_read(CURRENT_FIRMWARE_LOCATION_ADDRESS) != 0x07) { mbed_start_application(STM32F401_FLASH_SECTOR_6); // 0x08040000 } else if (eeprom_read(CURRENT_FIRMWARE_LOCATION_ADDRESS) == 0x07) { mbed_start_application(STM32F401_FLASH_SECTOR_7); // 0x08060000 }
The next try is:
if (eeprom_read(CURRENT_FIRMWARE_LOCATION_ADDRESS) != 0x07) { SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; __disable_irq(); //SYSCFG->MEMRMP = 0x01; SysMemBootJump = (void (*)(void)) (*((uint32_t *)(0x08040000 + 4))); __set_MSP(*(uint32_t*) 0x08040000); SysMemBootJump(); } else if (eeprom_read(CURRENT_FIRMWARE_LOCATION_ADDRESS) == 0x07) { SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; __disable_irq(); //SYSCFG->MEMRMP = 0x01; SysMemBootJump = (void (*)(void)) (*((uint32_t *)(0x08060000 + 4))); __set_MSP(*(uint32_t*) 0x08060000); SysMemBootJump(); //mbed_start_application(STM32F401_FLASH_SECTOR_7); }
Any help appreciated...
Regards...
KM