@web-font-path: "roboto-debian.css";
Loading...
Searching...
No Matches
flash.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _HARDWARE_FLASH_H
8#define _HARDWARE_FLASH_H
9
10#include "pico.h"
11
37// PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH, Enable/disable assertions in the hardware_flash module, type=bool, default=0, group=hardware_flash
38#ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH
39#ifdef PARAM_ASSERTIONS_ENABLED_FLASH // backwards compatibility with SDK < 2.0.0
40#define PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH PARAM_ASSERTIONS_ENABLED_FLASH
41#else
42#define PARAM_ASSERTIONS_ENABLED_HARDWARE_FLASH 0
43#endif
44#endif
45#define FLASH_PAGE_SIZE (1u << 8)
46#define FLASH_SECTOR_SIZE (1u << 12)
47#define FLASH_BLOCK_SIZE (1u << 16)
48
49#ifndef FLASH_UNIQUE_ID_SIZE_BYTES
50#define FLASH_UNIQUE_ID_SIZE_BYTES 8
51#endif
52
53// PICO_CONFIG: PICO_FLASH_SIZE_BYTES, size of primary flash in bytes, type=int, default=Usually provided via board header, group=hardware_flash
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
69void flash_range_erase(uint32_t flash_offs, size_t count);
70
83void flash_range_program(uint32_t flash_offs, const uint8_t *data, size_t count);
84
95void flash_get_unique_id(uint8_t *id_out);
96
120void flash_do_cmd(const uint8_t *txbuf, uint8_t *rxbuf, size_t count);
121
122void flash_flush_cache(void);
123
124#if !PICO_RP2040
125typedef enum {
126 FLASH_DEVINFO_SIZE_NONE = 0x0,
127 FLASH_DEVINFO_SIZE_8K = 0x1,
128 FLASH_DEVINFO_SIZE_16K = 0x2,
129 FLASH_DEVINFO_SIZE_32K = 0x3,
130 FLASH_DEVINFO_SIZE_64K = 0x4,
131 FLASH_DEVINFO_SIZE_128K = 0x5,
132 FLASH_DEVINFO_SIZE_256K = 0x6,
133 FLASH_DEVINFO_SIZE_512K = 0x7,
134 FLASH_DEVINFO_SIZE_1M = 0x8,
135 FLASH_DEVINFO_SIZE_2M = 0x9,
136 FLASH_DEVINFO_SIZE_4M = 0xa,
137 FLASH_DEVINFO_SIZE_8M = 0xb,
138 FLASH_DEVINFO_SIZE_16M = 0xc,
139 FLASH_DEVINFO_SIZE_MAX = 0xc
140} flash_devinfo_size_t;
141
145static inline uint32_t flash_devinfo_size_to_bytes(flash_devinfo_size_t size) {
146 if (size == FLASH_DEVINFO_SIZE_NONE) {
147 return 0;
148 } else {
149 return 4096u << (uint)size;
150 }
151}
152
157static inline flash_devinfo_size_t flash_devinfo_bytes_to_size(uint32_t bytes) {
158 // Must be zero or a power of two
159 valid_params_if(HARDWARE_FLASH, (bytes & (bytes - 1)) == 0u);
160 uint sectors = bytes / 4096u;
161 if (sectors <= 1u) {
162 return FLASH_DEVINFO_SIZE_NONE;
163 } else {
164 return (flash_devinfo_size_t) __builtin_ctz(sectors);
165 }
166}
167
186flash_devinfo_size_t flash_devinfo_get_cs_size(uint cs);
187
206void flash_devinfo_set_cs_size(uint cs, flash_devinfo_size_t size);
207
220bool flash_devinfo_get_d8h_erase_supported(void);
221
230void flash_devinfo_set_d8h_erase_supported(bool supported);
231
237uint flash_devinfo_get_cs_gpio(uint cs);
238
246void flash_devinfo_set_cs_gpio(uint cs, uint gpio);
247
248#endif // !PICO_RP2040
249
250#ifdef __cplusplus
251}
252#endif
253
254#endif
void flash_range_program(uint32_t flash_offs, const uint8_t *data, size_t count)
Program flash.
Definition flash.c:151
void flash_range_erase(uint32_t flash_offs, size_t count)
Erase areas of flash.
Definition flash.c:114
void flash_get_unique_id(uint8_t *id_out)
Get flash unique 64 bit identifier.
Definition flash.c:274
void flash_do_cmd(const uint8_t *txbuf, uint8_t *rxbuf, size_t count)
Execute bidirectional flash command.
Definition flash.c:205