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

How to make sure that the Bootloader starts in DFU mode if a valid app is not present?

Hi,

I am trying to implement a Single Bank DFU over Bluetooth for my nRF51822 (256KB / 16KB RAM) using SDK v7.1 and Softdevice 110. I am using GCC to compile the bootloader and in order to switch from dual bank (which I was doing previously before my application size did not allow it anymore) to single bank mode, I changed from dfu_dual_bank.c to dfu_single_bank.c in the Makefile. The complied bootloader works fine as I can upload new firmware onto the chip using FOTA. But, if however the process is interrupted, the chip bricks and has to be flashed again.

I figured out that upon load, the bootloader checks if the app present in the chip is valid by comparing its crc16 checksum with the checksum saved in the bootloader settings. I believe that here lies my problem because if this check failed after an unsuccessful FOTA attempt, the chip should remain in DFU mode but that is not the case. Can anybody shed some light into where the problem may lie?

Any response is much appreciated.

-ashakya

Parents
  • Hi Ashkya,

    I guess the issue happens created because of the port from dual bank to single bank. When we do dual bank, we will not set the application as INVALID when we are receiving the image. This way when there is any issue when transferring the image, we can always revert to the original application. We set it right before we erase the application bank to swap with the new image.

    Where in your code you erase bank 0 to receive the new image ?

    If you have a look here at line 142 you can see when I erase bank 0 (pstorage_raw_clear) and then write to bootloader setting to mark that the application is invalid (bank0 =BANK_INVALID_APP) with the call bootloader_dfu_update_process(update_status); at line 157

Reply
  • Hi Ashkya,

    I guess the issue happens created because of the port from dual bank to single bank. When we do dual bank, we will not set the application as INVALID when we are receiving the image. This way when there is any issue when transferring the image, we can always revert to the original application. We set it right before we erase the application bank to swap with the new image.

    Where in your code you erase bank 0 to receive the new image ?

    If you have a look here at line 142 you can see when I erase bank 0 (pstorage_raw_clear) and then write to bootloader setting to mark that the application is invalid (bank0 =BANK_INVALID_APP) with the call bootloader_dfu_update_process(update_status); at line 157

Children
No Data
Related