aboutsummaryrefslogtreecommitdiffstats
path: root/os/ex/Micron/m25q.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2016-05-26 17:26:47 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2016-05-26 17:26:47 +0000
commit1c909fee7f266f2cad2243e4f404c972acfa4445 (patch)
treea535684acb377275236974577af5bffcb637f47c /os/ex/Micron/m25q.c
parent3fa83ef942331690859798d259dd2dc621e7ea28 (diff)
downloadChibiOS-1c909fee7f266f2cad2243e4f404c972acfa4445.tar.gz
ChibiOS-1c909fee7f266f2cad2243e4f404c972acfa4445.tar.bz2
ChibiOS-1c909fee7f266f2cad2243e4f404c972acfa4445.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9537 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/ex/Micron/m25q.c')
-rw-r--r--os/ex/Micron/m25q.c60
1 files changed, 56 insertions, 4 deletions
diff --git a/os/ex/Micron/m25q.c b/os/ex/Micron/m25q.c
index c43fb7fe1..212d5b787 100644
--- a/os/ex/Micron/m25q.c
+++ b/os/ex/Micron/m25q.c
@@ -839,9 +839,6 @@ void m25qObjectInit(M25QDriver *devp) {
devp->vmt = &m25q_vmt;
devp->state = FLASH_STOP;
devp->config = NULL;
-#if (M25Q_BUS_MODE != M25Q_BUS_MODE_SPI) || defined(__DOXYGEN__)
- devp->qspi_mode = 0U;
-#endif
}
static const qspi_command_t cmd_test_reset_enable_4 = {
@@ -951,7 +948,7 @@ 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 M25QDriver object
*
* @api
*/
@@ -981,4 +978,59 @@ void m25qStop(M25QDriver *devp) {
}
}
+#if (M25Q_BUS_MODE != M25Q_BUS_MODE_SPI) || defined(__DOXYGEN__)
+#if (QSPI_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
+ * feature.
+ *
+ * @param[in] devp pointer to the @p M25QDriver 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;
+
+ cmd.cfg = QSPI_CFG_CMD(M25Q_CMD_FAST_READ) |
+ QSPI_CFG_ADDR_SIZE_24 |
+#if M25Q_BUS_MODE == M25Q_BUS_MODE_QSPI1L
+ QSPI_CFG_CMD_MODE_ONE_LINE |
+ QSPI_CFG_ADDR_MODE_ONE_LINE |
+ QSPI_CFG_ALT_MODE_ONE_LINE |
+ QSPI_CFG_DATA_MODE_ONE_LINE |
+#elif M25Q_BUS_MODE == M25Q_BUS_MODE_QSPI2L
+ QSPI_CFG_CMD_MODE_TWO_LINES |
+ QSPI_CFG_ADDR_MODE_TWO_LINES |
+ QSPI_CFG_ALT_MODE_TWO_LINES |
+ QSPI_CFG_DATA_MODE_TWO_LINES |
+#else
+ QSPI_CFG_CMD_MODE_FOUR_LINES |
+ QSPI_CFG_ADDR_MODE_FOUR_LINES |
+ QSPI_CFG_ALT_MODE_FOUR_LINES |
+ QSPI_CFG_DATA_MODE_FOUR_LINES |
+#endif
+ QSPI_CFG_SIOO |
+ QSPI_CFG_DUMMY_CYCLES(M25Q_READ_DUMMY_CYCLES);
+
+ qspiMapFlash(devp->config->qspip, &cmd, addrp);
+}
+
+/**
+ * @brief Leaves the memory Mapping mode.
+ *
+ * @param[in] devp pointer to the @p M25QDriver object
+ *
+ * @api
+ */
+void m25qMemoryUnmap(M25QDriver *devp) {
+
+ qspiUnmapFlash(devp->config->qspip);
+}
+#endif /* QSPI_SUPPORTS_MEMMAP == TRUE */
+#endif /* M25Q_BUS_MODE != M25Q_BUS_MODE_SPI */
+
/** @} */