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

DFU SoftDevice s140 from 6.1.1 to 7.0.1

Is it possible to update from 6.1.1

MEMORY
{
  FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x52000

To 7.0.1?

MEMORY
{
  FLASH (rx) : ORIGIN = 0x27000, LENGTH = 0x51000

New softdevice does not fit if linker file FLASH address starts at 0x26000, that's why increase to 0x27000.

But I am afraid changes to linker file are not possible during OTA update and I am stuck with the 6.1.1 SD.

Am I wrong?

  • HI Roman, 

    its fully possible to update from the S140 v6.1.1 to the S140 v7.0.1, but you will have to update the application as well as the bootloader so that they are compatible with the new SoftDevice. Otherwise you may "brick" your device if the bootloader or application uses the incorrect SoftDevice API.  So you need to do the following:

    1. Re-compile your application to use the S140 v7.0.1 headers and adjust the linker script to accomodate the larger SoftDevice 
    2. Re-compile your bootloader to use the S140 v7.0.1 header or use the bootloader from SDK v16.x.x
    3. Create a combined SoftDevice( S140 v7.0.1), Bootloader( from step 2) and Application image( from step 1),  using nrfutil.

    Best regards

    Bjørn

  • Thank you Bjørn!

    I was able to perform DFU according to your instructions. I was not sure if this was possible and worth the effor, since I noticed that application FLASH start address has changed to 0x27000 with new SoftDevice. But apparently this is OK. I was not sure because I know that bootloader start address can not be changed, I assumed the same applies to application (it doesn't).

  • Happy to hear that you were able to successfully perform a DFU. You are correct, the bootloader start address cannot change as this start address is "hardcoded" in the UICR and/or in the MBR when you flash the original bootloader and is used by the MBR to forward interrupts to the bootloader.  This is not the case with the application as the SoftDevice will forward interrupts to the application as long as the application is placed directly after the SoftDevice.

    Best regards

    Bjørn

Related