7#ifndef _HARDWARE_FLASH_H
8#define _HARDWARE_FLASH_H
38#ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH
39#ifdef PARAM_ASSERTIONS_ENABLED_FLASH
40#define PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH PARAM_ASSERTIONS_ENABLED_FLASH
42#define PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH 0
45#define FLASH_PAGE_SIZE (1u << 8)
46#define FLASH_SECTOR_SIZE (1u << 12)
47#define FLASH_BLOCK_SIZE (1u << 16)
49#ifndef FLASH_UNIQUE_ID_SIZE_BYTES
50#define FLASH_UNIQUE_ID_SIZE_BYTES 8
146void flash_do_cmd(
const uint8_t *txbuf, uint8_t *rxbuf,
size_t count);
148void flash_flush_cache(
void);
152 FLASH_DEVINFO_SIZE_NONE = 0x0,
153 FLASH_DEVINFO_SIZE_8K = 0x1,
154 FLASH_DEVINFO_SIZE_16K = 0x2,
155 FLASH_DEVINFO_SIZE_32K = 0x3,
156 FLASH_DEVINFO_SIZE_64K = 0x4,
157 FLASH_DEVINFO_SIZE_128K = 0x5,
158 FLASH_DEVINFO_SIZE_256K = 0x6,
159 FLASH_DEVINFO_SIZE_512K = 0x7,
160 FLASH_DEVINFO_SIZE_1M = 0x8,
161 FLASH_DEVINFO_SIZE_2M = 0x9,
162 FLASH_DEVINFO_SIZE_4M = 0xa,
163 FLASH_DEVINFO_SIZE_8M = 0xb,
164 FLASH_DEVINFO_SIZE_16M = 0xc,
165 FLASH_DEVINFO_SIZE_MAX = 0xc
166} flash_devinfo_size_t;
171static inline uint32_t flash_devinfo_size_to_bytes(flash_devinfo_size_t size) {
172 if (size == FLASH_DEVINFO_SIZE_NONE) {
175 return 4096u << (uint)size;
183static inline flash_devinfo_size_t flash_devinfo_bytes_to_size(uint32_t bytes) {
185 valid_params_if(HARDWARE_FLASH, (bytes & (bytes - 1)) == 0u);
186 uint sectors = bytes / 4096u;
188 return FLASH_DEVINFO_SIZE_NONE;
190 return (flash_devinfo_size_t) __builtin_ctz(sectors);
212flash_devinfo_size_t flash_devinfo_get_cs_size(uint cs);
232void flash_devinfo_set_cs_size(uint cs, flash_devinfo_size_t size);
246bool flash_devinfo_get_d8h_erase_supported(
void);
256void flash_devinfo_set_d8h_erase_supported(
bool supported);
263uint flash_devinfo_get_cs_gpio(uint cs);
272void flash_devinfo_set_cs_gpio(uint cs, uint gpio);
void flash_range_program(uint32_t flash_offs, const uint8_t *data, size_t count)
Program flash.
Definition flash.c:222
void flash_range_erase(uint32_t flash_offs, size_t count)
Erase areas of flash.
Definition flash.c:191
void flash_get_unique_id(uint8_t *id_out)
Get flash unique 64 bit identifier.
Definition flash.c:336
void flash_do_cmd(const uint8_t *txbuf, uint8_t *rxbuf, size_t count)
Execute bidirectional flash command.
Definition flash.c:272
void flash_start_xip(void)
Initialise QSPI interface and external QSPI devices for execute-in-place.
Definition flash.c:160