This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Bootloader hardfault

Hi,

Im trying to use BLE DFU Bootloader from examples. I loaded SD8 and then bootloader via nrfStudio (dont have a valid app flashed), but I cant see the device from Android app. I decided to do some debugging via Keil. I recompiled Bootloader with no optimisation and moved bootloader address to 0x3A000.

If I try to debug in Keil it doesnt stop at main, but if i manually press stop it gets into hardfault: image description

Memory settings: image description

Compilation settings: image description

Im using Revision 3 chip. What do I do wrong?

app.zip

hex

Bootloader

Bootloader hex O3

bootloader package without BANK_VALID_APP

Bootloader HEX without BANK_VALID_APP

Memory map according to NRF Studio: Memory map

Bootloader optimisation Level 2 gets stuck on run: image description

Image size > 0x6400

Parents
  • Your application is 70kB and not 47kB. This means that you need at least 140kB of application flash space( two banks of 70kB each) when using a Dual Bank Bootloader. If you use the default ROM settings for the bootloader, i.e. the bootloader starts at 0x3C000 then you'll have

    0x3C000 - 0x18000 = 0x24000( 144kB left) 
    

    However, extending the bootloader section in order to debug the bootloader you are left with

    0x3A000 - 0x18000 = 0x22000( 136kB left) 
    

    which is not enough and you will get the Data Size Exceeds Limiterror

  • NRF_ERROR_DATA_SIZE is returned at line 334, 339, and 415 in dfu_single_bank.c . Start a Debug Session in the bootloader project, set a breakpoint at each of these locations and perform a firmware update.

    When I performed a DFU, I got caught at the breakpoint at line 334:

     if (m_start_packet.bl_image_size > DFU_BL_IMAGE_MAX_SIZE)
        {
            return NRF_ERROR_DATA_SIZE;
        }
    
Reply
  • NRF_ERROR_DATA_SIZE is returned at line 334, 339, and 415 in dfu_single_bank.c . Start a Debug Session in the bootloader project, set a breakpoint at each of these locations and perform a firmware update.

    When I performed a DFU, I got caught at the breakpoint at line 334:

     if (m_start_packet.bl_image_size > DFU_BL_IMAGE_MAX_SIZE)
        {
            return NRF_ERROR_DATA_SIZE;
        }
    
Children
No Data
Related