aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c')
-rw-r--r--os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c128
1 files changed, 62 insertions, 66 deletions
diff --git a/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c b/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c
index 032e6d0cc..de0631b6f 100644
--- a/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c
+++ b/os/hal/lib/complex/serial_nor/devices/micron_n25q/flash_device.c
@@ -64,7 +64,7 @@ flash_descriptor_t snor_descriptor = {
/* Driver local variables and types. */
/*===========================================================================*/
-#if JESD216_BUS_MODE != JESD216_BUS_MODE_SPI
+#if SNOR_BUS_MODE != SNOR_BUS_MODE_SPI
/* Initial N25Q_CMD_READ_ID command.*/
static const wspi_command_t n25q_cmd_read_id = {
.cmd = N25Q_CMD_READ_ID,
@@ -73,13 +73,13 @@ static const wspi_command_t n25q_cmd_read_id = {
WSPI_CFG_CMD_MODE_ONE_LINE |
WSPI_CFG_DATA_MODE_ONE_LINE,
#else
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI1L
WSPI_CFG_CMD_MODE_ONE_LINE |
WSPI_CFG_DATA_MODE_ONE_LINE,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI2L
WSPI_CFG_CMD_MODE_TWO_LINES |
WSPI_CFG_DATA_MODE_TWO_LINES,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI4L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI4L
WSPI_CFG_CMD_MODE_FOUR_LINES |
WSPI_CFG_DATA_MODE_FOUR_LINES,
#else
@@ -100,13 +100,13 @@ static const wspi_command_t n25q_cmd_write_evconf = {
WSPI_CFG_CMD_MODE_ONE_LINE |
WSPI_CFG_DATA_MODE_ONE_LINE,
#else
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI1L
WSPI_CFG_CMD_MODE_ONE_LINE |
WSPI_CFG_DATA_MODE_ONE_LINE,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI2L
WSPI_CFG_CMD_MODE_TWO_LINES |
WSPI_CFG_DATA_MODE_TWO_LINES,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI4L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI4L
WSPI_CFG_CMD_MODE_FOUR_LINES |
WSPI_CFG_DATA_MODE_FOUR_LINES,
#else
@@ -126,11 +126,11 @@ static const wspi_command_t n25q_cmd_write_enable = {
#if SNOR_SWITCH_WIDTH == TRUE
WSPI_CFG_CMD_MODE_ONE_LINE,
#else
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI1L
WSPI_CFG_CMD_MODE_ONE_LINE,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI2L
WSPI_CFG_CMD_MODE_TWO_LINES,
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI4L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI4L
WSPI_CFG_CMD_MODE_FOUR_LINES,
#else
WSPI_CFG_CMD_MODE_EIGHT_LINES,
@@ -142,14 +142,14 @@ static const wspi_command_t n25q_cmd_write_enable = {
};
/* Bus width initialization.*/
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI1L
static const uint8_t n25q_evconf_value[1] = {0xCF};
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI2L
static const uint8_t n25q_evconf_value[1] = {0x8F};
#else
static const uint8_t n25q_evconf_value[1] = {0x4F};
#endif
-#endif /* JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
+#endif /* SNOR_BUS_MODE != SNOR_BUS_MODE_SPI */
/*===========================================================================*/
/* Driver local functions. */
@@ -174,14 +174,14 @@ static flash_error_t n25q_poll_status(SNORDriver *devp) {
osalThreadSleepMilliseconds(1);
#endif
/* Read status command.*/
- jesd216_cmd_receive(devp->config->busp, N25Q_CMD_READ_FLAG_STATUS_REGISTER,
- 1, &sts);
+ bus_cmd_receive(devp->config->busp, N25Q_CMD_READ_FLAG_STATUS_REGISTER,
+ 1, &sts);
} while ((sts & N25Q_FLAGS_PROGRAM_ERASE) == 0U);
/* Checking for errors.*/
if ((sts & N25Q_FLAGS_ALL_ERRORS) != 0U) {
/* Clearing status register.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_CLEAR_FLAG_STATUS_REGISTER);
+ bus_cmd(devp->config->busp, N25Q_CMD_CLEAR_FLAG_STATUS_REGISTER);
/* Program operation failed.*/
return FLASH_ERROR_PROGRAM;
@@ -190,7 +190,7 @@ static flash_error_t n25q_poll_status(SNORDriver *devp) {
return FLASH_NO_ERROR;
}
-#if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI) || defined(__DOXYGEN__)
+#if (SNOR_BUS_MODE != SNOR_BUS_MODE_SPI) || defined(__DOXYGEN__)
static void n25q_reset_memory(SNORDriver *devp) {
/* 1x N25Q_CMD_RESET_ENABLE command.*/
@@ -215,7 +215,7 @@ static void n25q_reset_memory(SNORDriver *devp) {
rejected because shorter than 8 bits. If the device is in multiple
bits mode then the commands are accepted and the device is reset to
one bit mode.*/
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI4L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI4L
/* 4x N25Q_CMD_RESET_ENABLE command.*/
static const wspi_command_t cmd_reset_enable_4 = {
.cmd = N25Q_CMD_RESET_ENABLE,
@@ -264,7 +264,7 @@ static void n25q_reset_memory(SNORDriver *devp) {
wspiCommand(devp->config->busp, &cmd_reset_enable_1);
wspiCommand(devp->config->busp, &cmd_reset_memory_1);
}
-#endif /* #if JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
+#endif /* #if SNOR_BUS_MODE != SNOR_BUS_MODE_SPI */
static const uint8_t n25q_manufacturer_ids[] = N25Q_SUPPORTED_MANUFACTURE_IDS;
static const uint8_t n25q_memory_type_ids[] = N25Q_SUPPORTED_MEMORY_TYPE_IDS;
@@ -275,12 +275,12 @@ static const uint8_t n25q_memory_type_ids[] = N25Q_SUPPORTED_MEMORY_TYPE_IDS;
void snor_device_init(SNORDriver *devp) {
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_SPI
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_SPI
/* Reading device ID.*/
- jesd216_cmd_receive(devp->config->busp, N25Q_CMD_READ_ID,
- sizeof devp->device_id, devp->device_id);
+ bus_cmd_receive(devp->config->busp, N25Q_CMD_READ_ID,
+ sizeof devp->device_id, devp->device_id);
-#else /* JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
+#else /* SNOR_BUS_MODE != SNOR_BUS_MODE_SPI */
/* Attempting a reset of the XIP mode, it could be in an unexpected state
because a CPU reset does not reset the memory too.*/
snor_reset_xip(devp);
@@ -292,7 +292,7 @@ void snor_device_init(SNORDriver *devp) {
/* Reading device ID and unique ID.*/
wspiReceive(devp->config->busp, &n25q_cmd_read_id,
sizeof devp->device_id, devp->device_id);
-#endif /* JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
+#endif /* SNOR_BUS_MODE != SNOR_BUS_MODE_SPI */
/* Checking if the device is white listed.*/
osalDbgAssert(n25q_find_id(n25q_manufacturer_ids,
@@ -304,7 +304,7 @@ void snor_device_init(SNORDriver *devp) {
devp->device_id[1]),
"invalid memory type id");
-#if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI) && (SNOR_SWITCH_WIDTH == TRUE)
+#if (SNOR_BUS_MODE != SNOR_BUS_MODE_SPI) && (SNOR_SWITCH_WIDTH == TRUE)
/* Setting up final bus width.*/
wspiCommand(devp->config->busp, &n25q_cmd_write_enable);
wspiSend(devp->config->busp, &n25q_cmd_write_evconf, 1, n25q_evconf_value);
@@ -313,8 +313,7 @@ void snor_device_init(SNORDriver *devp) {
uint8_t id[3];
/* Reading ID again for confirmation.*/
- jesd216_cmd_receive(devp->config->busp, N25Q_CMD_MULTIPLE_IO_READ_ID,
- 3, id);
+ bus_cmd_receive(devp->config->busp, N25Q_CMD_MULTIPLE_IO_READ_ID, 3, id);
/* Checking if the device is white listed.*/
osalDbgAssert(memcmp(id, devp->device_id, 3) == 0,
@@ -326,16 +325,16 @@ void snor_device_init(SNORDriver *devp) {
snor_descriptor.sectors_count = (1U << (size_t)devp->device_id[2]) /
SECTOR_SIZE;
-#if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI)
+#if (SNOR_BUS_MODE != SNOR_BUS_MODE_SPI)
{
static const uint8_t flash_conf[1] = {
(SNOR_READ_DUMMY_CYCLES << 4U) | 0x0FU
};
/* Setting up the dummy cycles to be used for fast read operations.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
- jesd216_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
- 1, flash_conf);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
+ 1, flash_conf);
}
#endif
}
@@ -353,14 +352,14 @@ const flash_descriptor_t *snor_get_descriptor(void *instance) {
flash_error_t snor_device_read(SNORDriver *devp, flash_offset_t offset,
size_t n, uint8_t *rp) {
-#if JESD216_BUS_MODE != JESD216_BUS_MODE_SPI
+#if SNOR_BUS_MODE != SNOR_BUS_MODE_SPI
/* Fast read command in WSPI mode.*/
- jesd216_cmd_addr_dummy_receive(devp->config->busp, N25Q_CMD_FAST_READ,
- offset, SNOR_READ_DUMMY_CYCLES, n, rp);
+ bus_cmd_addr_dummy_receive(devp->config->busp, N25Q_CMD_FAST_READ,
+ offset, SNOR_READ_DUMMY_CYCLES, n, rp);
#else
/* Normal read command in SPI mode.*/
- jesd216_cmd_addr_receive(devp->config->busp, N25Q_CMD_READ,
- offset, n, rp);
+ bus_cmd_addr_receive(devp->config->busp, N25Q_CMD_READ,
+ offset, n, rp);
#endif
return FLASH_NO_ERROR;
@@ -380,19 +379,16 @@ flash_error_t snor_device_program(SNORDriver *devp, flash_offset_t offset,
}
/* Enabling write operation.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
/* Page program command.*/
- jesd216_cmd_addr_send(devp->config->busp, N25Q_CMD_PAGE_PROGRAM, offset,
- chunk, pp);
+ bus_cmd_addr_send(devp->config->busp, N25Q_CMD_PAGE_PROGRAM, offset,
+ chunk, pp);
/* Wait for status and check errors.*/
err = n25q_poll_status(devp);
if (err != FLASH_NO_ERROR) {
- /* Bus released.*/
- jesd216_bus_release(devp->config->busp);
-
return err;
}
@@ -408,10 +404,10 @@ flash_error_t snor_device_program(SNORDriver *devp, flash_offset_t offset,
flash_error_t snor_device_start_erase_all(SNORDriver *devp) {
/* Enabling write operation.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
/* Bulk erase command.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_BULK_ERASE);
+ bus_cmd(devp->config->busp, N25Q_CMD_BULK_ERASE);
return FLASH_NO_ERROR;
}
@@ -421,10 +417,10 @@ flash_error_t snor_device_start_erase_sector(SNORDriver *devp,
flash_offset_t offset = (flash_offset_t)(sector * SECTOR_SIZE);
/* Enabling write operation.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
/* Sector erase command.*/
- jesd216_cmd_addr(devp->config->busp, N25Q_CMD_SECTOR_ERASE, offset);
+ bus_cmd_addr(devp->config->busp, N25Q_CMD_SECTOR_ERASE, offset);
return FLASH_NO_ERROR;
}
@@ -441,14 +437,14 @@ flash_error_t snor_device_verify_erase(SNORDriver *devp,
while (n > 0U) {
uint8_t *p;
-#if JESD216_BUS_MODE != JESD216_BUS_MODE_SPI
- jesd216_cmd_addr_dummy_receive(devp->config->busp, N25Q_CMD_FAST_READ,
- offset, SNOR_READ_DUMMY_CYCLES,
- sizeof cmpbuf, cmpbuf);
+#if SNOR_BUS_MODE != SNOR_BUS_MODE_SPI
+ bus_cmd_addr_dummy_receive(devp->config->busp, N25Q_CMD_FAST_READ,
+ offset, SNOR_READ_DUMMY_CYCLES,
+ sizeof cmpbuf, cmpbuf);
#else
/* Normal read command in SPI mode.*/
- jesd216_cmd_addr_receive(devp->config->busp, N25Q_CMD_READ,
- offset, sizeof cmpbuf, cmpbuf);
+ bus_cmd_addr_receive(devp->config->busp, N25Q_CMD_READ,
+ offset, sizeof cmpbuf, cmpbuf);
#endif
/* Checking for erased state of current buffer.*/
@@ -472,8 +468,8 @@ flash_error_t snor_device_query_erase(SNORDriver *devp, uint32_t *msec) {
uint8_t sts;
/* Read status command.*/
- jesd216_cmd_receive(devp->config->busp, N25Q_CMD_READ_FLAG_STATUS_REGISTER,
- 1, &sts);
+ bus_cmd_receive(devp->config->busp, N25Q_CMD_READ_FLAG_STATUS_REGISTER,
+ 1, &sts);
/* If the P/E bit is zero (busy) or the flash in a suspended state then
report that the operation is still in progress.*/
@@ -493,7 +489,7 @@ flash_error_t snor_device_query_erase(SNORDriver *devp, uint32_t *msec) {
if ((sts & N25Q_FLAGS_ALL_ERRORS) != 0U) {
/* Clearing status register.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_CLEAR_FLAG_STATUS_REGISTER);
+ bus_cmd(devp->config->busp, N25Q_CMD_CLEAR_FLAG_STATUS_REGISTER);
/* Erase operation failed.*/
return FLASH_ERROR_ERASE;
@@ -513,16 +509,16 @@ flash_error_t snor_device_read_sfdp(SNORDriver *devp, flash_offset_t offset,
return FLASH_NO_ERROR;
}
-#if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI) || defined(__DOXYGEN__)
+#if (SNOR_BUS_MODE != SNOR_BUS_MODE_SPI) || defined(__DOXYGEN__)
void snor_activate_xip(SNORDriver *devp) {
static const uint8_t flash_status_xip[1] = {
(SNOR_READ_DUMMY_CYCLES << 4U) | 0x07U
};
/* Activating XIP mode in the device.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
- jesd216_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
- 1, flash_status_xip);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
+ 1, flash_status_xip);
}
void snor_reset_xip(SNORDriver *devp) {
@@ -538,13 +534,13 @@ void snor_reset_xip(SNORDriver *devp) {
cmd.dummy = SNOR_READ_DUMMY_CYCLES - 2;
cmd.cfg = WSPI_CFG_CMD_MODE_NONE |
WSPI_CFG_ADDR_SIZE_24 |
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+#if SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI1L
WSPI_CFG_ADDR_MODE_ONE_LINE |
WSPI_CFG_DATA_MODE_ONE_LINE |
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI2L
WSPI_CFG_ADDR_MODE_TWO_LINES |
WSPI_CFG_DATA_MODE_TWO_LINES |
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI4L
+#elif SNOR_BUS_MODE == SNOR_BUS_MODE_WSPI4L
WSPI_CFG_ADDR_MODE_FOUR_LINES |
WSPI_CFG_DATA_MODE_FOUR_LINES |
#else
@@ -556,12 +552,12 @@ void snor_reset_xip(SNORDriver *devp) {
wspiReceive(devp->config->busp, &cmd, 1, buf);
/* Enabling write operation.*/
- jesd216_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
+ bus_cmd(devp->config->busp, N25Q_CMD_WRITE_ENABLE);
/* Rewriting volatile configuration register.*/
- jesd216_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
- 1, flash_conf);
+ bus_cmd_send(devp->config->busp, N25Q_CMD_WRITE_V_CONF_REGISTER,
+ 1, flash_conf);
}
-#endif /* #if JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
+#endif /* SNOR_BUS_MODE != SNOR_BUS_MODE_SPI */
/** @} */