19#ifndef HAL_FLASH_DEVICE_H
20#define HAL_FLASH_DEVICE_H
30#define SNOR_DEVICE_SUPPORTS_XIP TRUE
45#define JEDEC_CMD_READ_DISCOVERY_PARAMETER 0x5A
48#define JEDEC_CMD_WRITE_STATUS_REGISTER 0x01
49#define JEDEC_CMD_PAGE_PROGRAM 0x02
50#define JEDEC_CMD_READ 0x03
51#define JEDEC_CMD_WRITE_DISABLE 0x04
52#define JEDEC_CMD_READ_STATUS_REGISTER 0x05
53#define JEDEC_CMD_WRITE_ENABLE 0x06
54#define JEDEC_CMD_FAST_READ 0x0B
55#define JEDEC_CMD_SUBSECTOR_ERASE 0x20
56#define JEDEC_CMD_READ_CONFIGURATION_REGISTER 0x35
57#define JEDEC_CMD_READ_DUAL 0x3B
58#define JEDEC_CMD_BULK_ERASE 0xC7
59#define JEDEC_CMD_RESET_ENABLE 0x66
60#define JEDEC_CMD_READ_QUAD 0x6B
61#define JEDEC_CMD_GLOBAL_BLOCK_PROTECTION_UNLOCK 0x98
62#define JEDEC_CMD_RESET_MEMORY 0x99
69#define JEDEC_FLAGS_STS_BUSY 0x80U
76#define JEDEC_BUS_MODE_WSPI1L 1U
77#define JEDEC_BUS_MODE_WSPI2L 2U
78#define JEDEC_BUS_MODE_WSPI4L 4U
93#if !defined(JEDEC_SWITCH_WIDTH) || defined(__DOXYGEN__)
94#define JEDEC_SWITCH_WIDTH TRUE
105#if !defined(JEDEC_BUS_MODE) || defined(__DOXYGEN__)
106#define JEDEC_BUS_MODE JEDEC_BUS_MODE_WSPI4L
115#if !defined(JEDEC_NICE_WAITING) || defined(__DOXYGEN__)
116#define JEDEC_NICE_WAITING TRUE
122#if !defined(JEDEC_USE_SUB_SECTORS) || defined(__DOXYGEN__)
123#define JEDEC_USE_SUB_SECTORS FALSE
131#if !defined(JEDEC_READ_DUMMY_CYCLES) || defined(__DOXYGEN__)
132#define JEDEC_READ_DUMMY_CYCLES 8
139#if (JEDEC_READ_DUMMY_CYCLES < 1) || (JEDEC_READ_DUMMY_CYCLES > 15)
140#error "invalid JEDEC_READ_DUMMY_CYCLES value (1..15)"
146#define SNOR_WSPI_CFG_CMD (WSPI_CFG_CMD_MODE_ONE_LINE | \
147 WSPI_CFG_ADDR_MODE_NONE | \
148 WSPI_CFG_ALT_MODE_NONE | \
149 WSPI_CFG_DATA_MODE_NONE | \
150 WSPI_CFG_CMD_SIZE_8 | \
151 WSPI_CFG_ADDR_SIZE_24)
155#define SNOR_WSPI_CFG_CMD_ADDR (WSPI_CFG_CMD_MODE_ONE_LINE | \
156 WSPI_CFG_ADDR_MODE_ONE_LINE | \
157 WSPI_CFG_ALT_MODE_NONE | \
158 WSPI_CFG_DATA_MODE_NONE | \
159 WSPI_CFG_CMD_SIZE_8 | \
160 WSPI_CFG_ADDR_SIZE_24)
164#define SNOR_WSPI_CFG_CMD_DATA (WSPI_CFG_CMD_MODE_ONE_LINE | \
165 WSPI_CFG_ADDR_MODE_NONE | \
166 WSPI_CFG_ALT_MODE_NONE | \
167 WSPI_CFG_DATA_MODE_ONE_LINE | \
168 WSPI_CFG_CMD_SIZE_8 | \
169 WSPI_CFG_ADDR_SIZE_24)
173#define SNOR_WSPI_CFG_CMD_ADDR_DATA (WSPI_CFG_CMD_MODE_ONE_LINE | \
174 WSPI_CFG_ADDR_MODE_ONE_LINE | \
175 WSPI_CFG_ALT_MODE_NONE | \
176 WSPI_CFG_DATA_MODE_ONE_LINE | \
177 WSPI_CFG_CMD_SIZE_8 | \
178 WSPI_CFG_ADDR_SIZE_24)
192#if !defined(__DOXYGEN__)
196#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) && (WSPI_SUPPORTS_MEMMAP == TRUE)
205 size_t n, uint8_t *rp);
207 size_t n,
const uint8_t *pp);
210 flash_sector_t sector);
212 flash_sector_t sector);
215 size_t n, uint8_t *rp);
216#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) && \
217 (SNOR_DEVICE_SUPPORTS_XIP == TRUE)
void snor_activate_xip(SNORDriver *devp)
flash_error_t snor_device_verify_erase(SNORDriver *devp, flash_sector_t sector)
flash_error_t snor_device_query_erase(SNORDriver *devp, uint32_t *msec)
flash_error_t snor_device_read_sfdp(SNORDriver *devp, flash_offset_t offset, size_t n, uint8_t *rp)
void snor_reset_xip(SNORDriver *devp)
flash_error_t snor_device_start_erase_sector(SNORDriver *devp, flash_sector_t sector)
const wspi_command_t snor_memmap_read
Fast read command for memory mapped mode.
flash_error_t snor_device_read(SNORDriver *devp, flash_offset_t offset, size_t n, uint8_t *rp)
flash_error_t snor_device_program(SNORDriver *devp, flash_offset_t offset, size_t n, const uint8_t *pp)
flash_descriptor_t snor_descriptor
Flash descriptor.
void snor_device_init(SNORDriver *devp)
flash_error_t snor_device_start_erase_all(SNORDriver *devp)