Patched version of nrf51822 FOTA compatible driver, with GPTIO disabled, as it clashed with the mbed definitions...

Fork of nRF51822 by Nordic Semiconductor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers dfu_types.h Source File

dfu_types.h

Go to the documentation of this file.
00001 /* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved.
00002  *
00003  * The information contained herein is property of Nordic Semiconductor ASA.
00004  * Terms and conditions of usage are described in detail in NORDIC
00005  * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
00006  *
00007  * Licensees are granted free, non-transferable use of the information. NO
00008  * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
00009  * the file.
00010  *
00011  */
00012 
00013 /**@file
00014  *
00015  * @defgroup nrf_dfu_types Types and definitions.
00016  * @{
00017  *
00018  * @ingroup nrf_dfu
00019  *
00020  * @brief Device Firmware Update module type and definitions.
00021  */
00022 
00023 #ifndef DFU_TYPES_H__
00024 #define DFU_TYPES_H__
00025 
00026 #include <stdint.h>
00027 #include "nrf51.h"
00028 #include "app_util.h "
00029 
00030 /**@brief Structure holding SoftDevice information to be used by the Bootloader/DFU. 
00031  *        Only size field is used.
00032  */
00033 typedef struct
00034 {
00035     uint8_t  info_size;                                                                                 /**< Not used. */
00036     uint8_t  reserved1[3];                                                                              /**< Not used. */
00037     uint32_t magic_number;                                                                              /**< Not used. */
00038     uint32_t softdevice_size;                                                                           /**< Size field containing the size of installed SoftDevice. */
00039     uint16_t firmware_id;                                                                               /**< Firmware id. */
00040     uint8_t  reserved2[2];                                                                                 /**< Not used. */
00041 } SOFTDEVICE_INFORMATION_Type;
00042 
00043 #define SOFTDEVICE_INFORMATION_BASE     0x0003000                                                       /**< Location in the SoftDevice image which holds the SoftDevice informations. */
00044 #define SOFTDEVICE_INFORMATION          ((SOFTDEVICE_INFORMATION_Type *) SOFTDEVICE_INFORMATION_BASE)   /**< Make SoftDevice information accessible through the structure. */
00045 
00046 #define NRF_UICR_BOOT_START_ADDRESS     (NRF_UICR_BASE + 0x14)                                          /**< Register where the bootloader start address is stored in the UICR register. */
00047 
00048 #ifdef S310_STACK
00049     #define CODE_REGION_1_START         0x00020000                                                      /**< This field should correspond to the size of Code Region 0, (which is identical to Start of Code Region 1), found in UICR.CLEN0 register. This value is used for compile safety, as the linker will fail if application expands into bootloader. Runtime, the bootloader will use the value found in UICR.CLEN0. */
00050 #else
00051     #define CODE_REGION_1_START         SOFTDEVICE_INFORMATION->softdevice_size                         /**< This field should correspond to the size of Code Region 0, (which is identical to Start of Code Region 1), found in UICR.CLEN0 register. This value is used for compile safety, as the linker will fail if application expands into bootloader. Runtime, the bootloader will use the value found in UICR.CLEN0. */
00052 #endif 
00053 
00054 #define SOFTDEVICE_REGION_START         0x00001000                                                      /**< This field should correspond to start address of the bootloader, found in UICR.RESERVED, 0x10001014, register. This value is used for sanity check, so the bootloader will fail immediately if this value differs from runtime value. The value is used to determine max application size for updating. */
00055 #define BOOTLOADER_REGION_START         0x0003C000                                                      /**< This field should correspond to start address of the bootloader, found in UICR.RESERVED, 0x10001014, register. This value is used for sanity check, so the bootloader will fail immediately if this value differs from runtime value. The value is used to determine max application size for updating. */
00056 #define BOOTLOADER_SETTINGS_ADDRESS     0x0003FC00                                                      /**< The field specifies the page location of the bootloader settings address. */
00057 
00058 #define DFU_REGION_TOTAL_SIZE           (BOOTLOADER_REGION_START - CODE_REGION_1_START)                 /**< Total size of the region between SD and Bootloader. */
00059 
00060 #define DFU_APP_DATA_RESERVED           0x0000                                                          /**< Size of Application Data that must be preserved between application updates. This value must be a multiple of page size. Page size is 0x400 (1024d) bytes, thus this value must be 0x0000, 0x0400, 0x0800, 0x0C00, 0x1000, etc. */
00061 #define DFU_IMAGE_MAX_SIZE_FULL         (DFU_REGION_TOTAL_SIZE - DFU_APP_DATA_RESERVED)                 /**< Maximum size of a application, excluding save data from the application. */
00062 #define DFU_IMAGE_MAX_SIZE_BANKED       (((DFU_REGION_TOTAL_SIZE)/2) - DFU_APP_DATA_RESERVED)           /**< Maximum size of a application, excluding save data from the application. */
00063 #define DFU_BL_IMAGE_MAX_SIZE           (BOOTLOADER_SETTINGS_ADDRESS - BOOTLOADER_REGION_START)         /**< Maximum size of a bootloader, excluding save data from the current bootloader. */
00064 
00065 #define DFU_BANK_0_REGION_START         CODE_REGION_1_START                                             /**< Bank 0 region start. */
00066 #define DFU_BANK_1_REGION_START         (DFU_BANK_0_REGION_START + DFU_IMAGE_MAX_SIZE_BANKED)           /**< Bank 1 region start. */
00067 
00068 #define CODE_PAGE_SIZE                  0x0400                                                          /**< Size of a flash codepage. Used for size of the reserved flash space in the bootloader region. Will be runtime checked against NRF_UICR->CODEPAGESIZE to ensure the region is correct. */
00069 #define EMPTY_FLASH_MASK                0xFFFFFFFF                                                      /**< Bit mask that defines an empty address in flash. */
00070 
00071 #define INVALID_PACKET                  0x00                                                            /**< Invalid packet identifies. */
00072 #define INIT_PACKET                     0x01                                                            /**< Packet identifies for initialization packet. */
00073 #define STOP_INIT_PACKET                0x02                                                            /**< Packet identifies for stop initialization packet. Used when complete init packet has been received so that the init packet can be used for pre validaiton. */
00074 #define START_PACKET                    0x03                                                            /**< Packet identifies for the Data Start Packet. */
00075 #define DATA_PACKET                     0x04                                                            /**< Packet identifies for a Data Packet. */
00076 #define STOP_DATA_PACKET                0x05                                                            /**< Packet identifies for the Data Stop Packet. */
00077 
00078 #define DFU_UPDATE_SD                   0x01                                                            /**< Bit field indicating update of SoftDevice is ongoing. */
00079 #define DFU_UPDATE_BL                   0x02                                                            /**< Bit field indicating update of bootloader is ongoing. */
00080 #define DFU_UPDATE_APP                  0x04                                                            /**< Bit field indicating update of application is ongoing. */
00081 
00082 #define DFU_INIT_RX                     0x00                                                            /**< Op Code identifies for receiving init packet. */
00083 #define DFU_INIT_COMPLETE               0x01                                                            /**< Op Code identifies for transmission complete of init packet. */
00084 
00085 // Safe guard to ensure during compile time that the DFU_APP_DATA_RESERVED is a multiple of page size.
00086 STATIC_ASSERT((((DFU_APP_DATA_RESERVED) & (CODE_PAGE_SIZE - 1)) == 0x00));
00087 
00088 /**@brief Structure holding a start packet containing update mode and image sizes.
00089  */
00090 typedef struct
00091 {
00092     uint8_t  dfu_update_mode;                                                                           /**< Packet type, used to identify the content of the received packet referenced by data packet. */
00093     uint32_t sd_image_size;                                                                             /**< Size of the SoftDevice image to be transferred. Zero if no SoftDevice image will be transfered. */
00094     uint32_t bl_image_size;                                                                             /**< Size of the Bootloader image to be transferred. Zero if no Bootloader image will be transfered. */
00095     uint32_t app_image_size;                                                                            /**< Size of the application image to be transmitted. Zero if no Bootloader image will be transfered. */
00096 } dfu_start_packet_t;
00097 
00098 /**@brief Structure holding a bootloader init/data packet received.
00099  */
00100 typedef struct
00101 {
00102     uint32_t   packet_length;                                                                           /**< Packet length of the data packet. Each data is word size, meaning length of 4 is 4 words, not bytes. */
00103     uint32_t * p_data_packet;                                                                           /**< Data Packet received. Each data is a word size entry. */
00104 } dfu_data_packet_t;
00105 
00106 /**@brief Structure for holding dfu update packet. Packet type indicate the type of packet.
00107  */
00108 typedef struct
00109 {
00110     uint32_t   packet_type;                                                                             /**< Packet type, used to identify the content of the received packet referenced by data packet. */
00111     union
00112     {
00113         dfu_data_packet_t    data_packet;                                                               /**< Used when packet type is INIT_PACKET or DATA_PACKET. Packet contains data received for init or data. */
00114         dfu_start_packet_t * start_packet;                                                              /**< Used when packet type is START_DATA_PACKET. Will contain information on software to be updtaed, i.e. SoftDevice, Bootloader and/or Application along with image sizes. */
00115     } params;
00116 } dfu_update_packet_t;
00117 
00118 /**@brief DFU status error codes.
00119 */
00120 typedef enum
00121 {
00122     DFU_UPDATE_APP_COMPLETE,                                                                            /**< Status update of application complete.*/
00123     DFU_UPDATE_SD_COMPLETE,                                                                             /**< Status update of SoftDevice update complete. Note that this solely indicates that a new SoftDevice has been received and stored in bank 0 and 1. */
00124     DFU_UPDATE_SD_SWAPPED,                                                                              /**< Status update of SoftDevice update complete. Note that this solely indicates that a new SoftDevice has been received and stored in bank 0 and 1. */
00125     DFU_UPDATE_BOOT_COMPLETE,                                                                           /**< Status update complete.*/
00126     DFU_BANK_0_ERASED,                                                                                  /**< Status bank 0 erased.*/
00127     DFU_TIMEOUT,                                                                                        /**< Status timeout.*/
00128     DFU_RESET                                                                                           /**< Status Reset to indicate current update procedure has been aborted and system should reset. */
00129 } dfu_update_status_code_t;
00130 
00131 /**@brief Structure holding DFU complete event.
00132 */
00133 typedef struct
00134 {
00135     dfu_update_status_code_t status_code;                                                               /**< Device Firmware Update status. */
00136     uint16_t                 app_crc;                                                                   /**< CRC of the recieved application. */
00137     uint32_t                 sd_size;                                                                   /**< Size of the recieved SoftDevice. */
00138     uint32_t                 bl_size;                                                                   /**< Size of the recieved BootLoader. */
00139     uint32_t                 app_size;                                                                  /**< Size of the recieved Application. */
00140     uint32_t                 sd_image_start;                                                            /**< Location in flash where the received SoftDevice image is stored. */
00141 } dfu_update_status_t;
00142 
00143 /**@brief Update complete handler type. */
00144 typedef void (*dfu_complete_handler_t)(dfu_update_status_t dfu_update_status);
00145 
00146 #endif // DFU_TYPES_H__
00147 
00148 /**@} */