nRF51 SDK
|
The DFU Bootloader project uses a memory layout similar to the of the nRF51822 Bluetooth examples, except that the memory region from 0x3C800-0x40000 has been reserved for the DFU Bootloader, and application data is written below the bootloader instead of at the end of the flash.
The memory layout can be seen in Figure 1.
The table below lists the memory ranges when using an S110 SoftDevice. The SoftDevice will be using region 1 memory spanning from address 0x0 to 0x14000. Region 1 will contain the application and bootloader.
Memory Range | Usage |
---|---|
0x0003C800 - 0x00040000 | Code Region 1: DFU Bootloader and data |
0x00014000 - 0x0003C800 | Code Region 1: Application Code (BANK 0) and data |
0x00000000 - 0x00014000 | Code Region 0: SoftDevice |
Code region 1 size will depend on the size of the SoftDevice used. For this example, with a 256KB version of the nrf51 the stack uses 80KB leaving 176KB to the bootloader and the application.
The region is then divided into 3 sub-regions:
The bootloader projects in the SDK has reserved 32KB for the bootloader and the bootloader settings data. The memory reservation can easily be modified in the project files to match the final size of the bootloader. For the example bootloader provided, the application will get a total of 176KB - 32KB = 144KB. The available memory for an application would be 176KB - application save data.
The Application Data size is default set to 0x0000, meaning that all Application Data will be erased during a Device Firmware Update procedure. This behaviour can be configured by the developer to ensure persistence of the Application Data by specifying:
to a different value. Specifying DFU_APP_DATA_RESERVED
to 0x1000 will ensure that 4 pages of Application Data are preserved during the DFU procedure.
When using Full Memory Layout the bootloader will erase the whole application region (BANK 0) when entering the bootloader mode. The application save data will not be modified. During DFU data transfer each word received by the bootloader will be written to BANK 0 without any buffering.
When DFU validation is performed the written flash in BANK 0 will be validated and the bootloader will write its settings data and perform a system reset.
During start-up the bootloader will read its settings, to see if chip contains a valid application image. If an invalid image was received, the bootloader will start the update sequence as if has never been done. On the other hand, if an valid image was received, it will start the application located in BANK 0.
The steps of the update procedure are illustrated in the figures below.
Detailed description | |
---|---|
Figure 2 | Before the Bootloader initializes, the active Application resides in Bank 0. |
Figure 3 | Upon receiving the Start packet the Bootloader erases Bank 0. If DFU_APP_DATA_RESERVED is set, Application Data will be preserved. |
Figure 4 | During transfer the received packets of the new Application are written into Bank 0. It is assumed that the packets are transmitted in sequential order. |
Figure 5 | After the copy procedure is complete, the new Application can be activated. If activation is successful, the system can be reset with running the new Application in Bank 0. If the new Application cannot be activated, the Bootloader will be started after reset until a working image is received. |
Figure 6 | If Application Data from the old Application was preserved, the new Application will append any new data written. |