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

SDK-8.1.0 bootloader does not flash

When I open the project dfu_dual_bank_ble_s110_pca10028 and configure it for nRF51822, it compiles fine, but flashing does not succeed. I get errors:

No Algorithm found for: 10001014H - 10001017H
Partial Erase Done (areas with no algorithms skipped!)
No Algorithm found for: 10001014H - 10001017H
Partial Programming Done (areas with no algorithms skipped!)

And the bootloader does not start. What could be wrong there? At IROM and IRAM fields I put the following:

IROM1: 0x3C000 0x3C00 (Startup)
IRAM1: 0x20002C00 0x5380
IRAM2: 0x20007F80 0x80  (No Init)
Parents
  • Start address of the bootloader must be set in the UICR.BOOTLOADERADDR register in order for the bootloader to be executed on startup (Master Boot Record (MBR) and SoftDevice reset behavior). However, the Jlink driver is not able to write to this register directly, hence the "no alghoritm" warning. Instead you should use nrjprog to program the bootlaoder for this register to be set as well, see programming the DFU bootloader here.

    Note, a limitation was introduced in the newer releases of nrjprog making it not possible to call both --reset and --program from the same instance. So you need to remove the --reset argument from the command line arguments, also mentioned in this thread.

  • Yes, I struggled with that thing whole last week and was eventually very frustrated. The needed information is very fragmented, some important things such as adding 0x64 for S110 8.0 into nrfutil command line I found just with a good luck. Also, my bootloader is still jamming after it enters there from application. I made a this kind of hack into the bootloader's main.c, so I can upload the application, although two upload tries is now needed from nRFTools:

    bool app_reset = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_START);
    bool app_reset2 = (NRF_POWER->GPREGRET == ~BOOTLOADER_DFU_START);
    
    if (app_reset)
    {
        NRF_POWER->GPREGRET = ~BOOTLOADER_DFU_START;
    	NVIC_SystemReset();
    }
    else if (app_reset2)
    {
        NRF_POWER->GPREGRET = 0;
    }
    

    Plus a few of other changes needed to support "app_reset2". At least it works now somehow :)

Reply
  • Yes, I struggled with that thing whole last week and was eventually very frustrated. The needed information is very fragmented, some important things such as adding 0x64 for S110 8.0 into nrfutil command line I found just with a good luck. Also, my bootloader is still jamming after it enters there from application. I made a this kind of hack into the bootloader's main.c, so I can upload the application, although two upload tries is now needed from nRFTools:

    bool app_reset = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_START);
    bool app_reset2 = (NRF_POWER->GPREGRET == ~BOOTLOADER_DFU_START);
    
    if (app_reset)
    {
        NRF_POWER->GPREGRET = ~BOOTLOADER_DFU_START;
    	NVIC_SystemReset();
    }
    else if (app_reset2)
    {
        NRF_POWER->GPREGRET = 0;
    }
    

    Plus a few of other changes needed to support "app_reset2". At least it works now somehow :)

Children
No Data
Related