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

Is there a checksum embedded in the S110?

Hello everyone,

I haven't read anything in the official documentation about it, but I was wondering if the S110 has an embedded checksum that I can use to verify its integrity at runtime.

I already do something similar for my application and it would be useful to extend the concept to the SoftDevice as well.

Thanks!

Parents
  • Hi Moloch,

    We don't have an embedded checksum for the softdevice. You need to do it manually.

    The softdevice size may change when doing DFU, so it may not be a good idea to store it at the end of the softdevice. Same with storing at the end of master boot record as Clem suggest, because when the softdevice is updated, you need to update the checksum, and then will have to erase 1 page in the MBR that can cause trouble. I would suggest to store the checksum in the bootloader setting page 0x3FC00, it will not be overwrite when doing DFU.

    You can also protect the softdevice from being modified by application by ticking the check box "Enable Softdevice protection" or write to CLENR0 in the UICR. But note that, by doing that, the size of the softdevice can not be changed.

  • I do the reset, but pass a flag via GPREG. I store the state for the swap in uninitialized SRAM (so it doesn't get cleared by my start code) and protect it with a CRC. Before doing the swap it checks the embedded CRCs.

    The only side effect is my current implementation of the swap can't survive a power failure during a swap like it is claimed the nordic dfu code can. I suspect that claim is dubious at best. My bootloader won't let you do an upgrade if the battery isn't >50% and there is no power switch or way to reset the device. I don't have the flash to do dual banks, but I did consider implementing a non-softdevice pre-bootloader that could pull a clean image off the external SPI flash, but decided it wasn't worth the complexity.

Reply
  • I do the reset, but pass a flag via GPREG. I store the state for the swap in uninitialized SRAM (so it doesn't get cleared by my start code) and protect it with a CRC. Before doing the swap it checks the embedded CRCs.

    The only side effect is my current implementation of the swap can't survive a power failure during a swap like it is claimed the nordic dfu code can. I suspect that claim is dubious at best. My bootloader won't let you do an upgrade if the battery isn't >50% and there is no power switch or way to reset the device. I don't have the flash to do dual banks, but I did consider implementing a non-softdevice pre-bootloader that could pull a clean image off the external SPI flash, but decided it wasn't worth the complexity.

Children
No Data
Related