From 1e86f24cf9a606589b05f021ba0940af48a42df8 Mon Sep 17 00:00:00 2001 From: Simone Guscetti Date: Wed, 17 May 2017 15:30:16 +0200 Subject: [PATCH] fmu-v5 board_config: set up external spi --- src/drivers/boards/px4fmu-v5/board_config.h | 34 ++++++++++--------- src/drivers/boards/px4fmu-v5/px4fmu_spi.c | 36 +++++++++++++++------ 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/src/drivers/boards/px4fmu-v5/board_config.h b/src/drivers/boards/px4fmu-v5/board_config.h index f8ab98db4e..b617b61ade 100644 --- a/src/drivers/boards/px4fmu-v5/board_config.h +++ b/src/drivers/boards/px4fmu-v5/board_config.h @@ -120,10 +120,11 @@ __BEGIN_DECLS * MEMORY is on bus SPI2 * MS5611 is on bus SPI4 */ -#define PX4_SPI_BUS_SENSORS 1 -#define PX4_SPI_BUS_MEMORY 2 -#define PX4_SPI_BUS_BARO 4 -#define PX4_SPI_BUS_EXTERNAL 6 +#define PX4_SPI_BUS_SENSORS 1 +#define PX4_SPI_BUS_MEMORY 2 +#define PX4_SPI_BUS_BARO 4 +#define PX4_SPI_BUS_EXTERNAL1 5 +#define PX4_SPI_BUS_EXTERNAL2 6 /* v BEGIN Legacy SPI defines TODO: fix this with enumeration */ #define PX4_SPI_BUS_RAMTRON PX4_SPI_BUS_MEMORY @@ -151,18 +152,21 @@ __BEGIN_DECLS #define PX4_BARO_BUS_FIRST_CS PX4_SPIDEV_BARO #define PX4_BARO_BUS_LAST_CS PX4_SPIDEV_BARO -#define PX4_SPIDEV_EXTERNAL1 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,0) -#define PX4_SPIDEV_EXTERNAL2 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,1) -#define PX4_SPIDEV_EXTERNAL3 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,2) -#define PX4_SPIDEV_EXTERNAL4 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,3) -#define PX4_SPIDEV_EXTERNAL5 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,4) -#define PX4_SPIDEV_EXTERNAL6 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL,5) -#define PX4_EXTERNAL_BUS_CS_GPIO {SPI5_CS1_EXTERNAL1, SPI5_CS2_EXTERNAL1, \ - SPI5_CS3_EXTERNAL1, \ - SPI6_CS1_EXTERNAL2, SPI6_CS2_EXTERNAL2, \ +#define PX4_SPIDEV_EXTERNAL1_1 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL1,0) +#define PX4_SPIDEV_EXTERNAL1_2 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL1,1) +#define PX4_SPIDEV_EXTERNAL1_3 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL1,2) +#define PX4_EXTERNAL1_BUS_CS_GPIO {SPI5_CS1_EXTERNAL1, SPI5_CS2_EXTERNAL1, \ + SPI5_CS3_EXTERNAL1} +#define PX4_EXTERNAL1_BUS_FIRST_CS PX4_SPIDEV_EXTERNAL1_1 +#define PX4_EXTERNAL1_BUS_LAST_CS PX4_SPIDEV_EXTERNAL1_3 + +#define PX4_SPIDEV_EXTERNAL2_1 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL2,0) +#define PX4_SPIDEV_EXTERNAL2_2 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL2,1) +#define PX4_SPIDEV_EXTERNAL2_3 PX4_MK_SPI_SEL(PX4_SPI_BUS_EXTERNAL2,2) +#define PX4_EXTERNAL2_BUS_CS_GPIO {SPI6_CS1_EXTERNAL2, SPI6_CS2_EXTERNAL2, \ SPI6_CS3_EXTERNAL2} -#define PX4_EXTERNAL_BUS_FIRST_CS PX4_SPIDEV_EXTERNAL1 -#define PX4_EXTERNAL_BUS_LAST_CS PX4_SPIDEV_EXTERNAL6 +#define PX4_EXTERNAL2_BUS_FIRST_CS PX4_SPIDEV_EXTERNAL2_1 +#define PX4_EXTERNAL2_BUS_LAST_CS PX4_SPIDEV_EXTERNAL2_3 /* I2C busses */ diff --git a/src/drivers/boards/px4fmu-v5/px4fmu_spi.c b/src/drivers/boards/px4fmu-v5/px4fmu_spi.c index 5487c86880..1af4fce66d 100644 --- a/src/drivers/boards/px4fmu-v5/px4fmu_spi.c +++ b/src/drivers/boards/px4fmu-v5/px4fmu_spi.c @@ -88,11 +88,10 @@ static const uint32_t spi3selects_gpio[] = {FIXME}; #error Need to define SPI3 Usage #endif static const uint32_t spi4selects_gpio[] = PX4_BARO_BUS_CS_GPIO; -#ifdef CONFIG_STM32F7_SPI3 -static const uint32_t spi5selects_gpio[] = {FIXME};; -#error Need to define SPI5 Usage +#ifdef CONFIG_STM32F7_SPI5 +static const uint32_t spi5selects_gpio[] = PX4_EXTERNAL1_BUS_CS_GPIO; #endif -static const uint32_t spi6selects_gpio[] = PX4_EXTERNAL_BUS_CS_GPIO; +static const uint32_t spi6selects_gpio[] = PX4_EXTERNAL2_BUS_CS_GPIO; /************************************************************************************ @@ -242,12 +241,12 @@ __EXPORT int stm32_spi_bus_initialize(void) SPI_SELECT(spi_baro, cs, false); } - /* Get the SPI port for the PX4_SPI_EXTERNAL */ + /* Get the SPI port for the PX4_SPI_EXTERNAL1 */ - spi_ext = stm32_spibus_initialize(PX4_SPI_BUS_EXTERNAL); + spi_ext = stm32_spibus_initialize(PX4_SPI_BUS_EXTERNAL1); if (!spi_ext) { - message("[boot] FAILED to initialize SPI port %d\n", PX4_SPI_BUS_EXTERNAL); + message("[boot] FAILED to initialize SPI port %d\n", PX4_SPI_BUS_EXTERNAL1); return -ENODEV; } @@ -255,7 +254,24 @@ __EXPORT int stm32_spi_bus_initialize(void) SPI_SETBITS(spi_ext, 8); SPI_SETMODE(spi_ext, SPIDEV_MODE3); - for (int cs = PX4_EXTERNAL_BUS_FIRST_CS; cs <= PX4_EXTERNAL_BUS_LAST_CS; cs++) { + for (int cs = PX4_EXTERNAL1_BUS_FIRST_CS; cs <= PX4_EXTERNAL1_BUS_LAST_CS; cs++) { + SPI_SELECT(spi_ext, cs, false); + } + + /* Get the SPI port for the PX4_SPI_EXTERNAL2 */ + + spi_ext = stm32_spibus_initialize(PX4_SPI_BUS_EXTERNAL2); + + if (!spi_ext) { + message("[boot] FAILED to initialize SPI port %d\n", PX4_SPI_BUS_EXTERNAL2); + return -ENODEV; + } + + SPI_SETFREQUENCY(spi_ext, 8 * 1000 * 1000); + SPI_SETBITS(spi_ext, 8); + SPI_SETMODE(spi_ext, SPIDEV_MODE3); + + for (int cs = PX4_EXTERNAL2_BUS_FIRST_CS; cs <= PX4_EXTERNAL2_BUS_LAST_CS; cs++) { SPI_SELECT(spi_ext, cs, false); } @@ -421,7 +437,7 @@ __EXPORT void stm32_spi5select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, int sel = (int) devid; - ASSERT(PX4_SPI_BUS_ID(sel) == FIXME); + ASSERT(PX4_SPI_BUS_ID(sel) == PX4_SPI_BUS_EXTERNAL1); /* Making sure the other peripherals are not selected */ for (int cs = 0; arraySize(spi5selects_gpio) > 1 && cs < arraySize(spi5selects_gpio); cs++) { @@ -455,7 +471,7 @@ __EXPORT void stm32_spi6select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, int sel = (int) devid; - ASSERT(PX4_SPI_BUS_ID(sel) == PX4_SPI_BUS_EXTERNAL); + ASSERT(PX4_SPI_BUS_ID(sel) == PX4_SPI_BUS_EXTERNAL2); /* Making sure the other peripherals are not selected */ for (int cs = 0; arraySize(spi6selects_gpio) > 1 && cs < arraySize(spi6selects_gpio); cs++) {