I have implemented a boot loader for DFU based on the sdk v6.1 DFU project. After a when an upgrade is triggered within the application soft reset by the application:
err_code = sd_power_gpregret_clr(0xff);
APP_ERROR_CHECK(err_code);
err_code = sd_power_gpregret_set(BOOTLOADER_DFU_START);
APP_ERROR_CHECK(err_code);
NVIC_SystemReset();
The boot loader, which is basically a copy of the sdk example, then within ble_stack_init() calls sd_softdevice_vector_table_base_set() and hangs in the SVC_Handler callback in arm_startup_nrf51.s
When cold booting the device, the boot loader runs flawless.
Am I missing some step in the reset procedure?
Should I have a special case in the boot loader to detect soft reset?