From adacdad32df6d037e6c328d548d5236ae172f89d Mon Sep 17 00:00:00 2001 From: achim Date: Tue, 26 Apr 2022 03:53:58 +0200 Subject: [PATCH] boards: add new Diatone Mamba F405 mk2 --- .ci/Jenkinsfile-compile | 1 + .github/workflows/compile_nuttx.yml | 1 + .../bootloader/mamba_f405_mk2_bootloader.bin | Bin 0 -> 9740 bytes .../diatone/mamba-f405-mk2/default.px4board | 53 +++ .../diatone/mamba-f405-mk2/firmware.prototype | 13 + .../mamba-f405-mk2/init/rc.board_defaults | 18 + .../mamba-f405-mk2/init/rc.board_extras | 9 + .../mamba-f405-mk2/init/rc.board_sensors | 25 ++ .../nuttx-config/include/board.h | 327 +++++++++++++++++ .../nuttx-config/include/board_dma_map.h | 94 +++++ .../mamba-f405-mk2/nuttx-config/nsh/defconfig | 196 ++++++++++ .../nuttx-config/scripts/script.ld | 138 +++++++ .../diatone/mamba-f405-mk2/src/CMakeLists.txt | 50 +++ .../diatone/mamba-f405-mk2/src/board_config.h | 204 +++++++++++ boards/diatone/mamba-f405-mk2/src/i2c.cpp | 38 ++ boards/diatone/mamba-f405-mk2/src/init.c | 343 ++++++++++++++++++ boards/diatone/mamba-f405-mk2/src/led.c | 120 ++++++ boards/diatone/mamba-f405-mk2/src/spi.cpp | 51 +++ .../mamba-f405-mk2/src/timer_config.cpp | 49 +++ boards/diatone/mamba-f405-mk2/src/usb.c | 107 ++++++ 20 files changed, 1837 insertions(+) create mode 100644 boards/diatone/mamba-f405-mk2/bootloader/mamba_f405_mk2_bootloader.bin create mode 100644 boards/diatone/mamba-f405-mk2/default.px4board create mode 100644 boards/diatone/mamba-f405-mk2/firmware.prototype create mode 100644 boards/diatone/mamba-f405-mk2/init/rc.board_defaults create mode 100644 boards/diatone/mamba-f405-mk2/init/rc.board_extras create mode 100644 boards/diatone/mamba-f405-mk2/init/rc.board_sensors create mode 100644 boards/diatone/mamba-f405-mk2/nuttx-config/include/board.h create mode 100644 boards/diatone/mamba-f405-mk2/nuttx-config/include/board_dma_map.h create mode 100644 boards/diatone/mamba-f405-mk2/nuttx-config/nsh/defconfig create mode 100644 boards/diatone/mamba-f405-mk2/nuttx-config/scripts/script.ld create mode 100644 boards/diatone/mamba-f405-mk2/src/CMakeLists.txt create mode 100644 boards/diatone/mamba-f405-mk2/src/board_config.h create mode 100644 boards/diatone/mamba-f405-mk2/src/i2c.cpp create mode 100644 boards/diatone/mamba-f405-mk2/src/init.c create mode 100644 boards/diatone/mamba-f405-mk2/src/led.c create mode 100644 boards/diatone/mamba-f405-mk2/src/spi.cpp create mode 100644 boards/diatone/mamba-f405-mk2/src/timer_config.cpp create mode 100644 boards/diatone/mamba-f405-mk2/src/usb.c diff --git a/.ci/Jenkinsfile-compile b/.ci/Jenkinsfile-compile index a2f78f2351..c4c5d273d9 100644 --- a/.ci/Jenkinsfile-compile +++ b/.ci/Jenkinsfile-compile @@ -52,6 +52,7 @@ pipeline { "cuav_x7pro_default", "cubepilot_cubeorange_default", "cubepilot_cubeyellow_default", + "diatone_mamba-f405-mk2_default", "freefly_can-rtk-gps_canbootloader", "freefly_can-rtk-gps_default", "holybro_can-gps-v1_canbootloader", diff --git a/.github/workflows/compile_nuttx.yml b/.github/workflows/compile_nuttx.yml index 177f10e83b..be0c1a1c4b 100644 --- a/.github/workflows/compile_nuttx.yml +++ b/.github/workflows/compile_nuttx.yml @@ -30,6 +30,7 @@ jobs: cuav_x7pro, cubepilot_cubeorange, cubepilot_cubeyellow, + diatone_mamba-f405-mk2, freefly_can-rtk-gps, holybro_can-gps-v1, holybro_durandal-v1, diff --git a/boards/diatone/mamba-f405-mk2/bootloader/mamba_f405_mk2_bootloader.bin b/boards/diatone/mamba-f405-mk2/bootloader/mamba_f405_mk2_bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..be73a7f0edf0c72ec3f922454b70fc0f99557527 GIT binary patch literal 9740 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 literal 0 HcmV?d00001 diff --git a/boards/diatone/mamba-f405-mk2/default.px4board b/boards/diatone/mamba-f405-mk2/default.px4board new file mode 100644 index 0000000000..f16d2290cb --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/default.px4board @@ -0,0 +1,53 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m4" +CONFIG_BOARD_CONSTRAINED_FLASH=y +CONFIG_BOARD_NO_HELP=y +CONFIG_BOARD_CONSTRAINED_MEMORY=y +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS2" +CONFIG_DRIVERS_ADC_BOARD_ADC=y +CONFIG_DRIVERS_BAROMETER_BMP280=y +CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_INVENSENSE_ICM20602=y +CONFIG_DRIVERS_IMU_INVENSENSE_MPU6000=y +CONFIG_DRIVERS_IMU_INVENSENSE_MPU9250=y +CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y +CONFIG_DRIVERS_MAGNETOMETER_AKM_AK8963=y +CONFIG_DRIVERS_OSD=y +CONFIG_DRIVERS_PWM_OUT=y +CONFIG_DRIVERS_RC_INPUT=y +CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y +CONFIG_MODULES_BATTERY_STATUS=y +CONFIG_MODULES_COMMANDER=y +CONFIG_MODULES_CONTROL_ALLOCATOR=y +CONFIG_MODULES_DATAMAN=y +CONFIG_MODULES_EKF2=y +CONFIG_MODULES_FLIGHT_MODE_MANAGER=y +CONFIG_MODULES_LAND_DETECTOR=y +CONFIG_MODULES_LOAD_MON=y +CONFIG_MODULES_LOGGER=y +CONFIG_MODULES_MANUAL_CONTROL=y +CONFIG_MODULES_MAVLINK=y +CONFIG_MODULES_MC_ATT_CONTROL=y +CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y +CONFIG_MODULES_MC_POS_CONTROL=y +CONFIG_MODULES_MC_RATE_CONTROL=y +CONFIG_MODULES_NAVIGATOR=y +CONFIG_MODULES_RC_UPDATE=y +CONFIG_MODULES_SENSORS=y +CONFIG_SYSTEMCMDS_DMESG=y +CONFIG_SYSTEMCMDS_MFT=y +CONFIG_SYSTEMCMDS_MIXER=y +CONFIG_SYSTEMCMDS_MOTOR_TEST=y +CONFIG_SYSTEMCMDS_MTD=y +CONFIG_SYSTEMCMDS_NSHTERM=y +CONFIG_SYSTEMCMDS_PARAM=y +CONFIG_SYSTEMCMDS_PERF=y +CONFIG_SYSTEMCMDS_PWM=y +CONFIG_SYSTEMCMDS_REBOOT=y +CONFIG_SYSTEMCMDS_TOP=y +CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y +CONFIG_SYSTEMCMDS_UORB=y +CONFIG_SYSTEMCMDS_VER=y +CONFIG_SYSTEMCMDS_WORK_QUEUE=y diff --git a/boards/diatone/mamba-f405-mk2/firmware.prototype b/boards/diatone/mamba-f405-mk2/firmware.prototype new file mode 100644 index 0000000000..cd7955b608 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/firmware.prototype @@ -0,0 +1,13 @@ +{ + "board_id": 42, + "magic": "MAMBAF405MK2", + "description": "Firmware for the MambaF405Mk2 board", + "image": "", + "build_time": 0, + "summary": "PX4/MambaF405", + "version": "0.1", + "image_size": 0, + "image_maxsize": 1032192, + "git_identity": "", + "board_revision": 0 +} diff --git a/boards/diatone/mamba-f405-mk2/init/rc.board_defaults b/boards/diatone/mamba-f405-mk2/init/rc.board_defaults new file mode 100644 index 0000000000..97bbcd6ee6 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/init/rc.board_defaults @@ -0,0 +1,18 @@ +#!/bin/sh +# +# board specific defaults +#------------------------------------------------------------------------------ + +# system_power unavailable +param set-default CBRK_SUPPLY_CHK 894281 + +# Disable safety switch by default +param set-default CBRK_IO_SAFETY 22027 + +# use the Q attitude estimator, it works w/o mag or GPS. +param set-default SYS_MC_EST_GROUP 3 +param set-default ATT_ACC_COMP 0 +param set-default ATT_W_ACC 0.4000 +param set-default ATT_W_GYRO_BIAS 0.0000 + +param set-default SYS_HAS_MAG 0 diff --git a/boards/diatone/mamba-f405-mk2/init/rc.board_extras b/boards/diatone/mamba-f405-mk2/init/rc.board_extras new file mode 100644 index 0000000000..d31babde75 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/init/rc.board_extras @@ -0,0 +1,9 @@ +#!/bin/sh +# +# Mamba F405 MK2 specific board extras init +#------------------------------------------------------------------------------ + +if ! param compare OSD_ATXXXX_CFG 0 +then + atxxxx start -s +fi diff --git a/boards/diatone/mamba-f405-mk2/init/rc.board_sensors b/boards/diatone/mamba-f405-mk2/init/rc.board_sensors new file mode 100644 index 0000000000..2ce4db663a --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/init/rc.board_sensors @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Mamba F405 MK2 specific board sensors init +#------------------------------------------------------------------------------ + +board_adc start + +if ! mpu6000 -R 6 -s start +then + # some boards such as the Hobbywing XRotor F4 G2 use the ICM-20602 + icm20602 -s -R 6 start +fi + +if ! hmc5883 -T -X start +then + if mpu9250_i2c -X -b 2 -a 0x68 -R 28 start; then + sleep 1 # wait for mpu9250 to be configured with bypass enabled + ak8963 -X -b 2 -R 30 start # -R 34 + sleep 1 + mpu9250_i2c stop + ak8963 -X -b 2 -R 30 start # -R 34 + fi +fi + +bmp280 -X -b 2 start diff --git a/boards/diatone/mamba-f405-mk2/nuttx-config/include/board.h b/boards/diatone/mamba-f405-mk2/nuttx-config/include/board.h new file mode 100644 index 0000000000..041d552608 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/nuttx-config/include/board.h @@ -0,0 +1,327 @@ +/************************************************************************************ + * nuttx-configs/diatone_mamba-f405-mk2/include/board.h + * include/arch/board/board.h + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Copyright (c) 2018 PX4 Development Team. All rights reserved. + * Author: Nathan Tsoi + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +#ifndef __CONFIG_MAMBAF405MK2_INCLUDE_BOARD_H +#define __CONFIG_MAMBAF405MK2_INCLUDE_BOARD_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ +#include "board_dma_map.h" + +#include + +#ifndef __ASSEMBLY__ +# include +#endif + +#include "stm32_rcc.h" +#include "stm32_sdio.h" +#include "stm32.h" + +/************************************************************************************ + * Definitions + ************************************************************************************/ + +/* Clocking *************************************************************************/ +/* The mambaf405mk2 board features a single 8MHz crystal. Space is provided + * for a 32kHz RTC backup crystal, but it is not stuffed. + * + * This is the canonical configuration: + * System Clock source : PLL (HSE) + * SYSCLK(Hz) : 168000000 Determined by PLL configuration + * HCLK(Hz) : 168000000 (STM32_RCC_CFGR_HPRE) + * AHB Prescaler : 1 (STM32_RCC_CFGR_HPRE) + * APB1 Prescaler : 4 (STM32_RCC_CFGR_PPRE1) + * APB2 Prescaler : 2 (STM32_RCC_CFGR_PPRE2) + * HSE Frequency(Hz) : 8000000 (STM32_BOARD_XTAL) + * PLLM : 8 (STM32_PLLCFG_PLLM) + * PLLN : 336 (STM32_PLLCFG_PLLN) + * PLLP : 2 (STM32_PLLCFG_PLLP) + * PLLQ : 7 (STM32_PLLCFG_PLLQ) + * Main regulator output voltage : Scale1 mode Needed for high speed SYSCLK + * Flash Latency(WS) : 5 + * Prefetch Buffer : OFF + * Instruction cache : ON + * Data cache : ON + * Require 48MHz for USB OTG FS, : Enabled + * SDIO and RNG clock + */ + +/* HSI - 16 MHz RC factory-trimmed + * LSI - 32 KHz RC + * HSE - On-board crystal frequency is 8MHz + * LSE - 32.768 kHz + */ + +#define STM32_BOARD_XTAL 8000000ul + +#define STM32_HSI_FREQUENCY 16000000ul +#define STM32_LSI_FREQUENCY 32000 +#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL +#define STM32_LSE_FREQUENCY 32768 + +/* Main PLL Configuration. + * + * PLL source is HSE + * PLL_VCO = (STM32_HSE_FREQUENCY / PLLM) * PLLN + * = (8,000,000 / 8) * 336 + * = 336,000,000 + * SYSCLK = PLL_VCO / PLLP + * = 336,000,000 / 2 = 168,000,000 + * USB OTG FS, SDIO and RNG Clock + * = PLL_VCO / PLLQ + * = 48,000,000 + */ + +#define STM32_PLLCFG_PLLM RCC_PLLCFG_PLLM(8) +#define STM32_PLLCFG_PLLN RCC_PLLCFG_PLLN(336) +#define STM32_PLLCFG_PLLP RCC_PLLCFG_PLLP_2 +#define STM32_PLLCFG_PLLQ RCC_PLLCFG_PLLQ(7) + +#define STM32_SYSCLK_FREQUENCY 168000000ul + +/* AHB clock (HCLK) is SYSCLK (168MHz) */ + +#define STM32_RCC_CFGR_HPRE RCC_CFGR_HPRE_SYSCLK /* HCLK = SYSCLK / 1 */ +#define STM32_HCLK_FREQUENCY STM32_SYSCLK_FREQUENCY +#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */ + +/* APB1 clock (PCLK1) is HCLK/4 (42MHz) */ + +#define STM32_RCC_CFGR_PPRE1 RCC_CFGR_PPRE1_HCLKd4 /* PCLK1 = HCLK / 4 */ +#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY/4) + +/* Timers driven from APB1 will be twice PCLK1 */ + +#define STM32_APB1_TIM2_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM3_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM4_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM5_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM6_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM7_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM12_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM13_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM14_CLKIN (2*STM32_PCLK1_FREQUENCY) + +/* APB2 clock (PCLK2) is HCLK/2 (84MHz) */ + +#define STM32_RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_HCLKd2 /* PCLK2 = HCLK / 2 */ +#define STM32_PCLK2_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* Timers driven from APB2 will be twice PCLK2 */ + +#define STM32_APB2_TIM1_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM8_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM9_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM10_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM11_CLKIN (2*STM32_PCLK2_FREQUENCY) + +/* Timer Frequencies, if APBx is set to 1, frequency is same to APBx + * otherwise frequency is 2xAPBx. + * Note: TIM1,8-11 are on APB2, others on APB1 + */ + +#define BOARD_TIM1_FREQUENCY STM32_APB2_TIM1_CLKIN +#define BOARD_TIM2_FREQUENCY STM32_APB1_TIM2_CLKIN +#define BOARD_TIM3_FREQUENCY STM32_APB1_TIM3_CLKIN +#define BOARD_TIM4_FREQUENCY STM32_APB1_TIM4_CLKIN +#define BOARD_TIM5_FREQUENCY STM32_APB1_TIM5_CLKIN +#define BOARD_TIM6_FREQUENCY STM32_APB1_TIM6_CLKIN +#define BOARD_TIM7_FREQUENCY STM32_APB1_TIM7_CLKIN +#define BOARD_TIM8_FREQUENCY STM32_APB2_TIM8_CLKIN +#define BOARD_TIM9_FREQUENCY STM32_APB2_TIM9_CLKIN +#define BOARD_TIM10_FREQUENCY STM32_APB2_TIM10_CLKIN +#define BOARD_TIM11_FREQUENCY STM32_APB2_TIM11_CLKIN +#define BOARD_TIM12_FREQUENCY STM32_APB1_TIM12_CLKIN +#define BOARD_TIM13_FREQUENCY STM32_APB1_TIM13_CLKIN +#define BOARD_TIM14_FREQUENCY STM32_APB1_TIM14_CLKIN + +/* SDIO dividers. Note that slower clocking is required when DMA is disabled + * in order to avoid RX overrun/TX underrun errors due to delayed responses + * to service FIFOs in interrupt driven mode. These values have not been + * tuned!!! + * + * SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(118+2)=400 KHz + */ + +#define SDIO_INIT_CLKDIV (118 << SDIO_CLKCR_CLKDIV_SHIFT) + +/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz + * DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz + */ + +#ifdef CONFIG_STM32_SDIO_DMA +# define SDIO_MMCXFR_CLKDIV (1 << SDIO_CLKCR_CLKDIV_SHIFT) +#else +# define SDIO_MMCXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) +#endif + +/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz + * DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz + */ + +#ifdef CONFIG_STM32_SDIO_DMA +# define SDIO_SDXFR_CLKDIV (1 << SDIO_CLKCR_CLKDIV_SHIFT) +#else +# define SDIO_SDXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) +#endif + +/* LED definitions ******************************************************************/ +/* If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any + * way. The following definitions are used to access individual LEDs. + */ + +/* LED index values for use with stm32_setled() */ + +#define BOARD_LED1 0 +//#define BOARD_LED2 1 +#define BOARD_NLEDS 1 + +#define BOARD_LED_BLUE BOARD_LED1 +//#define BOARD_LED_RED BOARD_LED2 + +/* LED bits for use with stm32_setleds() */ + +#define BOARD_LED1_BIT (1 << BOARD_LED1) +#define BOARD_LED2_BIT (1 << BOARD_LED2) + +/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the 2 LEDs on board the + * omnibusf4sd. The following definitions describe how NuttX controls the LEDs: + */ + +#define LED_STARTED 0 /* LED1 */ +#define LED_HEAPALLOCATE 1 /* LED2 */ +#define LED_IRQSENABLED 2 /* LED1 */ +#define LED_STACKCREATED 3 /* LED1 + LED2 */ +#define LED_INIRQ 4 /* LED1 */ +#define LED_SIGNAL 5 /* LED2 */ +#define LED_ASSERTION 6 /* LED1 + LED2 */ +#define LED_PANIC 7 /* LED1 + LED2 */ + +/* Alternate function pin selections ************************************************/ + +/* UART1: + * + * PA10 (RX) and PA9 (TX) are broken out on J5 + */ + +#define GPIO_USART1_RX GPIO_USART1_RX_1 +#define GPIO_USART1_TX GPIO_USART1_TX_1 + +/* USART3: + * + * PC10 (TX) and PC11 (RX) are broken out on J4 + * + * However, this port is shared with SPI3 which contains the BMP280 and MAX7456 + * + * The Silkscreen pin labeled SCL is TX + * MISO is RX + */ +//#define GPIO_USART3_RX GPIO_USART3_RX_2 +//#define GPIO_USART3_TX GPIO_USART3_TX_2 + +/* UART4: + * + * PA0 (TX) -- Labeled RSSI on the silkscreen is only broken out on a test pad + * on the pro version. It's on a 2.54mm header on other versions + * PA1 (RX) -- Motor 5 out + */ +#define GPIO_UART4_RX GPIO_UART4_RX_1 +#define GPIO_UART4_TX GPIO_UART4_TX_1 + +/* UART6: + * + * PC6 (TX) and PC7 (RX) are broken out on J10 + */ + +#define GPIO_USART6_RX GPIO_USART6_RX_1 +#define GPIO_USART6_TX GPIO_USART6_TX_1 + +/* SPI1: + * MPU6000 + * CS: PA4 -- configured in board_config.h + * CLK: PA5 + * MISO: PA6 + * MOSI: PA7 + */ + +#define GPIO_SPI1_SCK GPIO_SPI1_SCK_1 +#define GPIO_SPI1_MISO GPIO_SPI1_MISO_1 +#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_1 + +/* SPI2: + * SD Card + * CS: PB12 -- configured in board_config.h + * CLK: PB13 + * MISO: PB14 + * MOSI: PB15 + */ + +#define GPIO_SPI2_SCK GPIO_SPI2_SCK_2 +#define GPIO_SPI2_MISO GPIO_SPI2_MISO_1 +#define GPIO_SPI2_MOSI GPIO_SPI2_MOSI_1 + +/* SPI3: + * BMP280 + * CS: PB3 -- configured in board_config.h + * CLK: PC10 + * MISO: PC11 + * MOSI: PC12 + */ + +#define GPIO_SPI3_SCK GPIO_SPI3_SCK_2 +#define GPIO_SPI3_MISO GPIO_SPI3_MISO_2 +#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_2 + +/* + * I2C (external) + * + * SCL: PB10 + * SDA: PB11 + * + * TODO: + * The optional _GPIO configurations allow the I2C driver to manually + * reset the bus to clear stuck slaves. They match the pin configuration, + * but are normally-high GPIOs. + */ +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_1 +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_1 + +#endif /* __CONFIG_OMNIBUSF4SD_INCLUDE_BOARD_H */ diff --git a/boards/diatone/mamba-f405-mk2/nuttx-config/include/board_dma_map.h b/boards/diatone/mamba-f405-mk2/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..d54cbdfecb --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/nuttx-config/include/board_dma_map.h @@ -0,0 +1,94 @@ +/**************************************************************************** + * + * Copyright (c) 2020 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + +/* +| DMA1 | Stream 0 | Stream 1 | Stream 2 | Stream 3 | Stream 4 | Stream 5 | Stream 6 | Stream 7 | +|------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------| +| Channel 0 | SPI3_RX_1 | - | SPI3_RX_2 | SPI2_RX | SPI2_TX | SPI3_TX_1 | - | SPI3_TX_2 | +| Channel 1 | I2C1_RX | - | TIM7_UP_1 | - | TIM7_UP_2 | I2C1_RX_1 | I2C1_TX | I2C1_TX_1 | +| Channel 2 | TIM4_CH1 | - | I2C4_RX | TIM4_CH2 | - | I2C4_RX | TIM4_UP | TIM4_CH3 | +| Channel 3 | - | TIM2_UP_1 | I2C3_RX_1 | I2C2_EXT_RX | I2C3_TX | TIM2_CH1 | TIM2_CH2 | TIM2_UP_2 | +| | | TIM2_CH3 | | | | | TIM2_CH4_1 | TIM2_CH4_2 | +| Channel 4 | UART5_RX | USART3_RX | UART4_RX | USART3_TX_1 | UART4_TX | USART2_RX | USART2_TX | UART5_TX | +| Channel 5 | UART8_TX | UART7_TX | TIM3_CH4 | UART7_RX | TIM3_CH1 | TIM3_CH2 | UART8_RX | TIM3_CH3 | +| | | | TIM3_UP | | TIM3_TRIG | | | | +| Channel 6 | TIM5_CH3 | TIM5_CH4_1 | TIM5_CH1 | TIM5_CH4_2 | TIM5_CH2 | - | TIM5_UP_2 | - | +| | TIM5_UP_1 | TIM5_TRIG_1 | | TIM5_TRIG_2 | | | | | +| Channel 7 | - | TIM6_UP | I2C2_RX | I2C2_RX_1 | USART3_TX_2 | DAC1 | DAC2 | I2C2_TX | +| | | | | | | | | | +| Usage | | TIM2_UP_1 | TIM3_UP | SPI2_RX | SPI2_TX | | | | + + +| DMA2 | Stream 0 | Stream 1 | Stream 2 | Stream 3 | Stream 4 | Stream 5 | Stream 6 | Stream 7 | +|------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------| +| Channel 0 | ADC1_1 | SAI1_A | TIM8_CH1_1 | SAI1_A_1 | ADC1_2 | SAI1_B_1 | TIM1_CH1_1 | - | +| | | | TIM8_CH2_1 | | | | TIM1_CH2_1 | | +| | | | TIM8_CH3_1 | | | | TIM1_CH3_1 | | +| Channel 1 | - | DCMI_1 | ADC2_1 | ADC2_2 | SAI1_B | SPI6_TX | SPI6_RX | DCMI_2 | +| Channel 2 | ADC3_1 | ADC3_2 | - | SPI5_RX_1 | SPI5_TX_1 | CRYP_OUT | CRYP_IN | HASH_IN | +| Channel 3 | SPI1_RX_1 | - | SPI1_RX_2 | SPI1_TX_1 | - | SPI1_TX_2 | - | QUADSPI | +| Channel 4 | SPI4_RX_1 | SPI4_TX_1 | USART1_RX_1 | SDIO | - | USART1_RX_2 | SDIO | USART1_TX | +| Channel 5 | - | USART6_RX_1 | USART6_RX_2 | SPI4_RX_2 | SPI4_TX_2 | - | USART6_TX_1 | USART6_TX_2 | +| Channel 6 | TIM1_TRIG_1 | TIM1_CH1_2 | TIM1_CH2_2 | TIM1_CH1 | TIM1_CH4 | TIM1_UP | TIM1_CH3_2 | - | +| | | | | | TIM1_TRIG_2 | | | | +| | | | | | TIM1_COM | | | | +| Channel 7 | - | TIM8_UP | TIM8_CH1_2 | TIM8_CH2_2 | TIM8_CH3_2 | SPI5_RX_2 | SPI5_TX_2 | TIM8_CH4 | +| | | | | | | | | TIM8_TRIG | +| | | | | | | | | TIM8_COM | +| | | | | | | | | | +| Usage | SPI1_RX_1 | USART6_RX_1 | USART1_RX_1 | SPI1_TX_1 | | | SDIO | | + */ + +// DMA1 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +// AVAILABLE // DMA2, Stream 0 +// DMAMAP_TIM2_UP // DMA1, Stream 1, Channel 3 (DSHOT) +// DMAMAP_TIM3_UP // DMA1, Stream 2, Channel 5 (DSHOT) +#define DMACHAN_SPI2_RX DMAMAP_SPI2_RX // DMA1, Stream 3, Channel 0 (SPI2 RX) +#define DMACHAN_SPI2_TX DMAMAP_SPI2_TX // DMA1, Stream 4, Channel 0 (SPI2 TX) +// AVAILABLE // DMA2, Stream 5 +// AVAILABLE // DMA2, Stream 6 +// AVAILABLE // DMA2, Stream 7 + +// DMA2 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +#define DMACHAN_SPI1_RX DMAMAP_SPI1_RX_1 // DMA2, Stream 0, Channel 3 (SPI1 RX) +#define DMAMAP_USART6_RX DMAMAP_USART6_RX_1 // DMA2, Stream 1, Channel 4 +#define DMAMAP_USART1_RX DMAMAP_USART1_RX_1 // DMA2, Stream 2, Channel 4 +#define DMACHAN_SPI1_TX DMAMAP_SPI1_TX_1 // DMA2, Stream 3, Channel 3 (SPI1 TX) +// AVAILABLE // DMA2, Stream 4 +// AVAILABLE // DMA2, Stream 5 +#define DMAMAP_SDIO DMAMAP_SDIO_2 // DMA2, Stream 6, Channel 4 +// AVAILABLE // DMA2, Stream 7 diff --git a/boards/diatone/mamba-f405-mk2/nuttx-config/nsh/defconfig b/boards/diatone/mamba-f405-mk2/nuttx-config/nsh/defconfig new file mode 100644 index 0000000000..45da39c831 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/nuttx-config/nsh/defconfig @@ -0,0 +1,196 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DEV_CONSOLE is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set +# CONFIG_MMCSD_HAVE_WRITEPROTECT is not set +# CONFIG_MMCSD_MMCSUPPORT is not set +# CONFIG_SPI_CALLBACK is not set +# CONFIG_STM32_CCMEXCLUDE is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD_CUSTOM=y +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/diatone/mamba-f405-mk2/nuttx-config" +CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y +CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" +CONFIG_ARCH_CHIP="stm32" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32F405RG=y +CONFIG_ARCH_INTERRUPTSTACK=512 +CONFIG_ARMV7M_MEMCPY=y +CONFIG_ARMV7M_USEBASEPRI=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_CRASHDUMP=y +CONFIG_BOARD_CUSTOM_LEDS=y +CONFIG_BOARD_LOOPSPERMSEC=16717 +CONFIG_BOARD_RESET_ON_ASSERT=2 +CONFIG_BUILTIN=y +CONFIG_C99_BOOL8=y +CONFIG_CDCACM=y +CONFIG_CDCACM_IFLOWCONTROL=y +CONFIG_CDCACM_PRODUCTID=0x0001 +CONFIG_CDCACM_PRODUCTSTR="DiatoneMambaF405 MK2" +CONFIG_CDCACM_RXBUFSIZE=600 +CONFIG_CDCACM_TXBUFSIZE=2000 +CONFIG_CDCACM_VENDORID=0x26ac +CONFIG_CDCACM_VENDORSTR="Diatone" +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEV_FIFO_SIZE=0 +CONFIG_DEV_PIPE_SIZE=70 +CONFIG_DISABLE_MQUEUE=y +CONFIG_DISABLE_POSIX_TIMERS=y +CONFIG_FAT_DMAMEMORY=y +CONFIG_FAT_LCNAMES=y +CONFIG_FAT_LFN=y +CONFIG_FAT_LFN_ALIAS_HASH=y +CONFIG_FDCLONE_STDIO=y +CONFIG_FS_BINFS=y +CONFIG_FS_CROMFS=y +CONFIG_FS_FAT=y +CONFIG_FS_FATTIME=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_REGISTER=y +CONFIG_FS_ROMFS=y +CONFIG_GRAN=y +CONFIG_GRAN_INTR=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_I2C=y +CONFIG_I2C_RESET=y +CONFIG_IDLETHREAD_STACKSIZE=750 +CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_LIBC_STRERROR=y +CONFIG_MEMSET_64BIT=y +CONFIG_MEMSET_OPTSPEED=y +CONFIG_MMCSD=y +CONFIG_MM_REGIONS=2 +CONFIG_MTD=y +CONFIG_MTD_W25=y +CONFIG_MTD_BYTE_WRITE=y +CONFIG_MTD_PROGMEM=y +CONFIG_MTD_PARTITION=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_CROMFSETC=y +CONFIG_NSH_DISABLE_BASENAME=y +CONFIG_NSH_DISABLE_DD=y +CONFIG_NSH_DISABLE_DIRNAME=y +CONFIG_NSH_DISABLE_HEXDUMP=y +CONFIG_NSH_DISABLE_IFCONFIG=y +CONFIG_NSH_DISABLE_IFUPDOWN=y +CONFIG_NSH_DISABLE_LOSETUP=y +CONFIG_NSH_DISABLE_MKFIFO=y +CONFIG_NSH_DISABLE_MKRD=y +CONFIG_NSH_DISABLE_PUT=y +CONFIG_NSH_DISABLE_REBOOT=y +CONFIG_NSH_DISABLE_TELNETD=y +CONFIG_NSH_DISABLE_UNAME=y +CONFIG_NSH_DISABLE_WGET=y +CONFIG_NSH_DISABLE_XD=y +CONFIG_NSH_FATDEVNO=0 +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_LINELEN=128 +CONFIG_NSH_MAXARGUMENTS=15 +CONFIG_NSH_MMCSDSPIPORTNO=2 +CONFIG_NSH_NESTDEPTH=8 +CONFIG_NSH_READLINE=y +CONFIG_NSH_ROMFSETC=y +CONFIG_NSH_ROMFSSECTSIZE=128 +CONFIG_NSH_STRERROR=y +CONFIG_NSH_VARS=y +CONFIG_PIPES=y +CONFIG_PREALLOC_TIMERS=50 +CONFIG_PRIORITY_INHERITANCE=y +CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_W25_SETSPEED=y +CONFIG_W25_WRITEWAIT=y +CONFIG_RAM_SIZE=196608 +CONFIG_RAM_START=0x20000000 +CONFIG_RAW_BINARY=y +CONFIG_RTC_DATETIME=y +CONFIG_SCHED_ATEXIT=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_HPWORKPRIORITY=249 +CONFIG_SCHED_HPWORKSTACKSIZE=1280 +CONFIG_SCHED_INSTRUMENTATION=y +CONFIG_SCHED_INSTRUMENTATION_EXTERNAL=y +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_LPWORKPRIORITY=50 +CONFIG_SCHED_LPWORKSTACKSIZE=1632 +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_SEM_NNESTPRIO=8 +CONFIG_SEM_PREALLOCHOLDERS=0 +CONFIG_SERIAL_TERMIOS=y +CONFIG_SIG_DEFAULT=y +CONFIG_SIG_SIGALRM_ACTION=y +CONFIG_SIG_SIGUSR1_ACTION=y +CONFIG_SIG_SIGUSR2_ACTION=y +CONFIG_SIG_SIGWORK=4 +CONFIG_STACK_COLORATION=y +CONFIG_START_DAY=30 +CONFIG_START_MONTH=11 +CONFIG_STDIO_BUFFER_SIZE=32 +CONFIG_STM32_ADC1=y +CONFIG_STM32_BBSRAM=y +CONFIG_STM32_BBSRAM_FILES=5 +CONFIG_STM32_BKPSRAM=y +CONFIG_STM32_CCMDATARAM=y +CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG=y +CONFIG_STM32_DMA1=y +CONFIG_STM32_DMA2=y +CONFIG_STM32_FLASH_PREFETCH=y +CONFIG_STM32_FLOWCONTROL_BROKEN=y +CONFIG_STM32_I2C2=y +CONFIG_STM32_I2CTIMEOMS=10 +CONFIG_STM32_I2CTIMEOTICKS=10 +CONFIG_STM32_JTAG_SW_ENABLE=y +CONFIG_STM32_OTGFS=y +CONFIG_STM32_PWR=y +CONFIG_STM32_RTC=y +CONFIG_STM32_RTC_HSECLOCK=y +CONFIG_STM32_RTC_MAGIC_REG=1 +CONFIG_STM32_SAVE_CRASHDUMP=y +CONFIG_STM32_SDIO=y +CONFIG_STM32_SDIO_CARD=y +CONFIG_STM32_SERIALBRK_BSDCOMPAT=y +CONFIG_STM32_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32_SPI1=y +CONFIG_STM32_SPI1_DMA=y +CONFIG_STM32_SPI1_DMA_BUFFER=1024 +CONFIG_STM32_SPI2=y +CONFIG_STM32_SPI2_DMA=y +CONFIG_STM32_SPI3=y +CONFIG_STM32_SPI_DMA=y +CONFIG_STM32_SPI_DMATHRESHOLD=8 +CONFIG_STM32_TIM1=y +CONFIG_STM32_TIM5=y +CONFIG_STM32_UART4=y +CONFIG_STM32_USART1=y +CONFIG_STM32_USART6=y +CONFIG_STM32_USART_BREAKS=y +CONFIG_STM32_USART_SINGLEWIRE=y +CONFIG_STM32_WWDG=y +CONFIG_SYSTEM_CDCACM=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=24 +CONFIG_UART4_BAUD=57600 +CONFIG_UART4_RXBUFSIZE=300 +# CONFIG_UART4_RXDMA=y # works only without DShot +CONFIG_UART4_TXBUFSIZE=900 +CONFIG_USART1_RXBUFSIZE=300 +CONFIG_USART1_RXDMA=y +CONFIG_USART1_TXBUFSIZE=300 +CONFIG_USART6_BAUD=57600 +CONFIG_USART6_RXBUFSIZE=300 +CONFIG_USART6_RXDMA=y +CONFIG_USART6_TXBUFSIZE=300 +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 +CONFIG_USERMAIN_STACKSIZE=2944 +CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/boards/diatone/mamba-f405-mk2/nuttx-config/scripts/script.ld b/boards/diatone/mamba-f405-mk2/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..c1d3ec63cf --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/nuttx-config/scripts/script.ld @@ -0,0 +1,138 @@ +/**************************************************************************** + * configs/omnibus-f4sd/scripts/ld.script + * + * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/* The STM32F405RG has 1024Kb of FLASH beginning at address 0x0800:0000 and + * 192Kb of SRAM. SRAM is split up into three blocks: + * + * 1) 112Kb of SRAM beginning at address 0x2000:0000 + * 2) 16Kb of SRAM beginning at address 0x2001:c000 + * 3) 64Kb of CCM SRAM beginning at address 0x1000:0000 + * + * When booting from FLASH, FLASH memory is aliased to address 0x0000:0000 + * where the code expects to begin execution by jumping to the entry point in + * the 0x0800:0000 address range. + * + * The first 16 KiB of flash is reserved for the bootloader. + * Paramater storage will use the next 16KiB Sector. + */ + +MEMORY +{ + flash (rx) : ORIGIN = 0x08008000, LENGTH = 992K + sram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K + ccsram (rwx) : ORIGIN = 0x10000000, LENGTH = 64K +} + +OUTPUT_ARCH(arm) + +ENTRY(__start) /* treat __start as the anchor for dead code stripping */ +EXTERN(_vectors) /* force the vectors to be included in the output */ + +/* + * Ensure that abort() is present in the final object. The exception handling + * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). + */ +EXTERN(abort) + +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + + } > flash + + /* + * Init functions (static constructors and the like) + */ + .init_section : { + _sinit = ABSOLUTE(.); + KEEP(*(.init_array .init_array.*)) + _einit = ABSOLUTE(.); + } > flash + + + .ARM.extab : { + *(.ARM.extab*) + } > flash + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : { + *(.ARM.exidx*) + } > flash + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + .data : { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + _edata = ABSOLUTE(.); + } > sram AT > flash + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > sram + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/boards/diatone/mamba-f405-mk2/src/CMakeLists.txt b/boards/diatone/mamba-f405-mk2/src/CMakeLists.txt new file mode 100644 index 0000000000..4212b7e6d2 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/CMakeLists.txt @@ -0,0 +1,50 @@ +############################################################################ +# +# Copyright (c) 2018 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +add_library(drivers_board + i2c.cpp + init.c + led.c + spi.cpp + timer_config.cpp + usb.c +) + +target_link_libraries(drivers_board + PRIVATE + arch_spi + drivers__led # drv_led_start + nuttx_arch # sdio + nuttx_drivers # sdio + px4_layer +) diff --git a/boards/diatone/mamba-f405-mk2/src/board_config.h b/boards/diatone/mamba-f405-mk2/src/board_config.h new file mode 100644 index 0000000000..7c2b17d84d --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/board_config.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * + * Copyright (c) 2018, 2014 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file board_config.h + * + * boards internal definitions + */ + +#pragma once + +/**************************************************************************************************** + * Included Files + ****************************************************************************************************/ + +#include +#include +#include + +/**************************************************************************************************** + * Definitions + ****************************************************************************************************/ +/* Configuration ************************************************************************************/ + +/* omnibusf4sd GPIOs ***********************************************************************************/ +/* LEDs */ +// power - green +// LED1 - PB5 - blue +#define GPIO_LED1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN5) +#define GPIO_LED_BLUE GPIO_LED1 + +#define BOARD_OVERLOAD_LED LED_BLUE + +#define FLASH_BASED_PARAMS + +/* + * ADC channels + * + * These are the channel numbers of the ADCs of the microcontroller that can be used by the Px4 Firmware in the adc driver + */ +#define ADC_CHANNELS (1 << 0) | (1 << 11) | (1 << 12) + +#define ADC_BATTERY_VOLTAGE_CHANNEL 11 +#define ADC_BATTERY_CURRENT_CHANNEL 13 +#define ADC_RC_RSSI_CHANNEL 12 + +/* Define Battery 1 Voltage Divider and A per V + */ +#define BOARD_BATTERY1_V_DIV (11.12f) +#define BOARD_BATTERY1_A_PER_V (31.f) + +/* User GPIOs + * + * GPIO0-5 are the PWM servo outputs. + * GPIO_TIM3_CH3OUT GPIO_TIM3_CH3OUT_1 //PB0 S1_OUT D1_ST7 + * GPIO_TIM3_CH4OUT GPIO_TIM3_CH4OUT_1 //PB1 S2_OUT D1_ST2 + * GPIO_TIM2_CH4OUT GPIO_TIM2_CH4OUT_1 //PA3 S3_OUT D1_ST6 + * GPIO_TIM2_CH3OUT GPIO_TIM2_CH3OUT_1 //PA2 S4_OUT D1_ST1 + * GPIO_TIM5_CH2OUT GPIO_TIM5_CH2OUT_1 //PA1 S5_OUT + * GPIO_TIM1_CH1OUT GPIO_TIM1_CH1OUT_1 //PA8 S6_OUT + */ + +#define _MK_GPIO_INPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_INPUT|GPIO_PULLUP)) + +#define GPIO_GPIO0_INPUT _MK_GPIO_INPUT(GPIO_TIM3_CH3IN) +#define GPIO_GPIO1_INPUT _MK_GPIO_INPUT(GPIO_TIM3_CH4IN) +#define GPIO_GPIO2_INPUT _MK_GPIO_INPUT(GPIO_TIM2_CH3IN) +#define GPIO_GPIO3_INPUT _MK_GPIO_INPUT(GPIO_TIM2_CH4IN) +//#define GPIO_GPIO4_INPUT _MK_GPIO_INPUT(GPIO_TIM5_CH2IN) +//#define GPIO_GPIO5_INPUT _MK_GPIO_INPUT(GPIO_TIM1_CH1IN) + +#define _MK_GPIO_OUTPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR)) + +#define GPIO_GPIO0_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM3_CH3OUT) +#define GPIO_GPIO1_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM3_CH4OUT) +#define GPIO_GPIO2_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM2_CH3OUT) +#define GPIO_GPIO3_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM2_CH4OUT) +//#define GPIO_GPIO4_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM5_CH2OUT) +//#define GPIO_GPIO5_OUTPUT _MK_GPIO_OUTPUT(GPIO_TIM1_CH1OUT) + +/* USB OTG FS + * + * PA9 OTG_FS_VBUS VBUS sensing + */ +#define GPIO_OTGFS_VBUS (GPIO_INPUT|GPIO_FLOAT|GPIO_SPEED_100MHz|GPIO_OPENDRAIN|GPIO_PORTC|GPIO_PIN5) + +/* PWM + * + * Alternatively CH3/CH4 could be assigned to UART6_TX/RX + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 4 +#define DIRECT_INPUT_TIMER_CHANNELS 4 + +// Has pwm outputs +#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS + +/* High-resolution timer */ +#define HRT_TIMER 4 // T4C1 +#define HRT_TIMER_CHANNEL 1 // use capture/compare channel 1 + +#define HRT_PPM_CHANNEL 3 // capture/compare channel 3 +#define GPIO_PPM_IN (GPIO_ALT|GPIO_AF2|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN8) + +#define RC_SERIAL_PORT "/dev/ttyS0" +#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT + +/* + * One RC_IN + * + * GPIO PPM_IN on PB8 T4CH3 + * SPEKTRUM_RX (it's TX or RX in Bind) on PA10 UART1 + * The FMU can drive GPIO PPM_IN as an output + */ +// TODO? +//#define GPIO_PPM_IN_AS_OUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN6) +//#define SPEKTRUM_RX_AS_GPIO_OUTPUT() px4_arch_configgpio(GPIO_PPM_IN_AS_OUT) +//#define SPEKTRUM_RX_AS_UART() px4_arch_configgpio(GPIO_USART1_RX) +//#define SPEKTRUM_OUT(_one_true) px4_arch_gpiowrite(GPIO_PPM_IN_AS_OUT, (_one_true)) + +#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS + +/* This board provides a DMA pool and APIs */ +#define BOARD_DMA_ALLOC_POOL_SIZE 5120 + +#define BOARD_HAS_ON_RESET 1 + +#define BOARD_ENABLE_CONSOLE_BUFFER +#define BOARD_CONSOLE_BUFFER_SIZE (1024*2) + + +__BEGIN_DECLS + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************************************** + * Public Functions + ****************************************************************************************************/ + +/**************************************************************************************************** + * Name: stm32_spiinitialize + * + * Description: + * Called to configure SPI chip select GPIO pins for the PX4FMU board. + * + ****************************************************************************************************/ + +extern void stm32_spiinitialize(void); + + +/**************************************************************************************************** + * Name: stm32_usbinitialize + * + * Description: + * Called to configure USB IO. + * + ****************************************************************************************************/ + +extern void stm32_usbinitialize(void); + +extern void board_peripheral_reset(int ms); + +#include + +#endif /* __ASSEMBLY__ */ + +__END_DECLS diff --git a/boards/diatone/mamba-f405-mk2/src/i2c.cpp b/boards/diatone/mamba-f405-mk2/src/i2c.cpp new file mode 100644 index 0000000000..3cf7e2e595 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/i2c.cpp @@ -0,0 +1,38 @@ +/**************************************************************************** + * + * Copyright (C) 2020 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include + +constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = { + initI2CBusExternal(2), +}; diff --git a/boards/diatone/mamba-f405-mk2/src/init.c b/boards/diatone/mamba-f405-mk2/src/init.c new file mode 100644 index 0000000000..ad2a64fa8b --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/init.c @@ -0,0 +1,343 @@ +/**************************************************************************** + * + * Copyright (c) 2012-2018 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file init.c + * + * mambaf405mk2-specific early startup code. This file implements the + * board_app_initialize() function that is called early by nsh during startup. + * + * Code here is run before the rcS script is invoked; it should start required + * subsystems and perform board-specific initialization. + */ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include "board_config.h" +#include + +#include + +#include +#include + +#include + +#include +#include +#include + +# if defined(FLASH_BASED_PARAMS) +# include +#endif + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +/* + * Ideally we'd be able to get these from arm_internal.h, + * but since we want to be able to disable the NuttX use + * of leds for system indication at will and there is no + * separate switch, we need to build independent of the + * CONFIG_ARCH_LEDS configuration switch. + */ +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +__END_DECLS + +/**************************************************************************** + * Protected Functions + ****************************************************************************/ +/**************************************************************************** + * Public Functions + ****************************************************************************/ +/************************************************************************************ + * Name: board_peripheral_reset + * + * Description: + * + ************************************************************************************/ +__EXPORT void board_peripheral_reset(int ms) +{ + UNUSED(ms); +} + +/************************************************************************************ + * Name: board_on_reset + * + * Description: + * Optionally provided function called on entry to board_system_reset + * It should perform any house keeping prior to the rest. + * + * status - 1 if resetting to boot loader + * 0 if just resetting + * + ************************************************************************************/ +__EXPORT void board_on_reset(int status) +{ + /* configure the GPIO pins to outputs and keep them low */ + for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { + px4_arch_configgpio(io_timer_channel_get_gpio_output(i)); + } + + /* On resets invoked from system (not boot) insure we establish a low + * output state (discharge the pins) on PWM pins before they become inputs. + */ + + if (status >= 0) { + up_mdelay(400); + } +} + +/************************************************************************************ + * Name: stm32_boardinitialize + * + * Description: + * All STM32 architectures must provide the following entry point. This entry point + * is called early in the initialization -- after all memory has been configured + * and mapped but before any devices have been initialized. + * + ************************************************************************************/ + +__EXPORT void +stm32_boardinitialize(void) +{ + /* Reset all PWM to Low outputs */ + + board_on_reset(-1); + + /* configure LEDs */ + board_autoled_initialize(); + + + /* configure ADC pins */ + stm32_configgpio(GPIO_ADC1_IN11); /* BATT_VOLTAGE_SENS */ + stm32_configgpio(GPIO_ADC1_IN13); /* BATT_CURRENT_SENS */ + stm32_configgpio(GPIO_ADC1_IN12); /* RSSI analog in (TX of UART4 instead) */ + + // TODO: power peripherals + ///* configure power supply control/sense pins */ + //stm32_configgpio(GPIO_PERIPH_3V3_EN); + //stm32_configgpio(GPIO_VDD_BRICK_VALID); + //stm32_configgpio(GPIO_VDD_USB_VALID); + + // TODO: 3v3 Sensor? + ///* Start with Sensor voltage off We will enable it + // * in board_app_initialize + // */ + //stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); + + // TODO: SBUS inversion? SPEK power? + //stm32_configgpio(GPIO_SBUS_INV); + //stm32_configgpio(GPIO_SPEKTRUM_PWR_EN); + + // TODO: $$$ Unused? + //stm32_configgpio(GPIO_8266_GPIO0); + //stm32_configgpio(GPIO_8266_PD); + //stm32_configgpio(GPIO_8266_RST); + + /* Safety - led don in led driver */ + + // TODO: unused? + //stm32_configgpio(GPIO_BTN_SAFETY); + + // TODO: RSSI + //stm32_configgpio(GPIO_RSSI_IN); + + stm32_configgpio(GPIO_PPM_IN); + + /* configure SPI all interfaces GPIO */ + + stm32_spiinitialize(); + +} + +/**************************************************************************** + * Name: board_app_initialize + * + * Description: + * Perform application specific initialization. This function is never + * called directly from application code, but only indirectly via the + * (non-standard) boardctl() interface using the command BOARDIOC_INIT. + * + * Input Parameters: + * arg - The boardctl() argument is passed to the board_app_initialize() + * implementation without modification. The argument has no + * meaning to NuttX; the meaning of the argument is a contract + * between the board-specific initalization logic and the the + * matching application logic. The value cold be such things as a + * mode enumeration value, a set of DIP switch switch settings, a + * pointer to configuration data read from a file or serial FLASH, + * or whatever you would like to do with it. Every implementation + * should accept zero/NULL as a default configuration. + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure to indicate the nature of the failure. + * + ****************************************************************************/ + +static struct spi_dev_s *spi1; +static struct spi_dev_s *spi2; +static struct spi_dev_s *spi3; + +__EXPORT int board_app_initialize(uintptr_t arg) +{ + px4_platform_init(); + + /* configure the DMA allocator */ + + if (board_dma_alloc_init() < 0) { + syslog(LOG_ERR, "DMA alloc FAILED\n"); + } + +#if defined(SERIAL_HAVE_RXDMA) + // set up the serial DMA polling at 1ms intervals for received bytes that have not triggered a DMA event. + static struct hrt_call serial_dma_call; + hrt_call_every(&serial_dma_call, 1000, 1000, (hrt_callout)stm32_serial_dma_poll, NULL); +#endif + + /* initial LED state */ + drv_led_start(); + led_off(LED_BLUE); + + if (board_hardfault_init(2, true) != 0) { + led_on(LED_BLUE); + } + + + /* Configure SPI-based devices */ + + // SPI1: MPU6000 + spi1 = stm32_spibus_initialize(1); + + if (!spi1) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI port 1\n"); + led_on(LED_BLUE); + return -ENODEV; + } + + /* Default SPI1 to 1MHz and de-assert the known chip selects. */ + SPI_SETFREQUENCY(spi1, 10000000); + SPI_SETBITS(spi1, 8); + SPI_SETMODE(spi1, SPIDEV_MODE3); + up_udelay(20); + + // SPI2: SDCard + /* Get the SPI port for the microSD slot */ + spi2 = stm32_spibus_initialize(CONFIG_NSH_MMCSDSPIPORTNO); + + if (!spi2) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI port %d\n", CONFIG_NSH_MMCSDSPIPORTNO); + led_on(LED_BLUE); + return -ENODEV; + } + + /* Now bind the SPI interface to the MMCSD driver */ + int result = mmcsd_spislotinitialize(CONFIG_NSH_MMCSDMINOR, CONFIG_NSH_MMCSDSLOTNO, spi2); + + if (result != OK) { + led_on(LED_BLUE); + syslog(LOG_ERR, "[boot] FAILED to bind SPI port 2 to the MMCSD driver\n"); + return -ENODEV; + } + + up_udelay(20); + + + // SPI3: OSD / Baro + spi3 = stm32_spibus_initialize(3); + + if (!spi3) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI port 3\n"); + led_on(LED_BLUE); + return -ENODEV; + } + + /* Copied from fmu-v4 + * Default SPI3 to 12MHz and de-assert the known chip selects. + * MS5611 has max SPI clock speed of 20MHz + */ + + // BMP280 max SPI speed is 10 MHz + SPI_SETFREQUENCY(spi3, 10 * 1000 * 1000); + SPI_SETBITS(spi3, 8); + SPI_SETMODE(spi3, SPIDEV_MODE3); + up_udelay(20); + +#if defined(FLASH_BASED_PARAMS) + static sector_descriptor_t params_sector_map[] = { + {1, 16 * 1024, 0x08004000}, + {0, 0, 0}, + }; + + /* Initialize the flashfs layer to use heap allocated memory */ + result = parameter_flashfs_init(params_sector_map, NULL, 0); + + if (result != OK) { + syslog(LOG_ERR, "[boot] FAILED to init params in FLASH %d\n", result); + led_on(LED_AMBER); + return -ENODEV; + } + +#endif + + /* Configure the HW based on the manifest */ + + px4_platform_configure(); + + return OK; +} diff --git a/boards/diatone/mamba-f405-mk2/src/led.c b/boards/diatone/mamba-f405-mk2/src/led.c new file mode 100644 index 0000000000..463474a8fd --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/led.c @@ -0,0 +1,120 @@ +/**************************************************************************** + * + * Copyright (c) 2018 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file led.c + * + * omnibusf4sd LED backend. + */ + +#include + +#include + +#include "stm32.h" +#include "board_config.h" + +#include + +/* + * Ideally we'd be able to get these from arm_internal.h, + * but since we want to be able to disable the NuttX use + * of leds for system indication at will and there is no + * separate switch, we need to build independent of the + * CONFIG_ARCH_LEDS configuration switch. + */ +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +extern void led_toggle(int led); +__END_DECLS + +static uint32_t g_ledmap[] = { + GPIO_LED_BLUE, +}; + +__EXPORT void led_init(void) +{ + /* Configure LED GPIOs for output */ + for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { + stm32_configgpio(g_ledmap[l]); + } +} + +static void phy_set_led(int led, bool state) +{ + /* Pull Down to switch on */ + if (led == 0) { + stm32_gpiowrite(g_ledmap[led], !state); + } +} + +__EXPORT void led_on(int led) +{ + phy_set_led(led, true); +} + +__EXPORT void led_off(int led) +{ + phy_set_led(led, false); +} + +__EXPORT void led_toggle(int led) +{ + if (led == 0) { + phy_set_led(led, !stm32_gpioread(g_ledmap[led])); + } +} + +__EXPORT void board_autoled_initialize(void) +{ + /* Configure LED1 GPIO for output */ + stm32_configgpio(GPIO_LED1); +} + +__EXPORT void board_autoled_on(int led) +{ + if (led == 1) { + /* Pull down to switch on */ + stm32_gpiowrite(GPIO_LED1, false); + } +} + +__EXPORT void board_autoled_off(int led) +{ + if (led == 1) { + /* Pull up to switch off */ + stm32_gpiowrite(GPIO_LED1, true); + } +} diff --git a/boards/diatone/mamba-f405-mk2/src/spi.cpp b/boards/diatone/mamba-f405-mk2/src/spi.cpp new file mode 100644 index 0000000000..3a8c09ef16 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/spi.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** + * + * Copyright (C) 2018 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include +#include +#include + +constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { + initSPIBus(SPI::Bus::SPI1, { + initSPIDevice(DRV_IMU_DEVTYPE_MPU6000, SPI::CS{GPIO::PortA, GPIO::Pin4}), + initSPIDevice(DRV_IMU_DEVTYPE_ICM20602, SPI::CS{GPIO::PortA, GPIO::Pin4}), + }), + initSPIBus(SPI::Bus::SPI2, { + initSPIDevice(DRV_OSD_DEVTYPE_ATXXXX, SPI::CS{GPIO::PortB, GPIO::Pin12}), + }), + initSPIBus(SPI::Bus::SPI3, { + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortB, GPIO::Pin3}), + }), +}; + +static constexpr bool unused = validateSPIConfig(px4_spi_buses); diff --git a/boards/diatone/mamba-f405-mk2/src/timer_config.cpp b/boards/diatone/mamba-f405-mk2/src/timer_config.cpp new file mode 100644 index 0000000000..8ee6104f50 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/timer_config.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * Copyright (C) 2018 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include + +constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { + initIOTimer(Timer::Timer3, DMA{DMA::Index1, DMA::Stream2, DMA::Channel5}), + initIOTimer(Timer::Timer2, DMA{DMA::Index1, DMA::Stream1, DMA::Channel3}), +}; + +constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), + initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel3}, {GPIO::PortA, GPIO::Pin2}), + initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel4}, {GPIO::PortA, GPIO::Pin3}), +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/diatone/mamba-f405-mk2/src/usb.c b/boards/diatone/mamba-f405-mk2/src/usb.c new file mode 100644 index 0000000000..f02ec76bb8 --- /dev/null +++ b/boards/diatone/mamba-f405-mk2/src/usb.c @@ -0,0 +1,107 @@ +/**************************************************************************** + * + * Copyright (C) 2018 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file usb.c + * + * Board-specific USB functions. + */ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include "board_config.h" + +/************************************************************************************ + * Definitions + ************************************************************************************/ + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +/************************************************************************************ + * Name: stm32_usbinitialize + * + * Description: + * Called to setup USB-related GPIO pins for the omnibusf4sd board. + * + ************************************************************************************/ + +__EXPORT void stm32_usbinitialize(void) +{ + /* The OTG FS has an internal soft pull-up */ + + /* Configure the OTG FS VBUS sensing GPIO, Power On, and Overcurrent GPIOs */ + +#ifdef CONFIG_STM32_OTGFS + stm32_configgpio(GPIO_OTGFS_VBUS); + /* XXX We only support device mode + stm32_configgpio(GPIO_OTGFS_PWRON); + stm32_configgpio(GPIO_OTGFS_OVER); + */ +#endif +} + +/************************************************************************************ + * Name: stm32_usbsuspend + * + * Description: + * Board logic must provide the stm32_usbsuspend logic if the USBDEV driver is + * used. This function is called whenever the USB enters or leaves suspend mode. + * This is an opportunity for the board logic to shutdown clocks, power, etc. + * while the USB is suspended. + * + ************************************************************************************/ + +__EXPORT void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume) +{ + uinfo("resume: %d\n", resume); +}