aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-04-20 15:20:33 -0700
committerpx4dev <px4@purgatory.org>2013-04-20 15:20:33 -0700
commitf45e15615a55f8c6070c2598aa10b1dc8ea971b1 (patch)
treeba8a339abc11726ef42f9af24f84b66c91e5a8f6
parent7e0f8b3edaf584a48cd3bc3351e3205fd0106cdc (diff)
parentb149b834c835190fbb3f7e1914346d5e0620036d (diff)
downloadpx4-firmware-f45e15615a55f8c6070c2598aa10b1dc8ea971b1.tar.gz
px4-firmware-f45e15615a55f8c6070c2598aa10b1dc8ea971b1.tar.bz2
px4-firmware-f45e15615a55f8c6070c2598aa10b1dc8ea971b1.zip
Merge commit 'b149b834c835190fbb3f7e1914346d5e0620036d' into fmuv2_bringup
-rwxr-xr-xnuttx/configs/px4fmuv2/include/board.h11
-rwxr-xr-xnuttx/configs/px4fmuv2/nsh/defconfig35
-rw-r--r--src/drivers/boards/px4fmuv2/px4fmu_init.c25
3 files changed, 67 insertions, 4 deletions
diff --git a/nuttx/configs/px4fmuv2/include/board.h b/nuttx/configs/px4fmuv2/include/board.h
index fd8f78b80..be4cdcdfd 100755
--- a/nuttx/configs/px4fmuv2/include/board.h
+++ b/nuttx/configs/px4fmuv2/include/board.h
@@ -181,6 +181,17 @@
# define SDIO_SDXFR_CLKDIV (3 << SDIO_CLKCR_CLKDIV_SHIFT)
#endif
+/* DMA Channl/Stream Selections *****************************************************/
+/* Stream selections are arbitrary for now but might become important in the future
+ * is we set aside more DMA channels/streams.
+ *
+ * SDIO DMA
+ *   DMAMAP_SDIO_1 = Channel 4, Stream 3 <- may later be used by SPI DMA
+ *   DMAMAP_SDIO_2 = Channel 4, Stream 6
+ */
+
+#define DMAMAP_SDIO DMAMAP_SDIO_1
+
/* High-resolution timer
*/
#ifdef CONFIG_HRT_TIMER
diff --git a/nuttx/configs/px4fmuv2/nsh/defconfig b/nuttx/configs/px4fmuv2/nsh/defconfig
index d10309580..835998072 100755
--- a/nuttx/configs/px4fmuv2/nsh/defconfig
+++ b/nuttx/configs/px4fmuv2/nsh/defconfig
@@ -192,7 +192,7 @@ CONFIG_STM32_USART6=y
CONFIG_STM32_ADC1=y
CONFIG_STM32_ADC2=n
CONFIG_STM32_ADC3=n
-CONFIG_STM32_SDIO=n
+CONFIG_STM32_SDIO=y
CONFIG_STM32_SPI1=y
CONFIG_STM32_SYSCFG=y
CONFIG_STM32_TIM9=y
@@ -784,7 +784,7 @@ CONFIG_FS_BINFS=y
# CONFIG_MMCSD_SPICLOCK - Maximum SPI clock to drive MMC/SD card.
# Default is 20MHz, current setting 24 MHz
#
-CONFIG_MMCSD=n
+#CONFIG_MMCSD=n
# XXX need to rejig this for SDIO
#CONFIG_MMCSD_SPI=y
#CONFIG_MMCSD_NSLOTS=1
@@ -792,6 +792,33 @@ CONFIG_MMCSD=n
#CONFIG_MMCSD_SPICLOCK=24000000
#
+# Maintain legacy build behavior (revisit)
+#
+
+CONFIG_MMCSD=y
+CONFIG_MMCSD_SPI=y
+CONFIG_MMCSD_SDIO=y
+CONFIG_MTD=y
+
+#
+# SPI-based MMC/SD driver
+#
+CONFIG_MMCSD_NSLOTS=1
+CONFIG_MMCSD_READONLY=n
+CONFIG_MMCSD_SPICLOCK=12500000
+
+#
+# STM32 SDIO-based MMC/SD driver
+#
+CONFIG_SDIO_DMA=y
+#CONFIG_SDIO_PRI=128
+#CONFIG_SDIO_DMAPRIO
+#CONFIG_SDIO_WIDTH_D1_ONLY
+CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_MMCSUPPORT=n
+CONFIG_MMCSD_HAVECARDDETECT=n
+
+#
# Block driver buffering
#
# CONFIG_FS_READAHEAD
@@ -1008,8 +1035,8 @@ CONFIG_NSH_FATMOUNTPT=/tmp
# Architecture-specific NSH options
#
#CONFIG_NSH_MMCSDSPIPORTNO=3
-#CONFIG_NSH_MMCSDSLOTNO=0
-#CONFIG_NSH_MMCSDMINOR=0
+CONFIG_NSH_MMCSDSLOTNO=0
+CONFIG_NSH_MMCSDMINOR=0
#
diff --git a/src/drivers/boards/px4fmuv2/px4fmu_init.c b/src/drivers/boards/px4fmuv2/px4fmu_init.c
index 2fd3a2c1b..03ec5a255 100644
--- a/src/drivers/boards/px4fmuv2/px4fmu_init.c
+++ b/src/drivers/boards/px4fmuv2/px4fmu_init.c
@@ -55,6 +55,7 @@
#include <nuttx/arch.h>
#include <nuttx/spi.h>
#include <nuttx/i2c.h>
+#include <nuttx/sdio.h>
#include <nuttx/mmcsd.h>
#include <nuttx/analog/adc.h>
@@ -128,6 +129,7 @@ __EXPORT void stm32_boardinitialize(void)
static struct spi_dev_s *spi1;
static struct spi_dev_s *spi2;
+static struct sdio_dev_s *sdio;
#include <math.h>
@@ -226,5 +228,28 @@ __EXPORT int nsh_archinitialize(void)
message("[boot] Successfully initialized SPI port 2\n");
+ #ifdef CONFIG_MMCSD
+ /* First, get an instance of the SDIO interface */
+
+ sdio = sdio_initialize(CONFIG_NSH_MMCSDSLOTNO);
+ if (!sdio) {
+ message("nsh_archinitialize: Failed to initialize SDIO slot %d\n",
+ CONFIG_NSH_MMCSDSLOTNO);
+ return -ENODEV;
+ }
+
+ /* Now bind the SDIO interface to the MMC/SD driver */
+ int ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, sdio);
+ if (ret != OK) {
+ message("nsh_archinitialize: Failed to bind SDIO to the MMC/SD driver: %d\n", ret);
+ return ret;
+ }
+
+ /* Then let's guess and say that there is a card in the slot. There is no card detect GPIO. */
+ sdio_mediachange(sdio, true);
+
+ message("[boot] Initialized SDIO\n");
+ #endif
+
return OK;
}