Is it possible to monitor whether dual page updating is taking place?

So as far as I can make out, when I load a new application into the flash, the NRF52 will attempt to first load a secondary memory space and if successful, it will then replace the original image with the new one. If it is not possible to do this, it will simply overwrite the existing image.

Obviously, the first method is far more error-resilient than the other, even more so once we get to the state of wishing to replace the SD or the bootloader.

What I have not been able to determine is: How do I know which method the upgrading process used? I know it will automatically select the right one, but it would be nice to know which is happening, for two purposes: If something blows up, we know where we were and what the state of the chip is now. And also: If we go from using dual to single page upgrading, we should consider whether what we have added is worth the increased risk.

Thank you,

Dan

  • Hi,

    I assume that you use the latest version of nRF5 SDK (15.0.0).

    SoftDevice and bootloader updates will always use dual bank.

    You can force dual bank updates for the application with the NRF_DFU_FORCE_DUAL_BANK_APP_UPDATES configuration.

    If you want to leave single bank application update as a fallback, in the event of failure you will be left with bootloader and SoftDevice still present. The bootloader will see that there is no valid application and enter DFU mode, so that you can connect to do a (this time hopefully successful) applicaiton update.

    If you want to know what update the bootloader performes, then you can search for the place in the bootloader code where dual/single bank is decided and either use the log messages that are already there or keep the value some other way. (Hint: Search for NRF_DFU_FORCE_DUAL_BANK_APP_UPDATES in the bootloader source, and look at the function to which it is passed.)

    For more detailed information, see Dual-bank and single-bank updates in the SDK documentation.

    Regards,
    Terje