This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Forwarding Interrupts to application without SD use

Hello,

I have an application that uses the Soft-Device. That application want to start a SPI-Bootloader. That SPI-Bootloader isn't the only bootloader on the device, so I just want the application to forward all interrupts to the SPI-Bootloader. The SPI-bootloader doesn't make use of the softdevice.

this is the code, that tries to start the bootloader:

void start_bootloader_without_sd( std::uint32_t start_address )
{
    sd_softdevice_disable();

    // set vector table of master bootrecord direct to the bootloaders start address
    sd_mbr_command_t command = { SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET };
    command.params.base_set.address = start_address;

    const auto rc = sd_mbr_command( &command );
    static_cast< void >( rc );
    assert( rc != NRF_SUCCESS );

    NVIC_SystemReset();
}

After the final reset, the MBR does not forward the reset handler to the SPI bootloader. When I try to debug the startup, it looks like the MBR tries to start an application at 0xffffffff. In addion, I observed, that the RAM is inaccessable from the debugger.

According to the documentation, I would say, the code above should work, but it doesn't. Any idea, why it is not working as expected?

Softdevice is S310, version is 2.0.

kind regards,

Torsten

Related