CycloneBOOT 2.6.6
Secure Bootloader for ARM Cortex-M MCU
Loading...
Searching...
No Matches
flash.h
Go to the documentation of this file.
1
31#ifndef _FLASH_H
32#define _FLASH_H
33
34// Dependencies
35#include "compiler_port.h"
36#include "error.h"
37#include "memory/memory.h"
38
39#include <stdint.h>
40#include <stdlib.h>
41
42// Flash Driver Major version
43#define FLASH_DRIVER_VERSION_MAJOR 0x01
44// Flash Driver Minor version
45#define FLASH_DRIVER_VERSION_MINOR 0x01
46// Flash Driver Revision version
47#define FLASH_DRIVER_VERSION_PATCH 0x00
48// Flash Driver version
49#define FLASH_DRIVER_VERSION \
50 (uint32_t)(((FLASH_DRIVER_VERSION_MAJOR & 0xFF) << 16) | \
51 ((FLASH_DRIVER_VERSION_MINOR & 0xFF) << 8) | (FLASH_DRIVER_VERSION_PATCH & 0xFF))
52
53// Flash Info flags definition
54#define FLASH_FLAGS_LATER_SWAP 0x1
55
60typedef enum
61{
62 FLASH_TYPE_INTERNAL, // Internal memory
63 FLASH_TYPE_EXTERNAL_PARALLEL, // External parallel memory
64 FLASH_TYPE_EXTERNAL_SPI, // External SPI memory
65 FLASH_TYPE_EXTERNAL_QSPI, // External QSPI memory
66 FLASH_TYPE_EXTERNAL_OSPI // External OSPI (octal-SPI) memory
67} FlashType;
68
69#if 0
74typedef enum
75{
76 //MEM_CLASS_FLASH, //Flash memory
77 MEM_CLASS_RAM, //RAM memory
78 MEM_CLASS_EEPROM //EEPROM memory
79} FlashClass;
80#endif
81
86typedef struct
87{
88 uint32_t version;
89 char *flashName;
91 uint32_t flashAddr;
92 size_t flashSize;
93 size_t writeSize;
94 size_t readSize;
95 uint8_t dualBank;
96 size_t bankSize;
97 uint32_t bank1Addr;
98 uint32_t bank2Addr;
99 uint32_t flags;
100} FlashInfo;
101
106typedef enum
107{
108 FLASH_STATUS_OK = 0,
109 FLASH_STATUS_BUSY,
110 FLASH_STATUS_ERR
112
117typedef error_t (*FlashInit)(void);
118
123typedef error_t (*FlashDeInit)(void);
124
129typedef error_t (*FlashGetInfo)(const FlashInfo **info);
130
135typedef error_t (*FlashGetStatus)(FlashStatus *status);
136
141typedef error_t (*FlashWrite)(uint32_t address, uint8_t *data, size_t length);
142
147typedef error_t (*FlashRead)(uint32_t address, uint8_t *data, size_t length);
148
153typedef error_t (*FlashErase)(uint32_t address, size_t length);
154
159typedef error_t (*FlashSwapBanks)(void);
160
168typedef error_t (*FlashGetNextSector)(uint32_t address, uint32_t *sectorAddr);
169
174typedef bool_t (*FlashIsSectorAddr)(uint32_t address);
175
180typedef error_t (*FlashActivateXiPMode)(bool_t activateXipMode);
181
203
204// Shared flash range-check helpers. topAddress is EXCLUSIVE (base + size): the last valid
205// byte/word ends exactly at topAddress and MUST be accepted. Overflow-safe (no address+length
206// or address+4 that could wrap at 32-bit width on the target). Pure, host-unit-testable.
207
208// True if a byte access [address, address+length) fits within [base, topAddress).
209static inline bool_t flashRangeInBounds(uint32_t address, size_t length, uint32_t base,
210 uint32_t topAddress)
211{
212 return address >= base && address < topAddress &&
213 length <= (size_t) (topAddress - address);
214}
215
216// True if an aligned 32-bit word program at `address` fits within [.., topAddress).
217static inline bool_t flashWordProgramInBounds(uint32_t address, uint32_t topAddress)
218{
219 return (address % sizeof(uint32_t)) == 0 && address < topAddress &&
220 sizeof(uint32_t) <= (topAddress - address);
221}
222
223#endif
bool_t(* FlashIsSectorAddr)(uint32_t address)
Determine if a given address match the start address of a sector.
Definition flash.h:174
error_t(* FlashGetInfo)(const FlashInfo **info)
Get Flash Information function.
Definition flash.h:129
error_t(* FlashSwapBanks)(void)
Swap Flash Banks function.
Definition flash.h:159
error_t(* FlashErase)(uint32_t address, size_t length)
Erase Data from Flash function.
Definition flash.h:153
error_t(* FlashGetStatus)(FlashStatus *status)
Get Flash Status function.
Definition flash.h:135
FlashStatus
Flash Status definition.
Definition flash.h:107
error_t(* FlashInit)(void)
Flash initialization function.
Definition flash.h:117
error_t(* FlashRead)(uint32_t address, uint8_t *data, size_t length)
Read Data from Flash function.
Definition flash.h:147
error_t(* FlashDeInit)(void)
Flash de-initialization function.
Definition flash.h:123
error_t(* FlashActivateXiPMode)(bool_t activateXipMode)
Switch between memory-mapped and R/W mode(s)
Definition flash.h:180
error_t(* FlashGetNextSector)(uint32_t address, uint32_t *sectorAddr)
Get address of the neighbouring sector.
Definition flash.h:168
FlashType
Flash Type definition.
Definition flash.h:61
error_t(* FlashWrite)(uint32_t address, uint8_t *data, size_t length)
Write Data into Flash function.
Definition flash.h:141
CycloneBOOT Memory Layer Abstraction.
Flash Driver definition.
Definition flash.h:187
FlashGetNextSector getNextSectorAddr
Definition flash.h:196
FlashRead read
Flash Driver read data callback function.
Definition flash.h:193
FlashActivateXiPMode flashActivateXiPMode
Definition flash.h:200
FlashErase erase
Flash Driver erase data callback function.
Definition flash.h:194
FlashGetStatus getStatus
Flash Driver get status callback function.
Definition flash.h:191
FlashIsSectorAddr isSectorAddr
Definition flash.h:198
FlashWrite write
Flash Driver write data callback function.
Definition flash.h:192
FlashInit init
Flash Driver init callback function.
Definition flash.h:188
FlashGetInfo getInfo
Flash Driver get information callback function.
Definition flash.h:190
FlashDeInit deInit
Flash Driver deinit callback function.
Definition flash.h:189
FlashSwapBanks swapBanks
Flash Driver swap banks callback function.
Definition flash.h:195
Flash Information definition.
Definition flash.h:87
uint32_t flags
Flash memory flags.
Definition flash.h:99
uint32_t bank1Addr
Flash memory bank 1 start address.
Definition flash.h:97
uint32_t bank2Addr
Flash memory bank 2 start address.
Definition flash.h:98
size_t bankSize
Flash meory bank size.
Definition flash.h:96
char * flashName
Flash memory name.
Definition flash.h:89
size_t flashSize
Flash memory size.
Definition flash.h:92
uint8_t dualBank
Flash memory dual bank capability.
Definition flash.h:95
size_t writeSize
Flash memory write size.
Definition flash.h:93
uint32_t flashAddr
Flash memory start address.
Definition flash.h:91
FlashType flashType
Flash memory type.
Definition flash.h:90
uint32_t version
Flash driver version.
Definition flash.h:88
size_t readSize
Flash memory read size.
Definition flash.h:94