aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/lib/complex/serial_nor/serial_nor.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-10-04 14:36:34 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-10-04 14:36:34 +0000
commit887ff945a901fac1fe18d6be7367b7f405a99e1a (patch)
treefcfb99a686af80265943664dbd1e2587c4e6623c /os/hal/lib/complex/serial_nor/serial_nor.c
parent2dd28213f179c0a6e0a1f889ee19f803df53c42f (diff)
downloadChibiOS-887ff945a901fac1fe18d6be7367b7f405a99e1a.tar.gz
ChibiOS-887ff945a901fac1fe18d6be7367b7f405a99e1a.tar.bz2
ChibiOS-887ff945a901fac1fe18d6be7367b7f405a99e1a.zip
Flash infrastructure rework based on WSPI, not complete.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12320 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/hal/lib/complex/serial_nor/serial_nor.c')
-rw-r--r--os/hal/lib/complex/serial_nor/serial_nor.c165
1 files changed, 83 insertions, 82 deletions
diff --git a/os/hal/lib/complex/serial_nor/serial_nor.c b/os/hal/lib/complex/serial_nor/serial_nor.c
index b4c0970b7..3c0b2cd28 100644
--- a/os/hal/lib/complex/serial_nor/serial_nor.c
+++ b/os/hal/lib/complex/serial_nor/serial_nor.c
@@ -24,7 +24,7 @@
*/
#include "hal.h"
-#include "m25q.h"
+#include "serial_nor.h"
/*===========================================================================*/
/* Driver local definitions. */
@@ -38,42 +38,42 @@
/* Driver local variables and types. */
/*===========================================================================*/
-static flash_error_t m25q_read(void *instance, flash_offset_t offset,
+static flash_error_t snor_read(void *instance, flash_offset_t offset,
size_t n, uint8_t *rp);
-static flash_error_t m25q_program(void *instance, flash_offset_t offset,
+static flash_error_t snor_program(void *instance, flash_offset_t offset,
size_t n, const uint8_t *pp);
-static flash_error_t m25q_start_erase_all(void *instance);
-static flash_error_t m25q_start_erase_sector(void *instance,
+static flash_error_t snor_start_erase_all(void *instance);
+static flash_error_t snor_start_erase_sector(void *instance,
flash_sector_t sector);
-static flash_error_t m25q_verify_erase(void *instance,
+static flash_error_t snor_verify_erase(void *instance,
flash_sector_t sector);
-static flash_error_t m25q_query_erase(void *instance, uint32_t *msec);
-static flash_error_t m25q_read_sfdp(void *instance, flash_offset_t offset,
+static flash_error_t snor_query_erase(void *instance, uint32_t *msec);
+static flash_error_t snor_read_sfdp(void *instance, flash_offset_t offset,
size_t n, uint8_t *rp);
/**
* @brief Virtual methods table.
*/
-static const struct M25QDriverVMT m25q_vmt = {
+static const struct SNORDriverVMT snor_vmt = {
(size_t)0,
- m25q_get_descriptor, m25q_read, m25q_program,
- m25q_start_erase_all, m25q_start_erase_sector,
- m25q_query_erase, m25q_verify_erase,
- m25q_read_sfdp
+ snor_get_descriptor, snor_read, snor_program,
+ snor_start_erase_all, snor_start_erase_sector,
+ snor_query_erase, snor_verify_erase,
+ snor_read_sfdp
};
/*===========================================================================*/
/* Driver local functions. */
/*===========================================================================*/
-static flash_error_t m25q_read(void *instance, flash_offset_t offset,
+static flash_error_t snor_read(void *instance, flash_offset_t offset,
size_t n, uint8_t *rp) {
- M25QDriver *devp = (M25QDriver *)instance;
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck((instance != NULL) && (rp != NULL) && (n > 0U));
- osalDbgCheck((size_t)offset + n <= (size_t)m25q_descriptor.sectors_count *
- (size_t)m25q_descriptor.sectors_size);
+ osalDbgCheck((size_t)offset + n <= (size_t)snor_descriptor.sectors_count *
+ (size_t)snor_descriptor.sectors_size);
osalDbgAssert((devp->state == FLASH_READY) || (devp->state == FLASH_ERASE),
"invalid state");
@@ -88,7 +88,7 @@ static flash_error_t m25q_read(void *instance, flash_offset_t offset,
devp->state = FLASH_READ;
/* Actual read implementation.*/
- err = m25q_device_read(devp, offset, n, rp);
+ err = snor_device_read(devp, offset, n, rp);
/* Ready state again.*/
devp->state = FLASH_READY;
@@ -99,14 +99,14 @@ static flash_error_t m25q_read(void *instance, flash_offset_t offset,
return err;
}
-static flash_error_t m25q_program(void *instance, flash_offset_t offset,
+static flash_error_t snor_program(void *instance, flash_offset_t offset,
size_t n, const uint8_t *pp) {
- M25QDriver *devp = (M25QDriver *)instance;
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck((instance != NULL) && (pp != NULL) && (n > 0U));
- osalDbgCheck((size_t)offset + n <= (size_t)m25q_descriptor.sectors_count *
- (size_t)m25q_descriptor.sectors_size);
+ osalDbgCheck((size_t)offset + n <= (size_t)snor_descriptor.sectors_count *
+ (size_t)snor_descriptor.sectors_size);
osalDbgAssert((devp->state == FLASH_READY) || (devp->state == FLASH_ERASE),
"invalid state");
@@ -121,7 +121,7 @@ static flash_error_t m25q_program(void *instance, flash_offset_t offset,
devp->state = FLASH_PGM;
/* Actual program implementation.*/
- err = m25q_device_program(devp, offset, n, pp);
+ err = snor_device_program(devp, offset, n, pp);
/* Ready state again.*/
devp->state = FLASH_READY;
@@ -132,8 +132,8 @@ static flash_error_t m25q_program(void *instance, flash_offset_t offset,
return err;
}
-static flash_error_t m25q_start_erase_all(void *instance) {
- M25QDriver *devp = (M25QDriver *)instance;
+static flash_error_t snor_start_erase_all(void *instance) {
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck(instance != NULL);
@@ -151,7 +151,7 @@ static flash_error_t m25q_start_erase_all(void *instance) {
devp->state = FLASH_ERASE;
/* Actual erase implementation.*/
- err = m25q_device_start_erase_all(devp);
+ err = snor_device_start_erase_all(devp);
/* Ready state again.*/
devp->state = FLASH_READY;
@@ -162,13 +162,13 @@ static flash_error_t m25q_start_erase_all(void *instance) {
return err;
}
-static flash_error_t m25q_start_erase_sector(void *instance,
+static flash_error_t snor_start_erase_sector(void *instance,
flash_sector_t sector) {
- M25QDriver *devp = (M25QDriver *)instance;
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck(instance != NULL);
- osalDbgCheck(sector < m25q_descriptor.sectors_count);
+ osalDbgCheck(sector < snor_descriptor.sectors_count);
osalDbgAssert((devp->state == FLASH_READY) || (devp->state == FLASH_ERASE),
"invalid state");
@@ -183,7 +183,7 @@ static flash_error_t m25q_start_erase_sector(void *instance,
devp->state = FLASH_ERASE;
/* Actual erase implementation.*/
- err = m25q_device_start_erase_sector(devp, sector);
+ err = snor_device_start_erase_sector(devp, sector);
/* Bus released.*/
jesd216_bus_release(devp->config->busp);
@@ -191,13 +191,13 @@ static flash_error_t m25q_start_erase_sector(void *instance,
return err;
}
-static flash_error_t m25q_verify_erase(void *instance,
+static flash_error_t snor_verify_erase(void *instance,
flash_sector_t sector) {
- M25QDriver *devp = (M25QDriver *)instance;
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck(instance != NULL);
- osalDbgCheck(sector < m25q_descriptor.sectors_count);
+ osalDbgCheck(sector < snor_descriptor.sectors_count);
osalDbgAssert((devp->state == FLASH_READY) || (devp->state == FLASH_ERASE),
"invalid state");
@@ -212,7 +212,7 @@ static flash_error_t m25q_verify_erase(void *instance,
devp->state = FLASH_READ;
/* Actual verify erase implementation.*/
- err = m25q_device_verify_erase(devp, sector);
+ err = snor_device_verify_erase(devp, sector);
/* Ready state again.*/
devp->state = FLASH_READY;
@@ -223,8 +223,8 @@ static flash_error_t m25q_verify_erase(void *instance,
return err;
}
-static flash_error_t m25q_query_erase(void *instance, uint32_t *msec) {
- M25QDriver *devp = (M25QDriver *)instance;
+static flash_error_t snor_query_erase(void *instance, uint32_t *msec) {
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck(instance != NULL);
@@ -238,7 +238,7 @@ static flash_error_t m25q_query_erase(void *instance, uint32_t *msec) {
jesd216_bus_acquire(devp->config->busp, devp->config->buscfg);
/* Actual query erase implementation.*/
- err = m25q_device_query_erase(devp, msec);
+ err = snor_device_query_erase(devp, msec);
/* The device is ready to accept commands.*/
if (err == FLASH_NO_ERROR) {
@@ -255,9 +255,9 @@ static flash_error_t m25q_query_erase(void *instance, uint32_t *msec) {
return err;
}
-static flash_error_t m25q_read_sfdp(void *instance, flash_offset_t offset,
+static flash_error_t snor_read_sfdp(void *instance, flash_offset_t offset,
size_t n, uint8_t *rp) {
- M25QDriver *devp = (M25QDriver *)instance;
+ SNORDriver *devp = (SNORDriver *)instance;
flash_error_t err;
osalDbgCheck((instance != NULL) && (rp != NULL) && (n > 0U));
@@ -272,7 +272,7 @@ static flash_error_t m25q_read_sfdp(void *instance, flash_offset_t offset,
jesd216_bus_acquire(devp->config->busp, devp->config->buscfg);
/* Actual read SFDP implementation.*/
- err = m25q_device_read_sfdp(devp, offset, n, rp);
+ err = snor_device_read_sfdp(devp, offset, n, rp);
/* The device is ready to accept commands.*/
if (err == FLASH_NO_ERROR) {
@@ -292,15 +292,15 @@ static flash_error_t m25q_read_sfdp(void *instance, flash_offset_t offset,
/**
* @brief Initializes an instance.
*
- * @param[out] devp pointer to the @p M25QDriver object
+ * @param[out] devp pointer to the @p SNORDriver object
*
* @init
*/
-void m25qObjectInit(M25QDriver *devp) {
+void m25qObjectInit(SNORDriver *devp) {
osalDbgCheck(devp != NULL);
- devp->vmt = &m25q_vmt;
+ devp->vmt = &snor_vmt;
devp->state = FLASH_STOP;
devp->config = NULL;
}
@@ -308,12 +308,12 @@ void m25qObjectInit(M25QDriver *devp) {
/**
* @brief Configures and activates N25Q128 driver.
*
- * @param[in] devp pointer to the @p M25QDriver object
+ * @param[in] devp pointer to the @p SNORDriver object
* @param[in] config pointer to the configuration
*
* @api
*/
-void m25qStart(M25QDriver *devp, const M25QConfig *config) {
+void m25qStart(SNORDriver *devp, const SNORConfig *config) {
osalDbgCheck((devp != NULL) && (config != NULL));
osalDbgAssert(devp->state != FLASH_UNINIT, "invalid state");
@@ -326,7 +326,7 @@ void m25qStart(M25QDriver *devp, const M25QConfig *config) {
jesd216_bus_acquire(devp->config->busp, devp->config->buscfg);
/* Device identification and initialization.*/
- m25q_device_init(devp);
+ snor_device_init(devp);
/* Driver in ready state.*/
devp->state = FLASH_READY;
@@ -339,11 +339,11 @@ void m25qStart(M25QDriver *devp, const M25QConfig *config) {
/**
* @brief Deactivates the N25Q128 driver.
*
- * @param[in] devp pointer to the @p M25QDriver object
+ * @param[in] devp pointer to the @p SNORDriver object
*
* @api
*/
-void m25qStop(M25QDriver *devp) {
+void m25qStop(SNORDriver *devp) {
osalDbgCheck(devp != NULL);
osalDbgAssert(devp->state != FLASH_UNINIT, "invalid state");
@@ -368,51 +368,52 @@ void m25qStop(M25QDriver *devp) {
}
#if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI) || defined(__DOXYGEN__)
-#if (QSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__)
+#if (WSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__)
/**
* @brief Enters the memory Mapping mode.
- * @details The memory mapping mode is only available when the QSPI mode
- * is selected and the underlying QSPI controller supports the
+ * @details The memory mapping mode is only available when the WSPI mode
+ * is selected and the underlying WSPI controller supports the
* feature.
*
- * @param[in] devp pointer to the @p M25QDriver object
+ * @param[in] devp pointer to the @p SNORDriver object
* @param[out] addrp pointer to the memory start address of the mapped
* flash or @p NULL
*
* @api
*/
-void m25qMemoryMap(M25QDriver *devp, uint8_t **addrp) {
- qspi_command_t cmd;
+void m25qMemoryMap(SNORDriver *devp, uint8_t **addrp) {
+ wspi_command_t cmd;
/* Bus acquisition.*/
jesd216_bus_acquire(devp->config->busp, devp->config->buscfg);
/* Activating XIP mode in the device.*/
- m25q_activate_xip(devp);
-
- /* Putting the QSPI driver in memory mapped mode.*/
- cmd.cfg = QSPI_CFG_CMD(M25Q_CMD_FAST_READ) |
- QSPI_CFG_ADDR_SIZE_24 |
-#if JESD216_BUS_MODE == JESD216_BUS_MODE_QSPI1L
- QSPI_CFG_CMD_MODE_ONE_LINE |
- QSPI_CFG_ADDR_MODE_ONE_LINE |
- QSPI_CFG_DATA_MODE_ONE_LINE |
-#elif JESD216_BUS_MODE == JESD216_BUS_MODE_QSPI2L
- QSPI_CFG_CMD_MODE_TWO_LINES |
- QSPI_CFG_ADDR_MODE_TWO_LINES |
- QSPI_CFG_DATA_MODE_TWO_LINES |
+ snor_activate_xip(devp);
+
+ /* Putting the WSPI driver in memory mapped mode.
+ TODO: Put this in the device code.*/
+ cmd.cmd = N25Q_CMD_FAST_READ;
+ cmd.dummy = SNOR_READ_DUMMY_CYCLES - 2;
+ cmd.cfg = WSPI_CFG_ADDR_SIZE_24 |
+#if JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI1L
+ WSPI_CFG_CMD_MODE_ONE_LINE |
+ WSPI_CFG_ADDR_MODE_ONE_LINE |
+ WSPI_CFG_DATA_MODE_ONE_LINE |
+#elif JESD216_BUS_MODE == JESD216_BUS_MODE_WSPI2L
+ WSPI_CFG_CMD_MODE_TWO_LINES |
+ WSPI_CFG_ADDR_MODE_TWO_LINES |
+ WSPI_CFG_DATA_MODE_TWO_LINES |
#else
- QSPI_CFG_CMD_MODE_FOUR_LINES |
- QSPI_CFG_ADDR_MODE_FOUR_LINES |
- QSPI_CFG_DATA_MODE_FOUR_LINES |
+ WSPI_CFG_CMD_MODE_FOUR_LINES |
+ WSPI_CFG_ADDR_MODE_FOUR_LINES |
+ WSPI_CFG_DATA_MODE_FOUR_LINES |
#endif
- QSPI_CFG_ALT_MODE_FOUR_LINES | /* Always 4 lines, note.*/
- QSPI_CFG_ALT_SIZE_8 |
- QSPI_CFG_SIOO |
- QSPI_CFG_DUMMY_CYCLES(M25Q_READ_DUMMY_CYCLES - 2);
+ WSPI_CFG_ALT_MODE_FOUR_LINES | /* Always 4 lines, note.*/
+ WSPI_CFG_ALT_SIZE_8 |
+ WSPI_CFG_SIOO;
- /* Starting QSPI memory mapped mode.*/
- qspiMapFlash(devp->config->busp, &cmd, addrp);
+ /* Starting WSPI memory mapped mode.*/
+ wspiMapFlash(devp->config->busp, &cmd, addrp);
/* Bus release.*/
jesd216_bus_release(devp->config->busp);
@@ -421,24 +422,24 @@ void m25qMemoryMap(M25QDriver *devp, uint8_t **addrp) {
/**
* @brief Leaves the memory Mapping mode.
*
- * @param[in] devp pointer to the @p M25QDriver object
+ * @param[in] devp pointer to the @p SNORDriver object
*
* @api
*/
-void m25qMemoryUnmap(M25QDriver *devp) {
+void m25qMemoryUnmap(SNORDriver *devp) {
/* Bus acquisition.*/
jesd216_bus_acquire(devp->config->busp, devp->config->buscfg);
- /* Stopping QSPI memory mapped mode.*/
- qspiUnmapFlash(devp->config->busp);
+ /* Stopping WSPI memory mapped mode.*/
+ wspiUnmapFlash(devp->config->busp);
- m25q_reset_xip(devp);
+ snor_reset_xip(devp);
/* Bus release.*/
jesd216_bus_release(devp->config->busp);
}
-#endif /* QSPI_SUPPORTS_MEMMAP == TRUE */
+#endif /* WSPI_SUPPORTS_MEMMAP == TRUE */
#endif /* JESD216_BUS_MODE != JESD216_BUS_MODE_SPI */
/** @} */