From b822966e8eee37569e34636ea1237e5d534286de Mon Sep 17 00:00:00 2001 From: DanielePettenuzzo Date: Sun, 29 Apr 2018 14:00:16 +0200 Subject: [PATCH] crazyflie: support for sd card board via SPI --- ROMFS/px4fmu_common/init.d/rcS | 4 ++-- cmake/configs/nuttx_crazyflie_default.cmake | 1 + .../nuttx-configs/crazyflie/nsh/defconfig | 19 ++++++++++++--- src/drivers/boards/crazyflie/board_config.h | 6 ++--- src/drivers/boards/crazyflie/spi.c | 23 +++++++++++-------- src/drivers/pmw3901/pmw3901.cpp | 5 ++++ 6 files changed, 40 insertions(+), 18 deletions(-) diff --git a/ROMFS/px4fmu_common/init.d/rcS b/ROMFS/px4fmu_common/init.d/rcS index 0ab33ec6d8..ece2efd91c 100644 --- a/ROMFS/px4fmu_common/init.d/rcS +++ b/ROMFS/px4fmu_common/init.d/rcS @@ -988,8 +988,8 @@ fi sh /etc/init.d/rc.logging - vl53lxx start - pmw3901 start + #vl53lxx start + #pmw3901 start # End of autostart diff --git a/cmake/configs/nuttx_crazyflie_default.cmake b/cmake/configs/nuttx_crazyflie_default.cmake index cae0204380..2d2078e0b3 100644 --- a/cmake/configs/nuttx_crazyflie_default.cmake +++ b/cmake/configs/nuttx_crazyflie_default.cmake @@ -32,6 +32,7 @@ set(config_module_list systemcmds/ver systemcmds/hardfault_log systemcmds/topic_listener + systemcmds/sd_bench # # General system control diff --git a/platforms/nuttx/nuttx-configs/crazyflie/nsh/defconfig b/platforms/nuttx/nuttx-configs/crazyflie/nsh/defconfig index c30fa72cf7..5c2257d982 100644 --- a/platforms/nuttx/nuttx-configs/crazyflie/nsh/defconfig +++ b/platforms/nuttx/nuttx-configs/crazyflie/nsh/defconfig @@ -880,7 +880,17 @@ CONFIG_WATCHDOG_DEVPATH="/dev/watchdog0" # CONFIG_RGBLED is not set # CONFIG_PCA9635PW is not set # CONFIG_NCP5623C is not set -# CONFIG_MMCSD is not set + + +# +# SD Card Support +# +CONFIG_MMCSD=y +CONFIG_MMCSD_NSLOTS=1 +CONFIG_MMCSD_SPI=y +CONFIG_MMCSD_SPICLOCK=20000000 +CONFIG_MMCSD_SPIMODE=0 + # CONFIG_MODEM is not set CONFIG_MTD=y @@ -1104,8 +1114,9 @@ CONFIG_FS_WRITABLE=y CONFIG_FS_MQUEUE_MPATH="/var/mqueue" # CONFIG_FS_RAMMAP is not set CONFIG_FS_FAT=y -# CONFIG_FAT_LCNAMES is not set -# CONFIG_FAT_LFN is not set +CONFIG_FAT_LCNAMES=y +CONFIG_FAT_LFN=y +CONFIG_FAT_MAXFNAME=32 # CONFIG_FS_FATTIME is not set # CONFIG_FAT_FORCE_INDIRECT is not set # CONFIG_FAT_DMAMEMORY is not set @@ -1490,6 +1501,8 @@ CONFIG_NSH_DISABLE_UNAME=y CONFIG_NSH_DISABLE_WGET=y CONFIG_NSH_DISABLE_XD=y CONFIG_NSH_MMCSDMINOR=0 +CONFIG_NSH_MMCSDSLOTNO=0 +CONFIG_NSH_MMCSDSPIPORTNO=1 # # Configure Command Options diff --git a/src/drivers/boards/crazyflie/board_config.h b/src/drivers/boards/crazyflie/board_config.h index 966deb8329..5153db41fa 100644 --- a/src/drivers/boards/crazyflie/board_config.h +++ b/src/drivers/boards/crazyflie/board_config.h @@ -111,9 +111,9 @@ #define PX4_SPI_BUS_EXPANSION 1 /* SPI1 CS */ -#define GPIO_SPI1_CS0_EXT /* PC12 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN12) -#define GPIO_SPI1_CS1_EXT /* PB4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN4) -#define GPIO_SPI1_CS2_EXT /* PB5 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN5) +#define GPIO_SPI1_CS0_EXT /* PC12 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN12) +#define GPIO_SPI1_CS1_EXT /* PB4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN4) +#define GPIO_SPI1_CS2_EXT /* PB5 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN5) #define PX4_FLOW_BUS_CS_GPIO { GPIO_SPI1_CS0_EXT, GPIO_SPI1_CS1_EXT, GPIO_SPI1_CS2_EXT } diff --git a/src/drivers/boards/crazyflie/spi.c b/src/drivers/boards/crazyflie/spi.c index 6e92cd6659..f51383210f 100644 --- a/src/drivers/boards/crazyflie/spi.c +++ b/src/drivers/boards/crazyflie/spi.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -20,6 +21,8 @@ #include "board_config.h" #include +//#include "stm32.h" + /**************************************************************************** * Pre-Processor Definitions ****************************************************************************/ @@ -65,8 +68,7 @@ __EXPORT int stm32_spi_bus_initialize(void) { /* Configure SPI-based devices */ - /* Get the SPI port for the Sensors */ - + /* Get the external SPI port */ spi_expansion = stm32_spibus_initialize(PX4_SPI_BUS_EXPANSION); if (!spi_expansion) { @@ -74,16 +76,17 @@ __EXPORT int stm32_spi_bus_initialize(void) return -ENODEV; } - /* Default PX4_SPI_BUS_SENSORS to 1MHz and de-assert the known chip selects. */ + //#ifdef CONFIG_MMCSD + int ret = mmcsd_spislotinitialize(CONFIG_NSH_MMCSDMINOR, CONFIG_NSH_MMCSDSLOTNO, spi_expansion); - SPI_SETFREQUENCY(spi_expansion, 10000000); - SPI_SETBITS(spi_expansion, 8); - SPI_SETMODE(spi_expansion, SPIDEV_MODE3); - - for (int cs = PX4_FLOW_BUS_FIRST_CS; cs <= PX4_FLOW_BUS_LAST_CS; cs++) { - SPI_SELECT(spi_expansion, cs, false); + if (ret != OK) { + //message("[boot] FAILED to bind SPI port 1 to the MMCSD driver\n"); + return -ENODEV; } + //#endif + + return OK; } @@ -101,7 +104,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, uint32_t devid, bool s /* SPI select is active low, so write !selected to select the device */ int sel = (int) devid; - ASSERT(PX4_SPI_BUS_ID(sel) == PX4_SPI_BUS_EXPANSION); + //ASSERT(PX4_SPI_BUS_ID(sel) == PX4_SPI_BUS_EXPANSION); /* Making sure the other peripherals are not selected */ diff --git a/src/drivers/pmw3901/pmw3901.cpp b/src/drivers/pmw3901/pmw3901.cpp index 7d01b7c944..e841afd02a 100644 --- a/src/drivers/pmw3901/pmw3901.cpp +++ b/src/drivers/pmw3901/pmw3901.cpp @@ -77,8 +77,13 @@ #include /* Configuration Constants */ +#ifdef PX4_SPI_BUS_EXPANSION #define PMW3901_BUS PX4_SPI_BUS_EXPANSION /* fmu-v4pro: PX4_SPI_BUS_EXT1 | fmu-v5: PX4_SPI_BUS_EXTERNAL1 */ +#endif + +#ifdef PX4_SPIDEV_EXPANSION_2 #define PMW3901_SPIDEV PX4_SPIDEV_EXPANSION_2 /* fmu-v4pro: PX4_SPIDEV_EXT0 | fmu-v5: PX4_SPIDEV_EXTERNAL1_1 */ +#endif #define PMW3901_SPI_BUS_SPEED (2000000L) // 2MHz