uf2 does not depend on softdevice
This commit is contained in:
parent
b1f3772364
commit
e946aabd6d
@ -182,14 +182,26 @@ bool bootloader_app_is_valid(uint32_t app_addr)
|
|||||||
|
|
||||||
static void bootloader_settings_save(bootloader_settings_t * p_settings)
|
static void bootloader_settings_save(bootloader_settings_t * p_settings)
|
||||||
{
|
{
|
||||||
|
uint8_t sd_en = false;
|
||||||
|
sd_softdevice_is_enabled(&sd_en);
|
||||||
|
|
||||||
|
if ( sd_en )
|
||||||
|
{
|
||||||
uint32_t err_code = pstorage_clear(&m_bootsettings_handle, sizeof(bootloader_settings_t));
|
uint32_t err_code = pstorage_clear(&m_bootsettings_handle, sizeof(bootloader_settings_t));
|
||||||
APP_ERROR_CHECK(err_code);
|
APP_ERROR_CHECK(err_code);
|
||||||
|
|
||||||
err_code = pstorage_store(&m_bootsettings_handle,
|
err_code = pstorage_store(&m_bootsettings_handle,
|
||||||
(uint8_t *)p_settings,
|
(uint8_t *) p_settings,
|
||||||
sizeof(bootloader_settings_t),
|
sizeof(bootloader_settings_t),
|
||||||
0);
|
0);
|
||||||
APP_ERROR_CHECK(err_code);
|
APP_ERROR_CHECK(err_code);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flash_write(BOOTLOADER_SETTINGS_ADDRESS, p_settings, sizeof(bootloader_settings_t));
|
||||||
|
flash_flush();
|
||||||
|
m_update_status = BOOTLOADER_COMPLETE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -373,13 +385,11 @@ void bootloader_app_start(uint32_t app_addr)
|
|||||||
{
|
{
|
||||||
// If the applications CRC has been checked and passed, the magic number will be written and we
|
// If the applications CRC has been checked and passed, the magic number will be written and we
|
||||||
// can start the application safely.
|
// can start the application safely.
|
||||||
uint32_t err_code = sd_softdevice_disable();
|
APP_ERROR_CHECK ( sd_softdevice_disable() );
|
||||||
APP_ERROR_CHECK(err_code);
|
|
||||||
|
|
||||||
interrupts_disable();
|
interrupts_disable();
|
||||||
|
|
||||||
err_code = sd_softdevice_vector_table_base_set(CODE_REGION_1_START);
|
APP_ERROR_CHECK( sd_softdevice_vector_table_base_set(CODE_REGION_1_START) );
|
||||||
APP_ERROR_CHECK(err_code);
|
|
||||||
|
|
||||||
bootloader_util_app_start(CODE_REGION_1_START);
|
bootloader_util_app_start(CODE_REGION_1_START);
|
||||||
}
|
}
|
||||||
|
31
src/main.c
31
src/main.c
@ -164,7 +164,7 @@ static void blinky_handler(void)
|
|||||||
led_control(LED_BLUE, state);
|
led_control(LED_BLUE, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Feed all Watchdog just in case application enable it (WDT last through a hump from application to bootloader)
|
// Feed all Watchdog just in case application enable it (WDT last through a jump from application to bootloader)
|
||||||
if ( nrf_wdt_started() )
|
if ( nrf_wdt_started() )
|
||||||
{
|
{
|
||||||
for (uint8_t i=0; i<8; i++) nrf_wdt_reload_request_set(i);
|
for (uint8_t i=0; i<8; i++) nrf_wdt_reload_request_set(i);
|
||||||
@ -223,6 +223,11 @@ void board_teardown(void)
|
|||||||
usb_teardown();
|
usb_teardown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void softdev_mbr_init(void)
|
||||||
|
{
|
||||||
|
sd_mbr_command_t com = { .command = SD_MBR_COMMAND_INIT_SD };
|
||||||
|
sd_mbr_command(&com);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the SoftDevice and the BLE event interrupt.
|
* Initializes the SoftDevice and the BLE event interrupt.
|
||||||
@ -232,11 +237,7 @@ void board_teardown(void)
|
|||||||
*/
|
*/
|
||||||
uint32_t softdev_init(bool init_softdevice)
|
uint32_t softdev_init(bool init_softdevice)
|
||||||
{
|
{
|
||||||
if (init_softdevice)
|
if (init_softdevice) softdev_mbr_init();
|
||||||
{
|
|
||||||
sd_mbr_command_t com = { .command = SD_MBR_COMMAND_INIT_SD };
|
|
||||||
APP_ERROR_CHECK( sd_mbr_command(&com) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// map vector table to bootloader address
|
// map vector table to bootloader address
|
||||||
APP_ERROR_CHECK( sd_softdevice_vector_table_base_set(BOOTLOADER_REGION_START) );
|
APP_ERROR_CHECK( sd_softdevice_vector_table_base_set(BOOTLOADER_REGION_START) );
|
||||||
@ -308,7 +309,7 @@ void softdev_teardown(void)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
// SD is already Initialized in case of BOOTLOADER_DFU_OTA_MAGIC
|
// SD is already Initialized in case of BOOTLOADER_DFU_OTA_MAGIC
|
||||||
bool const sd_inited = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC);
|
bool sd_inited = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC);
|
||||||
|
|
||||||
// Start Bootloader in BLE OTA mode
|
// Start Bootloader in BLE OTA mode
|
||||||
_ota_update = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC) ||
|
_ota_update = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC) ||
|
||||||
@ -333,15 +334,14 @@ int main(void)
|
|||||||
{
|
{
|
||||||
APP_ERROR_CHECK( bootloader_dfu_sd_update_continue() );
|
APP_ERROR_CHECK( bootloader_dfu_sd_update_continue() );
|
||||||
softdev_init(!sd_inited);
|
softdev_init(!sd_inited);
|
||||||
|
sd_inited = true;
|
||||||
APP_ERROR_CHECK( bootloader_dfu_sd_update_finalize() );
|
APP_ERROR_CHECK( bootloader_dfu_sd_update_finalize() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
softdev_init(!sd_inited);
|
// softdev_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_init();
|
|
||||||
|
|
||||||
/*------------- Determine DFU mode (Serial, OTA, FRESET or normal) -------------*/
|
/*------------- Determine DFU mode (Serial, OTA, FRESET or normal) -------------*/
|
||||||
// DFU button pressed
|
// DFU button pressed
|
||||||
dfu_start = dfu_start || button_pressed(BUTTON_DFU);
|
dfu_start = dfu_start || button_pressed(BUTTON_DFU);
|
||||||
@ -352,7 +352,13 @@ int main(void)
|
|||||||
if ( dfu_start || !bootloader_app_is_valid(DFU_BANK_0_REGION_START) )
|
if ( dfu_start || !bootloader_app_is_valid(DFU_BANK_0_REGION_START) )
|
||||||
{
|
{
|
||||||
// Enable BLE if in OTA
|
// Enable BLE if in OTA
|
||||||
// if ( _ota_update ) softdev_ble_enable();
|
if ( _ota_update )
|
||||||
|
{
|
||||||
|
softdev_init(!sd_inited);
|
||||||
|
sd_inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
usb_init();
|
||||||
|
|
||||||
// Initiate an update of the firmware.
|
// Initiate an update of the firmware.
|
||||||
APP_ERROR_CHECK( bootloader_dfu_start(_ota_update, 0) );
|
APP_ERROR_CHECK( bootloader_dfu_start(_ota_update, 0) );
|
||||||
@ -381,6 +387,9 @@ int main(void)
|
|||||||
|
|
||||||
if (bootloader_app_is_valid(DFU_BANK_0_REGION_START) && !bootloader_dfu_sd_in_progress())
|
if (bootloader_app_is_valid(DFU_BANK_0_REGION_START) && !bootloader_dfu_sd_in_progress())
|
||||||
{
|
{
|
||||||
|
// MBR must be init before start application
|
||||||
|
if ( !sd_inited ) softdev_mbr_init();
|
||||||
|
|
||||||
// Select a bank region to use as application region.
|
// Select a bank region to use as application region.
|
||||||
// @note: Only applications running from DFU_BANK_0_REGION_START is supported.
|
// @note: Only applications running from DFU_BANK_0_REGION_START is supported.
|
||||||
bootloader_app_start(DFU_BANK_0_REGION_START);
|
bootloader_app_start(DFU_BANK_0_REGION_START);
|
||||||
|
Loading…
Reference in New Issue
Block a user