42 size_t n, uint8_t *rp);
44 size_t n,
const uint8_t *pp);
54 size_t n, uint8_t *rp);
84 return &snor_descriptor;
88 size_t n, uint8_t *rp) {
92 osalDbgCheck((instance != NULL) && (rp != NULL) && (n > 0U));
93 osalDbgCheck((
size_t)offset + n <= (
size_t)snor_descriptor.sectors_count *
94 (
size_t)snor_descriptor.sectors_size);
109 err = snor_device_read(devp, offset, n, rp);
121 size_t n,
const uint8_t *pp) {
125 osalDbgCheck((instance != NULL) && (pp != NULL) && (n > 0U));
126 osalDbgCheck((
size_t)offset + n <= (
size_t)snor_descriptor.sectors_count *
127 (
size_t)snor_descriptor.sectors_size);
142 err = snor_device_program(devp, offset, n, pp);
172 err = snor_device_start_erase_all(devp);
201 err = snor_device_start_erase_sector(devp, sector);
230 err = snor_device_verify_erase(devp, sector);
256 err = snor_device_query_erase(devp, msec);
274 size_t n, uint8_t *rp) {
278 osalDbgCheck((instance != NULL) && (rp != NULL) && (n > 0U));
290 err = snor_device_read_sfdp(devp, offset, n, rp);
304#if (SNOR_USE_MUTUAL_EXCLUSION == TRUE)
317#if (SNOR_USE_MUTUAL_EXCLUSION == TRUE)
329#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_SPI) || defined(__DOXYGEN__)
331#if (SNOR_SPI_4BYTES_ADDRESS == TRUE)
335 buf[1] = (uint8_t)(offset >> 24);
336 buf[2] = (uint8_t)(offset >> 16);
337 buf[3] = (uint8_t)(offset >> 8);
338 buf[4] = (uint8_t)(offset >> 0);
344 buf[1] = (uint8_t)(offset >> 16);
345 buf[2] = (uint8_t)(offset >> 8);
346 buf[3] = (uint8_t)(offset >> 0);
356#if ((SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) && \
357 (SNOR_SHARED_BUS == TRUE)) || defined(__DOXYGEN__)
371 if (busp->config != config) {
389#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_SPI) && \
390 (SNOR_SHARED_BUS == TRUE)
394 if (busp->config != config) {
414#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
430#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
434 mode.
cfg = SNOR_WSPI_CFG_CMD;
460#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
464 mode.
cfg = SNOR_WSPI_CFG_CMD_DATA;
494#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
498 mode.
cfg = SNOR_WSPI_CFG_CMD_DATA;
524#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
528 mode.
cfg = SNOR_WSPI_CFG_CMD_ADDR;
557#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
561 mode.
cfg = SNOR_WSPI_CFG_CMD_ADDR_DATA;
591#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
595 mode.
cfg = SNOR_WSPI_CFG_CMD_ADDR_DATA;
625#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
629 mode.
cfg = SNOR_WSPI_CFG_CMD_DATA;
637 osalDbgAssert((dummy & 7) == 0U,
"multiple of 8 dummy cycles");
669#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
673 mode.
cfg = SNOR_WSPI_CFG_CMD_ADDR_DATA;
679 osalDbgAssert((dummy & 7) == 0U,
"multiple of 8 dummy cycles");
707#if SNOR_USE_MUTUAL_EXCLUSION == TRUE
732#if SNOR_SHARED_BUS == FALSE
733#if SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI
735#elif SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_SPI
741 snor_device_init(devp);
782#if (SNOR_BUS_DRIVER == SNOR_BUS_DRIVER_WSPI) || defined(__DOXYGEN__)
783#if (WSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__)
801#if SNOR_DEVICE_SUPPORTS_XIP == TRUE
803 snor_activate_xip(devp);
828#if SNOR_DEVICE_SUPPORTS_XIP == TRUE
829 snor_reset_xip(devp);
uint32_t flash_sector_t
Type of a flash sector number.
uint32_t flash_offset_t
Type of a flash offset.
flash_error_t
Type of a flash error code.
@ FLASH_ERROR_UNIMPLEMENTED
void bus_cmd(BUSDriver *busp, uint32_t cmd)
Sends a naked command.
static flash_error_t snor_start_erase_all(void *instance)
static flash_error_t snor_acquire_exclusive(void *instance)
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.
static const struct SNORDriverVMT snor_vmt
Virtual methods table.
static flash_error_t snor_start_erase_sector(void *instance, flash_sector_t sector)
#define bus_release(busp)
static flash_error_t snor_verify_erase(void *instance, flash_sector_t sector)
static flash_error_t snor_program(void *instance, flash_offset_t offset, size_t n, const uint8_t *pp)
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 snor_spi_cmd_addr(BUSDriver *busp, uint32_t cmd, flash_offset_t offset)
static flash_error_t snor_read(void *instance, flash_offset_t offset, size_t n, uint8_t *rp)
void bus_cmd_addr(BUSDriver *busp, uint32_t cmd, flash_offset_t offset)
Sends a command followed by a flash address.
static flash_error_t snor_query_erase(void *instance, uint32_t *msec)
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.
static flash_error_t snor_release_exclusive(void *instance)
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.
void bus_stop(BUSDriver *busp)
Stops the underlying bus driver.
static flash_error_t snor_read_sfdp(void *instance, flash_offset_t offset, size_t n, uint8_t *rp)
struct snor_nocache_buffer snor_nocache_buffer_t
static const flash_descriptor_t * snor_get_descriptor(void *instance)
Returns a pointer to the device descriptor.
void snorObjectInit(SNORDriver *devp, snor_nocache_buffer_t *nocache)
Initializes an instance.
static void osalMutexObjectInit(mutex_t *mp)
Initializes a mutex_t object.
void osalMutexLock(mutex_t *mp)
Locks the specified mutex.
#define osalDbgAssert(c, remark)
Condition assertion.
void osalMutexUnlock(mutex_t *mp)
Unlocks the specified mutex.
#define osalDbgCheck(c)
Function parameters check.
void spiSelect(SPIDriver *spip)
Asserts the slave select signal and prepares for transfers.
void spiReleaseBus(SPIDriver *spip)
Releases exclusive access to the SPI bus.
void spiSend(SPIDriver *spip, size_t n, const void *txbuf)
Sends data over the SPI bus.
void spiIgnore(SPIDriver *spip, size_t n)
Ignores data on the SPI bus.
void spiAcquireBus(SPIDriver *spip)
Gains exclusive access to the SPI bus.
msg_t spiStart(SPIDriver *spip, const SPIConfig *config)
Configures and activates the SPI peripheral.
void spiStop(SPIDriver *spip)
Deactivates the SPI peripheral.
void spiReceive(SPIDriver *spip, size_t n, void *rxbuf)
Receives data from the SPI bus.
void spiUnselect(SPIDriver *spip)
Deasserts the slave select signal.
void wspiMapFlash(WSPIDriver *wspip, const wspi_command_t *cmdp, uint8_t **addrp)
Maps in memory space a WSPI flash device.
void wspiAcquireBus(WSPIDriver *wspip)
Gains exclusive access to the WSPI bus.
msg_t wspiStart(WSPIDriver *wspip, const WSPIConfig *config)
Configures and activates the WSPI peripheral.
bool wspiReceive(WSPIDriver *wspip, const wspi_command_t *cmdp, size_t n, uint8_t *rxbuf)
Sends a command then receives data over the WSPI bus.
void wspiReleaseBus(WSPIDriver *wspip)
Releases exclusive access to the WSPI bus.
bool wspiCommand(WSPIDriver *wspip, const wspi_command_t *cmdp)
Sends a command without data phase.
bool wspiSend(WSPIDriver *wspip, const wspi_command_t *cmdp, size_t n, const uint8_t *txbuf)
Sends a command with data over the WSPI bus.
void wspiUnmapFlash(WSPIDriver *wspip)
Unmaps from memory space a WSPI flash device.
void wspiStop(WSPIDriver *wspip)
Deactivates the WSPI peripheral.
Serial NOR driver 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.
Type of a flash device descriptor.
Type of a WSPI command descriptor.
uint32_t dummy
Number of dummy cycles to be inserted.
uint32_t cfg
Transfer configuration field.
uint32_t alt
Alternate phase data.
uint32_t addr
Address phase data.
uint32_t cmd
Command phase data.