Wirepas SDK
bl_interface.h
Go to the documentation of this file.
1 /* Copyright 2018 Wirepas Ltd. All Rights Reserved.
2  *
3  * See file LICENSE.txt for full license details.
4  *
5  */
6 
13 #ifndef BL_INTERFACE_H_
14 #define BL_INTERFACE_H_
15 
16 #include <stdbool.h>
17 #include <stdint.h>
18 #include <stddef.h>
19 
20 #if defined(EFR32_PLATFORM)
21 #include "em_cmu.h"
22 #endif
23 
25 typedef enum
26 {
27  BL_RES_OK = 0,
37 
39 #define BL_MEMORY_AREA_UNDEFINED 0xFFFFFFFF
40 
42 typedef uint32_t bl_memory_area_id_t;
43 
45 typedef enum
46 {
56 
58 typedef struct
59 {
61  size_t flash_size;
76  uint32_t byte_write_time;
78  uint32_t page_write_time;
90 
92 typedef struct
93 {
97  size_t area_size;
109 
114 typedef struct
115 {
117  uint32_t length;
119  uint16_t crc;
122  uint8_t seq;
124  uint8_t major;
126  uint8_t minor;
128  uint8_t maint;
130  uint8_t devel;
132 
134 typedef enum
135 {
143 
145 typedef enum
146 {
166 
168 typedef enum
169 {
185 
187 typedef enum
188 {
196 
198 typedef struct
199 {
201  uint32_t area_length;
203  uint32_t erase_time;
205  uint32_t length;
207  uint16_t crc;
211  uint8_t seq;
215  uint8_t flags;
217  uint32_t type;
219  uint32_t status;
221  bool dedicated;
227  uint32_t modem_fw_data;
230  uint32_t modem_fw_length;
232 
233 #if defined(NRF91_PLATFORM)
234 typedef struct
235 {
241  const char * at_commands;
242 } bl_platform_nrf91_t;
243 #elif defined(NRF54_PLATFORM)
244 
245 typedef struct
246 {
253  const uint16_t hfxo_int_cap_ff;
254 
261  const uint16_t lfxo_int_cap_ff;
262 
269  const uint32_t override_ficr_info_part;
270 } bl_platform_nrf54_t;
271 #elif defined(EFR32_PLATFORM)
272 
273 typedef struct
274 {
278  const CMU_HFXOInit_TypeDef * hfxoInit;
282  const CMU_LFXOInit_TypeDef * lfxoInit;
283 } bl_platform_efr32_t;
284 #endif
285 
287 typedef union
288 {
289 #if defined(NRF52_PLATFORM)
290 
293  const void * nrf52;
294 #elif defined(NRF54_PLATFORM)
295 
298  const bl_platform_nrf54_t * nrf54;
299 #elif defined(NRF91_PLATFORM)
300 
303  const bl_platform_nrf91_t * nrf91;
304 #elif defined(EFR32_PLATFORM)
305 
308  const bl_platform_efr32_t * efr32;
309 #endif
310 } bl_platform_t;
311 
313 typedef struct
314 {
322  bool dcdc;
328 
343  void * to,
344  uint32_t from,
345  size_t amount);
346 
362  bl_memory_area_id_t id, uint32_t to, const void * from, size_t amount);
363 
379  bl_memory_area_id_t id, uint32_t * sector_base, size_t * number_of_sector);
380 
388 
400 
410  uint8_t * num_areas);
411 
425 
439 
447 typedef uint8_t (*bl_memory_area_getMaxNumAreas_f)(void);
448 
459  bl_scrat_valid_e * validity);
460 
473 typedef bl_interface_res_e (*bl_scrat_read_f)(void * to,
474  uint32_t from,
475  size_t amount);
476 
482 typedef bl_interface_res_e (*bl_scrat_clear_f)(void (*clear_wdt)(void));
483 
494 typedef bl_interface_res_e (*bl_scrat_begin_f)(uint32_t num_bytes,
495  uint8_t seq,
496  void (*clear_wdt)(void));
497 
513  uint32_t to,
514  const void * from,
515  size_t amount,
516  bl_scrat_write_status_e * status);
517 
527 
535 
536 typedef bl_interface_res_e (*bl_scrat_setStatus_f)(uint32_t status);
537 
543 typedef const bl_hardware_capabilities_t * (*bl_hardware_getCapabilities_f)(
544  void);
545 
546 
547 typedef struct
548 {
559 
560 typedef struct
561 {
571 
572 typedef struct
573 {
576 
580 typedef struct
581 {
582  uint32_t version;
586  const void * dflow_services_p;
588 
589 #endif /* BL_INTERFACE_H_ */
BL_SCRAT_IS_INVALID
@ BL_SCRAT_IS_INVALID
Definition: bl_interface.h:181
bl_flash_info_t::page_write_call_time
uint32_t page_write_call_time
Definition: bl_interface.h:84
bl_memory_area_info_t::area_id
bl_memory_area_id_t area_id
Definition: bl_interface.h:95
BL_SCRAT_WRITE_STATUS_INVALID_HEADER
@ BL_SCRAT_WRITE_STATUS_INVALID_HEADER
Definition: bl_interface.h:160
bl_memory_area_header_t::seq
uint8_t seq
Definition: bl_interface.h:122
bl_scrat_info_t::area_length
uint32_t area_length
Definition: bl_interface.h:201
bl_memory_area_getIdfromType_f
bl_interface_res_e(* bl_memory_area_getIdfromType_f)(bl_memory_area_id_t *id, bl_memory_area_type_e type)
Return the memory area id of the FIRST area with provided type.
Definition: bl_interface.h:423
scratchpad_services_t::setBootable
bl_scrat_setBootable_f setBootable
Definition: bl_interface.h:568
bl_interface_t::hardware_services_p
const hardware_services_t * hardware_services_p
Definition: bl_interface.h:585
bl_flash_info_t::sector_erase_time
uint32_t sector_erase_time
Definition: bl_interface.h:80
BL_SCRAT_IS_NOTAG
@ BL_SCRAT_IS_NOTAG
Definition: bl_interface.h:175
BL_SCRAT_WRITE_STATUS_INVALID_START
@ BL_SCRAT_WRITE_STATUS_INVALID_START
Definition: bl_interface.h:156
BL_RES_ERROR
@ BL_RES_ERROR
Error during operation.
Definition: bl_interface.h:28
bl_memory_area_info_t::area_physical_address
uint32_t area_physical_address
Definition: bl_interface.h:99
bl_memory_area_info_t::external_flash
bool external_flash
Definition: bl_interface.h:103
bl_memory_area_header_t
Informations contained in the header that the bootloader can store in the beginning of an area (only ...
Definition: bl_interface.h:114
BL_SCRAT_WRITE_STATUS_FLASH_ERROR
@ BL_SCRAT_WRITE_STATUS_FLASH_ERROR
Definition: bl_interface.h:164
bl_memory_area_startRead_f
bl_interface_res_e(* bl_memory_area_startRead_f)(bl_memory_area_id_t id, void *to, uint32_t from, size_t amount)
Read bytes from a memory area.
Definition: bl_interface.h:342
BL_SCRAT_WRITE_STATUS_COMPLETED_ERROR
@ BL_SCRAT_WRITE_STATUS_COMPLETED_ERROR
Definition: bl_interface.h:152
bl_flash_info_t::flash_size
size_t flash_size
Definition: bl_interface.h:61
bl_scrat_info_t::erase_time
uint32_t erase_time
Definition: bl_interface.h:203
bl_platform_t
Platform specific descriptions.
Definition: bl_interface.h:287
bl_interface_t::version
uint32_t version
Definition: bl_interface.h:582
BL_MEM_AREA_TYPE_MODEMFW
@ BL_MEM_AREA_TYPE_MODEMFW
Modem firmware area.
Definition: bl_interface.h:53
bl_memory_area_info_t::has_header
bool has_header
Definition: bl_interface.h:105
memory_area_services_t::startErase
bl_memory_area_startErase_f startErase
Definition: bl_interface.h:551
bl_scrat_write_status_e
bl_scrat_write_status_e
Scratchpad write status.
Definition: bl_interface.h:145
bl_scrat_info_t::modem_fw_type
bl_scrat_modem_file_type_e modem_fw_type
Definition: bl_interface.h:224
bl_hardware_capabilities_t::dcdc
bool dcdc
Definition: bl_interface.h:322
BL_MEM_AREA_TYPE_APPLICATION
@ BL_MEM_AREA_TYPE_APPLICATION
Application area.
Definition: bl_interface.h:49
BL_MEM_AREA_TYPE_PERSISTENT
@ BL_MEM_AREA_TYPE_PERSISTENT
Persistent memory area.
Definition: bl_interface.h:50
memory_area_services_t::isBusy
bl_memory_area_isBusy_f isBusy
Definition: bl_interface.h:552
BL_MEM_AREA_TYPE_MODEMDELTAFW
@ BL_MEM_AREA_TYPE_MODEMDELTAFW
Modem delta firmware area.
Definition: bl_interface.h:54
bl_flash_info_t::is_busy_call_time
uint32_t is_busy_call_time
Definition: bl_interface.h:88
bl_scrat_info_t::status
uint32_t status
Definition: bl_interface.h:219
bl_memory_area_getMaxNumAreas_f
uint8_t(* bl_memory_area_getMaxNumAreas_f)(void)
Return the total number of areas supported by the bootloader.
Definition: bl_interface.h:447
memory_area_services_t::startWrite
bl_memory_area_startWrite_f startWrite
Definition: bl_interface.h:550
memory_area_services_t::getMaxNumAreas
bl_memory_area_getMaxNumAreas_f getMaxNumAreas
Definition: bl_interface.h:557
BL_SCRAT_WRITE_STATUS_COMPLETED_OK
@ BL_SCRAT_WRITE_STATUS_COMPLETED_OK
Definition: bl_interface.h:150
BL_SCRAT_TYPE_BLANK
@ BL_SCRAT_TYPE_BLANK
Definition: bl_interface.h:137
bl_memory_area_header_t::crc
uint16_t crc
Definition: bl_interface.h:119
bl_flash_info_t::write_alignment
size_t write_alignment
Definition: bl_interface.h:70
bl_scrat_setBootable_f
bl_interface_res_e(* bl_scrat_setBootable_f)(void)
Set scratchpad as bootable.
Definition: bl_interface.h:534
scratchpad_services_t::read
bl_scrat_read_f read
Definition: bl_interface.h:563
bl_interface_t
Global interface entry point with a bootloader version number.
Definition: bl_interface.h:580
BL_RES_TIMEOUT
@ BL_RES_TIMEOUT
Synchronous call timeout.
Definition: bl_interface.h:33
bl_hardware_getCapabilities_f
const typedef bl_hardware_capabilities_t *(* bl_hardware_getCapabilities_f)(void)
Returns board hardware capabilities.
Definition: bl_interface.h:543
bl_flash_info_t::byte_write_call_time
uint32_t byte_write_call_time
Definition: bl_interface.h:82
bl_memory_area_info_t::type
bl_memory_area_type_e type
Definition: bl_interface.h:107
scratchpad_services_t::setStatus
bl_scrat_setStatus_f setStatus
Definition: bl_interface.h:569
scratchpad_services_t::clear
bl_scrat_clear_f clear
Definition: bl_interface.h:564
bl_scrat_info_t::modem_fw_length
uint32_t modem_fw_length
Definition: bl_interface.h:230
scratchpad_services_t::getInfo
bl_scrat_getInfo_f getInfo
Definition: bl_interface.h:567
bl_memory_area_getAreaHeader_f
bl_interface_res_e(* bl_memory_area_getAreaHeader_f)(bl_memory_area_id_t id, bl_memory_area_header_t *header)
Return a structure containing the information stored in the header at the beginning of the area.
Definition: bl_interface.h:437
bl_memory_area_header_t::length
uint32_t length
Definition: bl_interface.h:117
bl_scrat_write_f
bl_interface_res_e(* bl_scrat_write_f)(uint32_t to, const void *from, size_t amount, bl_scrat_write_status_e *status)
Write bytes to scratchpad area.
Definition: bl_interface.h:512
bl_flash_info_t::erase_sector_size
size_t erase_sector_size
Definition: bl_interface.h:65
bl_flash_info_t::byte_write_time
uint32_t byte_write_time
Definition: bl_interface.h:76
bl_interface_t::scratchpad_services_p
const scratchpad_services_t * scratchpad_services_p
Definition: bl_interface.h:584
BL_SCRAT_IS_CLEAR
@ BL_SCRAT_IS_CLEAR
Definition: bl_interface.h:173
bl_interface_res_e
bl_interface_res_e
Bootloader interface operations result.
Definition: bl_interface.h:25
scratchpad_services_t
Definition: bl_interface.h:560
BL_SCRAT_WRITE_STATUS_NOT_ONGOING
@ BL_SCRAT_WRITE_STATUS_NOT_ONGOING
Definition: bl_interface.h:154
BL_SCRAT_TYPE_PRESENT
@ BL_SCRAT_TYPE_PRESENT
Definition: bl_interface.h:139
BL_SCRAT_IS_UNKNOWN
@ BL_SCRAT_IS_UNKNOWN
Definition: bl_interface.h:171
BL_MEM_AREA_TYPE_SCRATCHPAD
@ BL_MEM_AREA_TYPE_SCRATCHPAD
Dedicated scratchpad area.
Definition: bl_interface.h:51
hardware_services_t::getCapabilities
bl_hardware_getCapabilities_f getCapabilities
Definition: bl_interface.h:574
bl_flash_info_t::page_write_time
uint32_t page_write_time
Definition: bl_interface.h:78
BL_MEM_AREA_TYPE_STACK
@ BL_MEM_AREA_TYPE_STACK
Stack area.
Definition: bl_interface.h:48
BL_RES_OK
@ BL_RES_OK
Operation is successful.
Definition: bl_interface.h:27
BL_SCRAT_IS_INVALID_HEADER
@ BL_SCRAT_IS_INVALID_HEADER
Definition: bl_interface.h:177
bl_scrat_info_t::flags
uint8_t flags
Definition: bl_interface.h:215
BL_SCRAT_MODEM_FILE_TYPE_INVALID
@ BL_SCRAT_MODEM_FILE_TYPE_INVALID
Definition: bl_interface.h:194
bl_scrat_info_t
Scratchpad info definition.
Definition: bl_interface.h:198
BL_RES_BUSY
@ BL_RES_BUSY
Underneath flash driver is busy.
Definition: bl_interface.h:29
bl_memory_area_info_t::area_size
size_t area_size
Definition: bl_interface.h:97
scratchpad_services_t::begin
bl_scrat_begin_f begin
Definition: bl_interface.h:565
BL_SCRAT_MODEM_FILE_TYPE_FULL_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_FULL_IMAGE
Definition: bl_interface.h:190
bl_memory_area_startErase_f
bl_interface_res_e(* bl_memory_area_startErase_f)(bl_memory_area_id_t id, uint32_t *sector_base, size_t *number_of_sector)
Erase a sector of a memory area.
Definition: bl_interface.h:378
bl_scrat_valid_e
bl_scrat_valid_e
Scratchpad validity.
Definition: bl_interface.h:168
bl_memory_area_getAreaList_f
void(* bl_memory_area_getAreaList_f)(bl_memory_area_id_t *list, uint8_t *num_areas)
Return the list of areas defined in the bootloader.
Definition: bl_interface.h:409
hardware_services_t
Definition: bl_interface.h:572
bl_memory_area_startWrite_f
bl_interface_res_e(* bl_memory_area_startWrite_f)(bl_memory_area_id_t id, uint32_t to, const void *from, size_t amount)
Write bytes to a memory area.
Definition: bl_interface.h:361
bl_scrat_modem_file_type_e
bl_scrat_modem_file_type_e
Definition: bl_interface.h:187
bl_hardware_capabilities_t
Hardware features that can be installed on a board.
Definition: bl_interface.h:313
bl_scrat_read_f
bl_interface_res_e(* bl_scrat_read_f)(void *to, uint32_t from, size_t amount)
Read bytes from a scratchpad file.
Definition: bl_interface.h:473
bl_flash_info_t::sector_erase_call_time
uint32_t sector_erase_call_time
Definition: bl_interface.h:86
bl_memory_area_isBusy_f
bool(* bl_memory_area_isBusy_f)(bl_memory_area_id_t id)
Checks if underlying flash driver is busy.
Definition: bl_interface.h:387
BL_SCRAT_WRITE_STATUS_INVALID_NUM_BYTES
@ BL_SCRAT_WRITE_STATUS_INVALID_NUM_BYTES
Definition: bl_interface.h:158
scratchpad_services_t::getValidity
bl_scrat_getValidity_f getValidity
Definition: bl_interface.h:562
BL_RES_NODRIVER
@ BL_RES_NODRIVER
Missing flash driver, hw error, verify error.
Definition: bl_interface.h:30
BL_SCRAT_TYPE_PROCESS
@ BL_SCRAT_TYPE_PROCESS
Definition: bl_interface.h:141
bl_scrat_clear_f
bl_interface_res_e(* bl_scrat_clear_f)(void(*clear_wdt)(void))
Erase the scratchpad area.
Definition: bl_interface.h:482
memory_area_services_t::getAreaInfo
bl_memory_area_getAreaInfo_f getAreaInfo
Definition: bl_interface.h:553
memory_area_services_t::getIdfromType
bl_memory_area_getIdfromType_f getIdfromType
Definition: bl_interface.h:555
BL_SCRAT_IS_VALID
@ BL_SCRAT_IS_VALID
Definition: bl_interface.h:183
bl_memory_area_type_e
bl_memory_area_type_e
Types of Memory Areas.
Definition: bl_interface.h:45
bl_memory_area_header_t::devel
uint8_t devel
Definition: bl_interface.h:130
bl_scrat_info_t::modem_fw_data
uint32_t modem_fw_data
Definition: bl_interface.h:227
bl_hardware_capabilities_t::platform
bl_platform_t platform
Definition: bl_interface.h:326
bl_flash_info_t
Flash memory info definition.
Definition: bl_interface.h:58
bl_memory_area_header_t::maint
uint8_t maint
Definition: bl_interface.h:128
bl_scrat_info_t::type
uint32_t type
Definition: bl_interface.h:217
BL_SCRAT_WRITE_STATUS_OK
@ BL_SCRAT_WRITE_STATUS_OK
Definition: bl_interface.h:148
bl_memory_area_id_t
uint32_t bl_memory_area_id_t
Memory Area ID definition.
Definition: bl_interface.h:42
bl_memory_area_info_t::flash
bl_flash_info_t flash
Definition: bl_interface.h:101
BL_RES_INVALID_AREA
@ BL_RES_INVALID_AREA
Area doesn't exist.
Definition: bl_interface.h:32
bl_scrat_info_t::dedicated
bool dedicated
Definition: bl_interface.h:221
BL_RES_PARAM
@ BL_RES_PARAM
Invalid parameters.
Definition: bl_interface.h:31
bl_memory_area_header_t::major
uint8_t major
Definition: bl_interface.h:124
bl_scrat_getInfo_f
bl_interface_res_e(* bl_scrat_getInfo_f)(bl_scrat_info_t *info)
Fills a structure with info about the scratchpad.
Definition: bl_interface.h:526
scratchpad_services_t::write
bl_scrat_write_f write
Definition: bl_interface.h:566
BL_MEM_AREA_TYPE_BOOTLOADER
@ BL_MEM_AREA_TYPE_BOOTLOADER
Bootloader area.
Definition: bl_interface.h:47
BL_SCRAT_IS_INVALID_CRC
@ BL_SCRAT_IS_INVALID_CRC
Definition: bl_interface.h:179
BL_SCRAT_WRITE_STATUS_INVALID_NULL_BYTES
@ BL_SCRAT_WRITE_STATUS_INVALID_NULL_BYTES
Definition: bl_interface.h:162
bl_scrat_begin_f
bl_interface_res_e(* bl_scrat_begin_f)(uint32_t num_bytes, uint8_t seq, void(*clear_wdt)(void))
Prepare scratchpad memory for storing new data.
Definition: bl_interface.h:494
bl_flash_info_t::write_page_size
size_t write_page_size
Definition: bl_interface.h:63
bl_memory_area_header_t::minor
uint8_t minor
Definition: bl_interface.h:126
BL_RES_INVALID_TAG
@ BL_RES_INVALID_TAG
Record with tag doesn't exist, or no space.
Definition: bl_interface.h:35
bl_memory_area_getAreaInfo_f
bl_interface_res_e(* bl_memory_area_getAreaInfo_f)(bl_memory_area_id_t id, bl_memory_area_info_t *info)
Fills a structure with info about memory area.
Definition: bl_interface.h:398
memory_area_services_t::startRead
bl_memory_area_startRead_f startRead
Definition: bl_interface.h:549
bl_hardware_capabilities_t::crystal_32k
bool crystal_32k
Definition: bl_interface.h:318
BL_RES_INVALID_STATE
@ BL_RES_INVALID_STATE
Write ongoing or scratchpad not valid.
Definition: bl_interface.h:34
bl_scrat_getValidity_f
bl_interface_res_e(* bl_scrat_getValidity_f)(bl_scrat_valid_e *validity)
Check if the scratchpad contains valid data.
Definition: bl_interface.h:458
bl_memory_area_info_t
Memory Area info definition.
Definition: bl_interface.h:92
memory_area_services_t
Definition: bl_interface.h:547
BL_SCRAT_MODEM_FILE_TYPE_DELTA_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_DELTA_IMAGE
Definition: bl_interface.h:192
bl_interface_t::memory_area_services_p
const memory_area_services_t * memory_area_services_p
Definition: bl_interface.h:583
bl_scrat_type_e
bl_scrat_type_e
Scratchpad type enum.
Definition: bl_interface.h:134
bl_scrat_setStatus_f
bl_interface_res_e(* bl_scrat_setStatus_f)(uint32_t status)
Definition: bl_interface.h:536
bl_interface_t::dflow_services_p
const void * dflow_services_p
Definition: bl_interface.h:586
BL_MEM_AREA_TYPE_USER
@ BL_MEM_AREA_TYPE_USER
User defined area.
Definition: bl_interface.h:52
memory_area_services_t::getAreaHeader
bl_memory_area_getAreaHeader_f getAreaHeader
Definition: bl_interface.h:556
memory_area_services_t::getAreaList
bl_memory_area_getAreaList_f getAreaList
Definition: bl_interface.h:554