PicoWAN SDK Documentation
flash.h
Go to the documentation of this file.
1 
35 #ifndef _FLASH_H_
36 #define _FLASH_H_
37 
38 #include <stdint.h>
39 
40 /*
41  * 2 logical sections: one private for the usecase/application (will be erased if a different application is flashed)
42  * one common for the system (will be kept/migrated if a different application is flashed)
43  */
44 enum nv_section {
45  NV_SECTION_PRIVATE,
46  NV_SECTION_COMMON,
47 };
48 
49 /*
50  * Definition of the common section structure
51  * A field has a minimum size of 1 block = sizeof(uint32_t) bytes
52  * Each time the structure is extended, NV_COMMON_SECTION_LENGTH must be updated
53  */
54 #define NV_COMMON_MAGIC 0x442A6B6E
55 
56 #define NV_COMMON_MAGIC_OFFSET 0
57 #define NV_COMMON_MAGIC_SIZE 1 /* in blocks */
58 #define NV_COMMON_SECTION_LENGTH_OFFSET (NV_COMMON_MAGIC_OFFSET + NV_COMMON_MAGIC_SIZE * sizeof(uint32_t))
59 #define NV_COMMON_SECTION_LENGTH_SIZE 1 /* in blocks */
60 #define NV_COMMON_FIRST_FIELD_OFFSET (NV_COMMON_SECTION_LENGTH_OFFSET + NV_COMMON_SECTION_LENGTH_SIZE * sizeof(uint32_t))
61 
62 /* The list of available fields starts here (the offsets must be multiples of sizeof(uint32_t)) */
63 #define NV_COMMON_PICOWAN_DEVICE_ADDRESS_OFFSET NV_COMMON_FIRST_FIELD_OFFSET
64 #define NV_COMMON_PICOWAN_DEVICE_ADDRESS_SIZE 1 /* in blocks */
65 #define NV_COMMON_PICOWAN_NETWORK_SESSION_KEY_OFFSET (NV_COMMON_PICOWAN_DEVICE_ADDRESS_OFFSET + NV_COMMON_PICOWAN_DEVICE_ADDRESS_SIZE * sizeof(uint32_t))
66 #define NV_COMMON_PICOWAN_NETWORK_SESSION_KEY_SIZE 4 /* in blocks */
67 #define NV_COMMON_PICOWAN_APPLICATION_SESSION_KEY_OFFSET (NV_COMMON_PICOWAN_NETWORK_SESSION_KEY_OFFSET + NV_COMMON_PICOWAN_NETWORK_SESSION_KEY_SIZE * sizeof(uint32_t))
68 #define NV_COMMON_PICOWAN_APPLICATION_SESSION_KEY_SIZE 4 /* in blocks */
69 #define NV_COMMON_DEVICE_EUI_OFFSET (NV_COMMON_PICOWAN_APPLICATION_SESSION_KEY_OFFSET + NV_COMMON_PICOWAN_APPLICATION_SESSION_KEY_SIZE * sizeof(uint32_t))
70 #define NV_COMMON_DEVICE_EUI_SIZE 2 /* in blocks */
71 #define NV_COMMON_APPLICATION_EUI_OFFSET (NV_COMMON_DEVICE_EUI_OFFSET + NV_COMMON_DEVICE_EUI_SIZE * sizeof(uint32_t))
72 #define NV_COMMON_APPLICATION_EUI_SIZE 2 /* in blocks */
73 #define NV_COMMON_APPLICATION_KEY_OFFSET (NV_COMMON_APPLICATION_EUI_OFFSET + NV_COMMON_APPLICATION_EUI_SIZE * sizeof(uint32_t))
74 #define NV_COMMON_APPLICATION_KEY_SIZE 4 /* in blocks */
75 #define NV_COMMON_LORA_DEVICE_ADDRESS_OFFSET (NV_COMMON_APPLICATION_KEY_OFFSET + NV_COMMON_APPLICATION_KEY_SIZE * sizeof(uint32_t))
76 #define NV_COMMON_LORA_DEVICE_ADDRESS_SIZE 1 /* in blocks */
77 #define NV_COMMON_LORA_NETWORK_SESSION_KEY_OFFSET (NV_COMMON_LORA_DEVICE_ADDRESS_OFFSET + NV_COMMON_LORA_DEVICE_ADDRESS_SIZE * sizeof(uint32_t))
78 #define NV_COMMON_LORA_NETWORK_SESSION_KEY_SIZE 4 /* in blocks */
79 #define NV_COMMON_LORA_APPLICATION_SESSION_KEY_OFFSET (NV_COMMON_LORA_NETWORK_SESSION_KEY_OFFSET + NV_COMMON_LORA_NETWORK_SESSION_KEY_SIZE * sizeof(uint32_t))
80 #define NV_COMMON_LORA_APPLICATION_SESSION_KEY_SIZE 4 /* in blocks */
81 #define NV_COMMON_LORA_UPLINK_COUNTER_OFFSET (NV_COMMON_LORA_APPLICATION_SESSION_KEY_OFFSET + NV_COMMON_LORA_APPLICATION_SESSION_KEY_SIZE * sizeof(uint32_t))
82 #define NV_COMMON_LORA_UPLINK_COUNTER_SIZE 1 /* in blocks */
83 #define NV_COMMON_LORA_DOWNLINK_COUNTER_OFFSET (NV_COMMON_LORA_UPLINK_COUNTER_OFFSET + NV_COMMON_LORA_UPLINK_COUNTER_SIZE * sizeof(uint32_t))
84 #define NV_COMMON_LORA_DOWNLINK_COUNTER_SIZE 1 /* in blocks */
85 
86 /* Size of the section in blocks, starting from FIRST_FIELD */
87 #define NV_COMMON_SECTION_LENGTH NV_COMMON_PICOWAN_DEVICE_ADDRESS_SIZE + \
88  NV_COMMON_PICOWAN_NETWORK_SESSION_KEY_SIZE + \
89  NV_COMMON_PICOWAN_APPLICATION_SESSION_KEY_SIZE + \
90  NV_COMMON_DEVICE_EUI_SIZE + \
91  NV_COMMON_APPLICATION_EUI_SIZE + \
92  NV_COMMON_APPLICATION_KEY_SIZE + \
93  NV_COMMON_LORA_DEVICE_ADDRESS_SIZE + \
94  NV_COMMON_LORA_NETWORK_SESSION_KEY_SIZE + \
95  NV_COMMON_LORA_APPLICATION_SESSION_KEY_SIZE + \
96  NV_COMMON_LORA_UPLINK_COUNTER_SIZE + \
97  NV_COMMON_LORA_DOWNLINK_COUNTER_SIZE
98 
99 /*
100  * Definition of the private section structure
101  * A field has a minimum size of 1 block = sizeof(uint32_t) bytes
102  * Each time the structure is extended, NV_PRIVATE_SECTION_LENGTH must be updated
103  */
104 
105 #define NV_PRIVATE_MAGIC_OFFSET 0
106 #define NV_PRIVATE_MAGIC_SIZE 1 /* in blocks */
107 #define NV_PRIVATE_SECTION_LENGTH_OFFSET (NV_PRIVATE_MAGIC_OFFSET + NV_PRIVATE_MAGIC_SIZE * sizeof(uint32_t))
108 #define NV_PRIVATE_SECTION_LENGTH_SIZE 1 /* in blocks */
109 #define NV_PRIVATE_FIRST_FIELD_OFFSET (NV_PRIVATE_SECTION_LENGTH_OFFSET + NV_PRIVATE_SECTION_LENGTH_SIZE * sizeof(uint32_t))
110 
111 
126 int8_t flash_data_nvread(enum nv_section section, uint32_t offset, uint32_t *data, uint32_t length);
127 
142 int8_t flash_data_nvwrite(enum nv_section section, uint32_t offset, uint32_t *data, uint32_t length);
143 
154 void flash_data_nvcheck(uint32_t private_magic, uint32_t private_size);
155 
156 #endif
void flash_data_nvcheck(uint32_t private_magic, uint32_t private_size)
Initializes and checks the Eeprom format.
Definition: flash.c:173
int8_t flash_data_nvwrite(enum nv_section section, uint32_t offset, uint32_t *data, uint32_t length)
Writes 32-bit long blocks to the Eeprom using PicoWAN-SDK&#39;s Eeprom layout.
Definition: flash.c:139
int8_t flash_data_nvread(enum nv_section section, uint32_t offset, uint32_t *data, uint32_t length)
Reads 32-bit long blocks from the Eeprom using PicoWAN-SDK&#39;s Eeprom layout.
Definition: flash.c:109