25#ifndef HAL_SERIAL_NOR_H
26#define HAL_SERIAL_NOR_H
38#define SNOR_BUS_DRIVER_SPI 0U
39#define SNOR_BUS_DRIVER_WSPI 1U
45#define SNOR_BUFFER_SIZE 32
58#if !defined(SNOR_BUS_DRIVER) || defined(__DOXYGEN__)
59#define SNOR_BUS_DRIVER SNOR_BUS_DRIVER_WSPI
70#if !defined(SNOR_SHARED_BUS) || defined(__DOXYGEN__)
71#define SNOR_SHARED_BUS TRUE
78#if !defined(SNOR_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
79#define SNOR_USE_MUTUAL_EXCLUSION TRUE
87#if !defined(SNOR_SPI_4BYTES_ADDRESS) || defined(__DOXYGEN__)
88#define SNOR_SPI_4BYTES_ADDRESS FALSE
96#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_SPI) || defined(__DOXYGEN__)
97#define BUSConfig SPIConfig
98#define BUSDriver SPIDriver
99#elif SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
100#define BUSConfig WSPIConfig
101#define BUSDriver WSPIDriver
103#error "invalid SNOR_BUS_DRIVER setting"
121#define _snor_flash_methods_alone \
123 flash_error_t (*read_sfdp)(void *instance, \
124 flash_offset_t offset, \
131#define _snor_flash_methods \
132 _base_flash_methods \
133 _snor_flash_methods_alone
149#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) || defined(__DOXYGEN__)
176#if (SNOR_USE_MUTUAL_EXCLUSION == TRUE) || defined(__DOXYGEN__)
188#if SNOR_SHARED_BUS == FALSE
189#define bus_acquire(busp, config)
190#define bus_release(busp)
200#if SNOR_SHARED_BUS == TRUE
235#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) || defined(__DOXYGEN__)
236#if (WSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__)
246#include "hal_flash_device.h"
#define _base_flash_data
BaseFlash specific data.
uint32_t flash_offset_t
Type of a flash offset.
void bus_cmd(BUSDriver *busp, uint32_t cmd)
Sends a naked command.
void bus_cmd_addr_receive(BUSDriver *busp, uint32_t cmd, flash_offset_t offset, size_t n, uint8_t *p)
Sends a command followed by a flash address and a data receive phase.
void bus_cmd_addr_dummy_receive(BUSDriver *busp, uint32_t cmd, flash_offset_t offset, uint32_t dummy, size_t n, uint8_t *p)
Sends a command followed by a flash address, dummy cycles and a data receive phase.
void snorStop(SNORDriver *devp)
Deactivates the SNOR driver.
#define bus_acquire(busp, config)
void snorStart(SNORDriver *devp, const SNORConfig *config)
Configures and activates SNOR driver.
void bus_cmd_send(BUSDriver *busp, uint32_t cmd, size_t n, const uint8_t *p)
Sends a command followed by a data transmit phase.
#define bus_release(busp)
void bus_cmd_receive(BUSDriver *busp, uint32_t cmd, size_t n, uint8_t *p)
Sends a command followed by a data receive phase.
void snorMemoryUnmap(SNORDriver *devp)
Leaves the memory Mapping mode.
void bus_cmd_addr(BUSDriver *busp, uint32_t cmd, flash_offset_t offset)
Sends a command followed by a flash address.
void bus_cmd_addr_send(BUSDriver *busp, uint32_t cmd, flash_offset_t offset, size_t n, const uint8_t *p)
Sends a command followed by a flash address and a data transmit phase.
void snorMemoryMap(SNORDriver *devp, uint8_t **addrp)
Enters the memory Mapping mode.
void bus_cmd_dummy_receive(BUSDriver *busp, uint32_t cmd, uint32_t dummy, size_t n, uint8_t *p)
Sends a command followed by dummy cycles and a data receive phase.
struct snor_nocache_buffer snor_nocache_buffer_t
#define _snor_flash_methods
SNORDriver specific methods with inherited ones.
#define SNOR_BUFFER_SIZE
Size of the buffer for internal operations.
void snorObjectInit(SNORDriver *devp, snor_nocache_buffer_t *nocache)
Initializes an instance.
uint32_t mutex_t
Type of a mutex.
Generic flash driver class header.
Type of a SNOR configuration structure.
Type of SNOR flash class.
const struct SNORDriverVMT * vmt
SNORDriver Virtual Methods Table.
mutex_t mutex
Mutex protecting SNOR.
snor_nocache_buffer_t * nocache
Non-cacheable buffer associated to this instance.
_base_flash_data const SNORConfig * config
Current configuration data.
SNOR virtual methods table.
wspi_command_t cmd
Temporary command buffer.
uint8_t buf[SNOR_BUFFER_SIZE]
Temporary generic buffer.
Type of a WSPI command descriptor.