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

Firmware on custom board (Application + Bootloader)

I've reached a critical point in the firmware development process where I need to start considering integrating a bootloader with the application code.

I have a custom board with an nrf52840 SoC. I have created a new bsp for the board and I'm able to execute code and run debugging on the board using Segger Embedded Studio. At some point, we'll have to integrate a bootloader in order to be able to create a release image.

Based on the requirements at my company, it has been decided to implement the application in two phases:

  • Phase 1 will include the application and bootloader
  • Phase 2 will include the application, bootloader and softdevice, once the BLE-related requirements have been locked.

I wish to implement phase 1 and as this is critical, I do not wish to get fragmented information.

My questions

  1.  Are there any ready-made bootloaders I can use?
  2. How do I go about combining the application and bootloader (without softdevice)
  3. How do I fragment the flash memory so that I can have the application, bootloader, and eventually softdevice?
  4. Are there any detailed tutorials explaining the integration processes?
  5. Eventually we'll implement FOTA over Bluetooth. Anything I should be specially aware of here?

Any link to documentation/tutorials will be very much appreciated. I apologize in advance if the questions seem a bit broad. I'm a bit new to this process of integrating application code and bootloaders.

Thanks,

/Tim

  • The conflicts are probably because you try to merge MBR and the softdevice. The MBR is already included in the Softdevice, so you don't need both.

    Try to merge the softdevice, application and bootloader (+Settings). There shouldn't be any conflicting areas there.

    BR,

    Edvin

  • Alright, so I tried merging in this order:

    1. Bootloader and bootloader settings => OK
    2. Merged bootloader and Application => OK
    3. Application (+Bootloader +Settings) and Softdevice => FAIL

    1. Do I have to change the start address of any of the components, or is this handled by the mergehex utility?

    2. Is the merge order relevant?

    3. My application currently doesn't include the SoftDevice. For now it's a completely "bluetooth-less" application. Could this be an issue?

    Here are my hex files:

    app.hex

    7043.bootloader_settings.hex

    secure_ble_s140_bootloader.hex

    s140_nrf52_6.1.0_softdevice.hex

    Thanks

    Tim

  • Hello Tim,

    Your app.hex looks a bit strange. 

    Does your app use the softdevice? 

    The app.hex, does that come from when you compiled the application, or did you do a flash dump after programming it? The reason I ask is that when I watch your app.hex with nRF Connect -> Programmer it looks like this:

    So the application has not put aside any space for the softdevice, which should be on the bottom/start. In addition, there is something in the top/end of the flash. what is that?

    Does your application work if you program only app.hex and softdevice? It probably will not, because it doesn't have space for the flash, but what I mean is that it will not work to merge them if you can't flash both simultaneously.

    So basically, you need to make your application work while you set aside space for the softdevice. Please refer to one of the ble_peripheral examples and the flash settings. If you are unsure on how to do that, please let me know what IDE you use, and I can give you some pointers.

    BR,

    Edvin

  • Well I think I almost figured it out. This  tutorial was super helpful:

    https://devzone.nordicsemi.com/nordic/short-range-guides/b/getting-started/posts/adjustment-of-ram-and-flash-memory

    I had to change the start address of the application and integrate the softdevice into my application.

    I managed to merge all files successfully, but the application still does not start. I used nRF Connect to watch my new image like you illustrated above and it looks as expected, based on the memory map described here: https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v15.2.0/lib_bootloader.html

    app_production_image.hex

    (See the attached hex file).

    Right now the softdevice is integrated in the application, but not initialized (as I mentioned in the beginning, we are not implementing any BLE features for now).

    • Any ideas on why the application still does not start?

    • Here are the contents of the bootloader settings:

    Bootloader DFU Settings:
    * File:                     ns_bootloader_setting.hex
    * Family:                   NRF52840
    * Start Address:            0x000FF000
    * CRC:                      0x48172AA9
    * Settings Version:         0x00000001 (1)
    * App Version:              0x00000000 (0)
    * Bootloader Version:       0x00000000 (0)
    * Bank Layout:              0x00000000
    * Current Bank:             0x00000000
    * Application Size:         0x0001F688 (128648 bytes)
    * Application CRC:          0x05F5197F
    * Bank0 Bank Code:          0x00000001
    * Softdevice Size:          0x00000000 (0 bytes)
    * Boot Validation CRC:      0x00000000
    * SD Boot Validation Type:  0x00000000 (0)
    * App Boot Validation Type: 0x00000000 (0)
    

    It says the sSoftDevice size is 0 bytes! I find that a bit odd. What do you think?

    Thanks

    Tim

  • Tim Adu said:
    It says the sSoftDevice size is 0 bytes! I find that a bit odd. What do you think?

     That should be fine. It says when I generate the bl_settings here as well.

    Does the application start if you flash only the bootloader + SD, and then you upload the application via DFU using nRF Connect?

    BR,

    Edvin

Related