From 50f7890d6a59eb0f0a2cb41de74ace3b73e93f8e Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 27 Jan 2021 17:56:33 +0000 Subject: [PATCH 1/3] AP_HAL_ChibiOS: ensure GPIO pins get undef'ed properly minimise bi-directional dshot configs for: CubeOrange Durandal MatekF405 MatekH743 OmnibusNanoV6 Pixracer mRoPixracerPro omnibusf4pro CUAV-X7 --- .../hwdef/CUAV-X7-bdshot/defaults.parm | 18 + .../hwdef/CUAV-X7-bdshot/hwdef-bl.dat | 1 + .../hwdef/CUAV-X7-bdshot/hwdef.dat | 8 + .../hwdef/CubeOrange-bdshot/hwdef-bl.dat | 1 + .../hwdef/CubeOrange-bdshot/hwdef.dat | 318 +----------------- .../hwdef/Durandal-bdshot/hwdef-bl.dat | 1 + .../hwdef/Durandal-bdshot/hwdef.dat | 10 + .../hwdef/MatekF405-bdshot/hwdef-bl.dat | 1 + .../hwdef/MatekF405-bdshot/hwdef.dat | 172 +--------- .../hwdef/MatekH743-bdshot/hwdef-bl.dat | 1 + .../hwdef/MatekH743-bdshot/hwdef.dat | 204 +---------- .../hwdef/OmnibusNanoV6-bdshot/hwdef-bl.dat | 1 + .../hwdef/OmnibusNanoV6-bdshot/hwdef.dat | 147 +------- .../hwdef/Pixracer-bdshot/hwdef-bl.dat | 1 + .../hwdef/Pixracer-bdshot/hwdef.dat | 227 +------------ .../hwdef/mRoPixracerPro-bdshot/hwdef-bl.dat | 1 + .../hwdef/mRoPixracerPro-bdshot/hwdef.dat | 280 +-------------- .../hwdef/omnibusf4pro-bdshot/hwdef-bl.dat | 1 + .../hwdef/omnibusf4pro-bdshot/hwdef.dat | 161 +-------- .../hwdef/scripts/chibios_hwdef.py | 45 +-- 20 files changed, 96 insertions(+), 1503 deletions(-) create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/defaults.parm create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/defaults.parm b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/defaults.parm new file mode 100644 index 0000000000000..56c00efb7f847 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/defaults.parm @@ -0,0 +1,18 @@ +# temperature control. We need lower P/I values +# to prevent oscillation of the BMI088 temperature +# the ADIS16470 is factory temperature calibrated, +# but the BMI088 isn't, so temperature control is still +# worthwhile +BRD_IMU_TARGTEMP 45 +BRD_IMUHEAT_P 50 +BRD_IMUHEAT_I 0.07 + +# turn on the CAN power monitoring(default) +CAN_P1_DRIVER 1 +BATT_MONITOR 8 + +# setup the parameter for the ADC power module +BATT_VOLT_PIN 16 +BATT_CURR_PIN 17 +BATT_VOLT_MULT 18.000 +BATT_AMP_PERVLT 24.000 diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..41c75c649b37e --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../CUAV-X7/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef.dat new file mode 100644 index 0000000000000..5dd2d33b89fcc --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7-bdshot/hwdef.dat @@ -0,0 +1,8 @@ +# Bi-directional dshot version CUAV-X7 + +include ../CUAV-X7/hwdef.dat + +undef PH10 PH12 + +PH10 TIM5_CH1 TIM5 PWM(1) GPIO(50) BIDIR +PH12 TIM5_CH3 TIM5 PWM(3) GPIO(52) BIDIR diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..b24ffaa71dc1d --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../CubeOrange/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef.dat index 50c3bb375c929..6666bb218600e 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-bdshot/hwdef.dat @@ -1,324 +1,12 @@ -# hw definition file for processing by chibios_hwdef.py +# Bi-directional dshot version of CubeOrange -# USB setup -USB_VENDOR 0x2DAE # ONLY FOR USE BY HEX! NOBODY ELSE -USB_PRODUCT 0x1016 -USB_STRING_MANUFACTURER "Hex/ProfiCNC" -USB_STRING_PRODUCT "CubeOrange" -USB_STRING_SERIAL "%SERIAL%" +include ../CubeOrange/hwdef.dat -# MCU class and specific type -MCU STM32H7xx STM32H743xx +undef PE14 PE13 PE11 PE9 PD13 PD14 -# crystal frequency -OSCILLATOR_HZ 24000000 - -# board ID for firmware load -APJ_BOARD_ID 140 - -FLASH_SIZE_KB 2048 - -# with 2M flash we can afford to optimize for speed -env OPTIMIZE -O2 - -FLASH_RESERVE_START_KB 128 - -define HAL_STORAGE_SIZE 16384 - -# order of I2C buses -I2C_ORDER I2C2 I2C1 - -# order of UARTs (and USB) -SERIAL_ORDER OTG1 USART2 USART3 UART4 UART8 UART7 OTG2 - -# If the board has an IOMCU connected via a UART then this defines the -# UART to talk to that MCU. Leave it out for boards with no IOMCU. - -# UART for IOMCU -IOMCU_UART USART6 - -# UART4 serial GPS -PA0 UART4_TX UART4 -PA1 UART4_RX UART4 NODMA - -PA2 BATT_VOLTAGE_SENS ADC1 SCALE(1) -PA3 BATT_CURRENT_SENS ADC1 SCALE(1) - -# Now the VDD sense pin. This is used to sense primary board voltage. -PA4 VDD_5V_SENS ADC1 SCALE(2) - -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -# This defines an output pin which will default to output HIGH. It is -# a pin that enables peripheral power on this board. It starts in the -# off state, then is pulled low to enable peripherals in -# peripheral_power_enable() -PA8 nVDD_5V_PERIPH_EN OUTPUT HIGH - -# This is the pin that senses USB being connected. It is an input pin -# setup as OPENDRAIN. -PA9 VBUS INPUT OPENDRAIN - -# Now we define the pins that USB is connected on. -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 - -# These are the pins for SWD debugging with a STlinkv2 or black-magic probe. -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -# PWM output for buzzer -PA15 TIM2_CH1 TIM2 GPIO(77) ALARM - -# This defines a couple of general purpose outputs, mapped to GPIO -# numbers 1 and 2 for users. -PB0 EXTERN_GPIO1 OUTPUT GPIO(1) -PB1 EXTERN_GPIO2 OUTPUT GPIO(2) - -# This defines some input pins, currently unused. -PB2 BOOT1 INPUT -PB3 FMU_SW0 INPUT - -# This defines the pins for the 2nd CAN interface, if available. -PB6 CAN2_TX CAN2 -PB12 CAN2_RX CAN2 - -# Now the first I2C bus. The pin speeds are automatically setup -# correctly, but can be overridden here if needed. -PB8 I2C1_SCL I2C1 -PB9 I2C1_SDA I2C1 - -# the 2nd I2C bus -PB10 I2C2_SCL I2C2 -PB11 I2C2_SDA I2C2 - -# the 2nd SPI bus -PB13 SPI2_SCK SPI2 -PB14 SPI2_MISO SPI2 -PB15 SPI2_MOSI SPI2 - -# This input pin is used to detect that power is valid on USB. -PC0 VBUS_nVALID INPUT PULLUP - -# This defines the CS pin for the magnetometer and first IMU. Note -# that CS pins are software controlled, and are not tied to a particular -# SPI bus. -PC1 MAG_CS CS -PC2 MPU_CS CS - -# This defines more ADC inputs. -PC3 AUX_POWER ADC1 SCALE(1) -PC4 AUX_ADC2 ADC1 SCALE(1) - -# And the analog input for airspeed (rarely used these days). -PC5 PRESSURE_SENS ADC1 SCALE(2) - -# USART6 to IO -PC6 USART6_TX USART6 -PC7 USART6_RX USART6 - -# Now setup the pins for the microSD card, if available. -PC8 SDMMC1_D0 SDMMC1 -PC9 SDMMC1_D1 SDMMC1 -PC10 SDMMC1_D2 SDMMC1 -PC11 SDMMC1_D3 SDMMC1 -PC12 SDMMC1_CK SDMMC1 -PD2 SDMMC1_CMD SDMMC1 - -# More CS pins for more sensors. The labels for all CS pins need to -# match the SPI device table later in this file. -PC13 GYRO_EXT_CS CS -PC14 BARO_EXT_CS CS -PC15 ACCEL_EXT_CS CS -PD7 BARO_CS CS -PE4 MPU_EXT_CS CS - -# the first CAN bus -PD0 CAN1_RX CAN1 -PD1 CAN1_TX CAN1 - -# Another USART, this one for telem1. This one has RTS and CTS lines. -# USART2 serial2 telem1 -PD3 USART2_CTS USART2 -PD4 USART2_RTS USART2 -PD5 USART2_TX USART2 -PD6 USART2_RX USART2 - -# The telem2 USART, also with RTS/CTS available. -# USART3 serial3 telem2 -PD8 USART3_TX USART3 -PD9 USART3_RX USART3 -PD11 USART3_CTS USART3 -PD12 USART3_RTS USART3 - -# The CS pin for FRAM (ramtron). This one is marked as using -# SPEED_VERYLOW, which matches the HAL_PX4 setup. -PD10 FRAM_CS CS SPEED_VERYLOW - -# Now we start defining some PWM pins. We also map these pins to GPIO -# values, so users can set BRD_PWM_COUNT to choose how many of the PWM -# outputs on the primary MCU are setup as PWM and how many as -# GPIOs. To match HAL_PX4 we number the GPIOs for the PWM outputs -# starting at 50. PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) BIDIR PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) # this will automatically be shared with TIM1_CH4 PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) BIDIR PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) # this will automatically be shared with TIM1_CH1 PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54) BIDIR PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55) BIDIR - -define BOARD_PWM_COUNT_DEFAULT 4 - -# Pin for PWM Voltage Selection -PB4 PWM_VOLT_SEL OUTPUT HIGH GPIO(3) - -# Relays default to use GPIO pins 54 and 55. -define RELAY1_PIN_DEFAULT 54 -define RELAY2_PIN_DEFAULT 55 - -# This is the invensense data-ready pin. We don't use it in the -# default driver. -PD15 MPU_DRDY INPUT - -# the 2nd GPS UART -# UART8 serial4 GPS2 -PE0 UART8_RX UART8 -PE1 UART8_TX UART8 NODMA - -# Now setup SPI bus4. -PE2 SPI4_SCK SPI4 -PE5 SPI4_MISO SPI4 -PE6 SPI4_MOSI SPI4 - -# This is the pin to enable the sensors rail. It can be used to power -# cycle sensors to recover them in case there are problems with power on -# timing affecting sensor stability. We pull it LOW on startup, which -# means sensors off, then it is pulled HIGH in peripheral_power_enable() -PE3 VDD_3V3_SENSORS_EN OUTPUT LOW - -# UART7 maps to uartF in the HAL (serial5 in SERIALn_ parameters). -PE7 UART7_RX UART7 -PE8 UART7_TX UART7 - -# Define a LED, mapping it to GPIO(0). LOW will illuminate the LED -PE12 FMU_LED_AMBER OUTPUT HIGH OPENDRAIN GPIO(0) - -# Power flag pins: these tell the MCU the status of the various power -# supplies that are available. The pin names need to exactly match the -# names used in AnalogIn.cpp. -PB5 VDD_BRICK_nVALID INPUT PULLUP -PB7 VDD_BRICK2_nVALID INPUT PULLUP -PE10 VDD_5V_HIPOWER_nOC INPUT PULLUP -PE15 VDD_5V_PERIPH_nOC INPUT PULLUP - -SPIDEV ms5611 SPI1 DEVID3 BARO_CS MODE3 20*MHZ 20*MHZ -SPIDEV ms5611_ext SPI4 DEVID2 BARO_EXT_CS MODE3 20*MHZ 20*MHZ -SPIDEV mpu6000 SPI1 DEVID4 MPU_CS MODE3 2*MHZ 8*MHZ -SPIDEV icm20608-am SPI1 DEVID2 ACCEL_EXT_CS MODE3 4*MHZ 8*MHZ -SPIDEV mpu9250 SPI1 DEVID4 MPU_CS MODE3 4*MHZ 8*MHZ -SPIDEV mpu9250_ext SPI4 DEVID1 MPU_EXT_CS MODE3 4*MHZ 8*MHZ -SPIDEV icm20948 SPI1 DEVID4 MPU_CS MODE3 4*MHZ 8*MHZ -SPIDEV icm20948_ext SPI4 DEVID1 MPU_EXT_CS MODE3 4*MHZ 8*MHZ -SPIDEV hmc5843 SPI1 DEVID5 MAG_CS MODE3 11*MHZ 11*MHZ -SPIDEV lsm9ds0_g SPI1 DEVID1 GYRO_EXT_CS MODE3 11*MHZ 11*MHZ -SPIDEV lsm9ds0_am SPI1 DEVID2 ACCEL_EXT_CS MODE3 11*MHZ 11*MHZ -SPIDEV lsm9ds0_ext_g SPI4 DEVID4 GYRO_EXT_CS MODE3 11*MHZ 11*MHZ -SPIDEV lsm9ds0_ext_am SPI4 DEVID3 ACCEL_EXT_CS MODE3 11*MHZ 11*MHZ -SPIDEV icm20602_ext SPI4 DEVID4 GYRO_EXT_CS MODE3 4*MHZ 8*MHZ -SPIDEV ramtron SPI2 DEVID10 FRAM_CS MODE3 8*MHZ 8*MHZ -SPIDEV external0m0 SPI4 DEVID5 MPU_EXT_CS MODE0 2*MHZ 2*MHZ -SPIDEV external0m1 SPI4 DEVID5 MPU_EXT_CS MODE1 2*MHZ 2*MHZ -SPIDEV external0m2 SPI4 DEVID5 MPU_EXT_CS MODE2 2*MHZ 2*MHZ -SPIDEV external0m3 SPI4 DEVID5 MPU_EXT_CS MODE3 2*MHZ 2*MHZ -SPIDEV pixartPC15 SPI4 DEVID13 ACCEL_EXT_CS MODE3 2*MHZ 2*MHZ - -# three IMUs, but allow for different varients. First two IMUs are -# isolated, 3rd isn't -IMU Invensense SPI:mpu9250_ext ROTATION_PITCH_180 - -# the 3 rotations for the LSM9DS0 driver are for the accel, the gyro -# and the H varient of the gyro -IMU LSM9DS0 SPI:lsm9ds0_ext_g SPI:lsm9ds0_ext_am ROTATION_ROLL_180_YAW_270 ROTATION_ROLL_180_YAW_90 ROTATION_ROLL_180_YAW_90 - -# 3rd non-isolated IMU -IMU Invensense SPI:mpu9250 ROTATION_YAW_270 - -# alternative IMU set for newer cubes -IMU Invensense SPI:icm20602_ext ROTATION_ROLL_180_YAW_270 -IMU Invensensev2 SPI:icm20948_ext ROTATION_PITCH_180 -IMU Invensensev2 SPI:icm20948 ROTATION_YAW_270 - -# Sensor Check alias for validating board type -CHECK_ICM20649 spi_check_register_inv2("icm20948", INV2REG_WHOAMI, INV2_WHOAMI_ICM20649) -CHECK_ICM20602_EXT spi_check_register("icm20602_ext", MPUREG_WHOAMI, MPU_WHOAMI_ICM20602) -CHECK_ICM20948_EXT spi_check_register_inv2("icm20948_ext", INV2REG_WHOAMI, INV2_WHOAMI_ICM20948) -CHECK_MS5611 check_ms5611("ms5611") -CHECK_MS5611_EXT check_ms5611("ms5611_ext") - -# Sensor Check Macros to be used for validating board type -CHECK_IMU0_PRESENT $CHECK_ICM20602_EXT -CHECK_IMU1_PRESENT $CHECK_ICM20948_EXT -CHECK_IMU2_PRESENT $CHECK_ICM20649 -CHECK_BARO0_PRESENT $CHECK_MS5611 -CHECK_BARO1_PRESENT $CHECK_MS5611_EXT - -BOARD_VALIDATE $CHECK_IMU0_PRESENT $CHECK_IMU1_PRESENT $CHECK_IMU2_PRESENT $CHECK_BARO0_PRESENT $CHECK_BARO1_PRESENT - - -define HAL_DEFAULT_INS_FAST_SAMPLE 7 - -# two baros -BARO MS56XX SPI:ms5611_ext -BARO MS56XX SPI:ms5611 - -# two compasses. First is in the LSM303D -COMPASS LSM303D SPI:lsm9ds0_ext_am ROTATION_YAW_270 -# 2nd compass is part of the 2nd invensense IMU -COMPASS AK8963:probe_mpu9250 1 ROTATION_YAW_270 - -# compass as part of ICM20948 on newer cubes -COMPASS AK09916:probe_ICM20948 0 ROTATION_ROLL_180_YAW_90 - -# also probe for external compasses -define HAL_PROBE_EXTERNAL_I2C_COMPASSES - -define HAL_CHIBIOS_ARCH_FMUV3 1 - -define BOARD_TYPE_DEFAULT 3 - -# Nnow some defines for logging and terrain data files. -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -# allow to have have a dedicated safety switch pin -define HAL_HAVE_SAFETY_SWITCH 1 - -# Enable RAMTROM parameter storage. -define HAL_WITH_RAMTRON 1 - -# Setup for the possibility of an IMU heater since the pixhawk2 cube has -# an IMU heater. -define HAL_HAVE_IMU_HEATER 1 - -# Enable FAT filesystem support (needs a microSD defined via SDMMC). -define HAL_OS_FATFS_IO 1 - -# Now setup the default battery pins driver analog pins and default -# scaling for the power brick. -define HAL_BATT_VOLT_PIN 14 -define HAL_BATT_CURR_PIN 15 -define HAL_BATT_VOLT_SCALE 10.1 -define HAL_BATT_CURR_SCALE 17.0 -define HAL_GPIO_PWM_VOLT_PIN 3 -define HAL_GPIO_PWM_VOLT_3v3 1 - -# List of files to put in ROMFS. For fmuv3 we need an IO firmware so -# we can automatically update the IOMCU firmware on boot. The format -# is "ROMFS ROMFS-filename source-filename". Paths are relative to the -# ardupilot root. -ROMFS io_firmware.bin Tools/IO_Firmware/iofirmware_highpolh.bin - -DMA_NOSHARE SPI1* SPI4* USART6* - diff --git a/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..0e17449b5bbdb --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../Durandal/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef.dat new file mode 100644 index 0000000000000..54241bbe2df69 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/Durandal-bdshot/hwdef.dat @@ -0,0 +1,10 @@ +# Bi-directional dshot version of Durandal + +include ../Durandal/hwdef.dat + +undef PE14 PA10 PE11 PE9 PD13 PD14 + +PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) BIDIR +PA10 TIM1_CH3 TIM1 PWM(2) GPIO(51) +PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) BIDIR +PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) diff --git a/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..aa20e62bd4206 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../MatekF405/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef.dat index 6d6ef3a09589f..6ae5e97e18428 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/MatekF405-bdshot/hwdef.dat @@ -1,173 +1,7 @@ -# hw definition file for MatekF405 hardware -# tested on the MatekF405-OSD board -# with thanks to betaflight for pinout +# Bi-directional dshot version of MatekF405 +include ../MatekF405/hwdef.dat -# MCU class and specific type -MCU STM32F4xx STM32F405xx +undef PC6 -# board ID for firmware load -APJ_BOARD_ID 125 - -# crystal frequency -OSCILLATOR_HZ 8000000 - -define STM32_ST_USE_TIMER 4 -define CH_CFG_ST_RESOLUTION 16 - -FLASH_SIZE_KB 1024 - - -# only one I2C bus -I2C_ORDER I2C1 - -# order of UARTs (and USB) -SERIAL_ORDER OTG1 USART3 UART4 USART1 UART5 USART2 - -# LEDs -PB9 LED_BLUE OUTPUT LOW GPIO(0) -PA14 LED_GREEN OUTPUT LOW GPIO(1) - -define HAL_GPIO_A_LED_PIN 0 -define HAL_GPIO_B_LED_PIN 1 - -# buzzer -PC13 BUZZER OUTPUT GPIO(80) LOW -define HAL_BUZZER_PIN 80 -define HAL_BUZZER_ON 1 -define HAL_BUZZER_OFF 0 - -# spi1 bus for IMU -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -# spi2 for OSD -PB13 SPI2_SCK SPI2 -PB14 SPI2_MISO SPI2 -PB15 SPI2_MOSI SPI2 -PB10 MAX7456_CS CS - -# spi3 for sdcard and onboard flash -PB3 SPI3_SCK SPI3 -PB4 SPI3_MISO SPI3 -PB5 SPI3_MOSI SPI3 -PC1 SDCARD_CS CS -PC0 M25P16_CS CS - -PC2 MPU6000_CS CS - -# only one I2C bus in normal config -PB6 I2C1_SCL I2C1 -PB7 I2C1_SDA I2C1 - -# analog pins -PC5 BATT_VOLTAGE_SENS ADC1 SCALE(1) -PC4 BATT_CURRENT_SENS ADC1 SCALE(1) -PB1 RSSI_ADC_PIN ADC1 SCALE(1) - -# define default battery setup -# PC5 - ADC12_CH15 -define HAL_BATT_VOLT_PIN 15 -# PC4 - ADC12_CH14 -define HAL_BATT_CURR_PIN 14 -define HAL_BATT_VOLT_SCALE 10.1 -define HAL_BATT_CURR_SCALE 17.0 - -#analog rssi pin (also could be used as analog airspeed input) -# PB1 - ADC12_CH9 -define BOARD_RSSI_ANA_PIN 9 - -# USART1 -PA9 USART1_TX USART1 -PA10 USART1_RX USART1 - -# RC input using timer -PA3 TIM9_CH2 TIM9 RCININT PULLDOWN - -# alternative RC input using UART -PA2 USART2_TX USART2 NODMA -PA3 USART2_RX USART2 NODMA ALT(1) - -# USART3 -PC10 USART3_TX USART3 -PC11 USART3_RX USART3 - -# UART4 -PA0 UART4_TX UART4 -PA1 UART4_RX UART4 - -# UART5 -PD2 UART5_RX UART5 -PC12 UART5_TX UART5 - -# PA10 IO-debug-console -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 - -# USB detection -PB12 VBUS INPUT OPENDRAIN - -# debug (disabled out to allow for both LEDs) -#PA13 JTMS-SWDIO SWD -#PA14 JTCK-SWCLK SWD - -# PWM out pins. Note that channel order follows the ArduPilot motor -# order conventions PC6 TIM8_CH1 TIM8 PWM(1) GPIO(50) BIDIR -PC7 TIM8_CH2 TIM8 PWM(2) GPIO(51) -PC8 TIM8_CH3 TIM8 PWM(3) GPIO(52) -PC9 TIM8_CH4 TIM8 PWM(4) GPIO(53) -PA15 TIM2_CH1 TIM2 PWM(5) GPIO(54) -PA8 TIM1_CH1 TIM1 PWM(6) GPIO(55) - -define HAL_STORAGE_SIZE 15360 -define STORAGE_FLASH_PAGE 2 - -# reserve 32k for bootloader and 32k for flash storage -FLASH_RESERVE_START_KB 64 - -# one IMU -IMU Invensense SPI:mpu6000 ROTATION_YAW_180 - -# probe for I2C BMP280, but allow init on board variants without onboard baro too -BARO BMP280 I2C:0:0x76 -define HAL_PROBE_EXTERNAL_I2C_BAROS -define HAL_BARO_ALLOW_INIT_NO_BARO - -# no built-in compass, but probe the i2c bus for all possible -# external compass types -define ALLOW_ARM_NO_COMPASS -define HAL_COMPASS_DEFAULT HAL_COMPASS_NONE -define HAL_PROBE_EXTERNAL_I2C_COMPASSES -define HAL_I2C_INTERNAL_MASK 0 -define HAL_COMPASS_AUTO_ROT_DEFAULT 2 - -# SPI devices -SPIDEV mpu6000 SPI1 DEVID1 MPU6000_CS MODE3 1*MHZ 8*MHZ -SPIDEV sdcard SPI3 DEVID1 SDCARD_CS MODE0 400*KHZ 25*MHZ -SPIDEV osd SPI2 DEVID1 MAX7456_CS MODE0 10*MHZ 10*MHZ - -# filesystem setup on sdcard -define HAL_OS_FATFS_IO 1 -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -# 8 PWM available by default -define BOARD_PWM_COUNT_DEFAULT 8 - -# setup for OSD -define OSD_ENABLED 1 -define HAL_OSD_TYPE_DEFAULT 1 -ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin - -# disable SMBUS and fuel battery monitors to save flash -define HAL_BATTMON_SMBUS_ENABLE 0 -define HAL_BATTMON_FUEL_ENABLE 0 - -# disable parachute and sprayer to save flash -define HAL_PARACHUTE_ENABLED 0 -define HAL_SPRAYER_ENABLED 0 - -# reduce max size of embedded params for apj_tool.py -define AP_PARAM_MAX_EMBEDDED_PARAM 1024 diff --git a/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..fd5a1dfc833c1 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../MatekH743/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef.dat index e67a2856940bd..32ec2edd01f34 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/MatekH743-bdshot/hwdef.dat @@ -1,138 +1,13 @@ -# hw definition file for processing by chibios_pins.py -# for Matek H743-WING +# Bi-directional dshot version of MatekF405 +# RC input and buzzer timers need to be used so buzzer becomes single tone +# and UART is used for RCIN -# MCU class and specific type -MCU STM32H7xx STM32H743xx +include ../MatekH743/hwdef.dat -# board ID for firmware load -APJ_BOARD_ID 1013 +# undefine the pins we are going to change +undef PC7 PB0 PB1 PA0 PA1 PA15 -# crystal frequency, setup to use external oscillator -OSCILLATOR_HZ 8000000 - -FLASH_SIZE_KB 2048 -env OPTIMIZE -O2 - -# bootloader takes first sector -FLASH_RESERVE_START_KB 128 - - -# ChibiOS system timer -STM32_ST_USE_TIMER 12 -define CH_CFG_ST_RESOLUTION 16 - -# USB -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 - -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -# SPI1 for IMU1 (MPU6000) -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PD7 SPI1_MOSI SPI1 -PC15 IMU1_CS CS - -# SPI2 for MAX7456 OSD -PB12 MAX7456_CS CS -PB13 SPI2_SCK SPI2 -PB14 SPI2_MISO SPI2 -PB15 SPI2_MOSI SPI2 - -# SPI3 - external -PB3 SPI3_SCK SPI3 -PB4 SPI3_MISO SPI3 -PB5 SPI3_MOSI SPI3 - -# external CS pins -PD4 EXT_CS1 CS -PE2 EXT_CS2 CS - -# SPI4 for IMU2 (ICM20602) -PE11 IMU2_CS CS -PE12 SPI4_SCK SPI4 -PE13 SPI4_MISO SPI4 -PE14 SPI4_MOSI SPI4 - -# two I2C bus -I2C_ORDER I2C2 I2C1 - -# I2C1 -PB6 I2C1_SCL I2C1 -PB7 I2C1_SDA I2C1 - -# I2C2 -PB10 I2C2_SCL I2C2 -PB11 I2C2_SDA I2C2 - -# ADC -PC0 BATT_VOLTAGE_SENS ADC1 SCALE(1) -PC1 BATT_CURRENT_SENS ADC1 SCALE(1) -PA4 BATT2_VOLTAGE_SENS ADC1 SCALE(1) -PA7 BATT2_CURRENT_SENS ADC1 SCALE(1) - -define HAL_BATT_MONITOR_DEFAULT 4 -define HAL_BATT_VOLT_PIN 10 -define HAL_BATT_CURR_PIN 11 -define HAL_BATT2_VOLT_PIN 18 -define HAL_BATT2_CURR_PIN 7 -define HAL_BATT_VOLT_SCALE 11.0 -define HAL_BATT_CURR_SCALE 40.0 -define HAL_BATT2_VOLT_SCALE 11.0 - -PC4 PRESSURE_SENS ADC1 SCALE(2) -define HAL_DEFAULT_AIRSPEED_PIN 4 - -PC5 RSSI_ADC ADC1 -define BOARD_RSSI_ANA_PIN 8 - -# LED -# green LED1 marked as B/E -# blue LED0 marked as ACT -PE3 LED0 OUTPUT LOW GPIO(90) # blue -PE4 LED1 OUTPUT LOW GPIO(91) # green -define HAL_GPIO_A_LED_PIN 91 -define HAL_GPIO_B_LED_PIN 90 -define HAL_GPIO_LED_OFF 1 - -# order of UARTs (and USB) -SERIAL_ORDER OTG1 UART7 USART1 USART2 USART3 UART8 UART4 USART6 OTG2 - -# USART1 (telem2) -PA10 USART1_RX USART1 -PA9 USART1_TX USART1 - -# USART2 (GPS1) -PD5 USART2_TX USART2 -PD6 USART2_RX USART2 - -# USART3 (GPS2) -PD9 USART3_RX USART3 -PD8 USART3_TX USART3 - -# UART4 (spare) -PB9 UART4_TX UART4 -PB8 UART4_RX UART4 - -# USART6 (RC input), SERIAL7 PC7 USART6_RX USART6 -PC6 USART6_TX USART6 NODMA - -# UART7 (telem1) -PE7 UART7_RX UART7 -PE8 UART7_TX UART7 -PE10 UART7_CTS UART7 -PE9 UART7_RTS UART7 - -# UART8 (spare) -PE0 UART8_RX UART8 -PE1 UART8_TX UART8 - -# CAN bus -PD0 CAN1_RX CAN1 -PD1 CAN1_TX CAN1 -PD3 GPIO_CAN1_SILENT OUTPUT PUSHPULL SPEED_LOW LOW GPIO(70) # Motors PB0 TIM3_CH3 TIM3 PWM(1) GPIO(50) BIDIR @@ -140,78 +15,11 @@ PB1 TIM3_CH4 TIM3 PWM(2) GPIO(51) PA0 TIM2_CH1 TIM2 PWM(3) GPIO(52) BIDIR PA1 TIM2_CH2 TIM2 PWM(4) GPIO(53) -PA2 TIM5_CH3 TIM5 PWM(5) GPIO(54) -PA3 TIM5_CH4 TIM5 PWM(6) GPIO(55) -PD12 TIM4_CH1 TIM4 PWM(7) GPIO(56) -PD13 TIM4_CH2 TIM4 PWM(8) GPIO(57) -PD14 TIM4_CH3 TIM4 PWM(9) GPIO(58) -PD15 TIM4_CH4 TIM4 PWM(10) GPIO(59) -PE5 TIM15_CH1 TIM15 PWM(11) GPIO(60) -PE6 TIM15_CH2 TIM15 PWM(12) GPIO(61) -PA8 TIM1_CH1 TIM1 PWM(13) GPIO(62) # for WS2812 LED - # Beeper PA15 BUZZER OUTPUT GPIO(32) LOW define HAL_BUZZER_PIN 32 define HAL_BUZZER_ON 1 define HAL_BUZZER_OFF 0 -# microSD support -PC8 SDMMC1_D0 SDMMC1 -PC9 SDMMC1_D1 SDMMC1 -PC10 SDMMC1_D2 SDMMC1 -PC11 SDMMC1_D3 SDMMC1 -PC12 SDMMC1_CK SDMMC1 -PD2 SDMMC1_CMD SDMMC1 - -# GPIOs -PD10 PINIO1 OUTPUT GPIO(81) LOW -PD11 PINIO2 OUTPUT GPIO(82) LOW - DMA_PRIORITY S* TIM3* TIM2* - -define HAL_STORAGE_SIZE 16384 - -# use last 2 pages for flash storage -# H743 has 16 pages of 128k each -define STORAGE_FLASH_PAGE 14 - -# spi devices -SPIDEV mpu6000 SPI1 DEVID1 IMU1_CS MODE3 1*MHZ 4*MHZ -SPIDEV icm20602 SPI4 DEVID1 IMU2_CS MODE3 1*MHZ 4*MHZ -SPIDEV osd SPI2 DEVID4 MAX7456_CS MODE0 10*MHZ 10*MHZ - DMA_NOSHARE SPI1* SPI4* TIM3* TIM2* - -# SPI3 external connections -SPIDEV pixartflow SPI3 DEVID1 EXT_CS1 MODE3 2*MHZ 2*MHZ - -# no built-in compass, but probe the i2c bus for all possible -# external compass types -define ALLOW_ARM_NO_COMPASS -define HAL_COMPASS_DEFAULT HAL_COMPASS_NONE -define HAL_PROBE_EXTERNAL_I2C_COMPASSES -define HAL_I2C_INTERNAL_MASK 0 -define HAL_COMPASS_AUTO_ROT_DEFAULT 2 - -# two IMUs. We put icm20602 first as we can sample accel at 4kHz -IMU Invensense SPI:icm20602 ROTATION_ROLL_180_YAW_270 -IMU Invensense SPI:mpu6000 ROTATION_ROLL_180_YAW_270 -define HAL_DEFAULT_INS_FAST_SAMPLE 1 - -# MS5611 integrated on I2C2 bus, multiple possible choices for external barometer -BARO MS56XX I2C:0:0x77 -BARO DPS280 I2C:0:0x76 -BARO BMP280 I2C:0:0x76 - -define HAL_OS_FATFS_IO 1 -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -# setup for OSD -define OSD_ENABLED 1 -define HAL_OSD_TYPE_DEFAULT 1 -ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin - -define BOARD_PWM_COUNT_DEFAULT 13 - diff --git a/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..9db66dadf37ad --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../OmnibusNanoV6/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef.dat index 1c55cb0b070ed..e95336fc32397 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/OmnibusNanoV6-bdshot/hwdef.dat @@ -1,152 +1,13 @@ -# hw definition file for processing by chibios_pins.py -# Omnibus F4 Nano V6 only -# with F405 mcu, mpu6000 imu, bmp280 barometer, 7456 series osd, flash log storage +# Bi-directional dshot version of OmnibusNanoV6 -MCU STM32F4xx STM32F405xx +include ../OmnibusNanoV6/hwdef.dat -# board ID for firmware load -APJ_BOARD_ID 133 +undef PB0 PB1 PA3 PB5 +undef STM32_PWM_USE_ADVANCED -# crystal frequency -OSCILLATOR_HZ 8000000 - -STM32_ST_USE_TIMER 5 - -# flash size -FLASH_SIZE_KB 1024 -FLASH_RESERVE_START_KB 64 - -# order of I2C buses -I2C_ORDER I2C2 I2C1 - -# order of UARTs -SERIAL_ORDER OTG1 USART1 UART4 USART6 USART3 - -#adc -PC1 BAT_CURR_SENS ADC1 SCALE(1) -PC2 BAT_VOLT_SENS ADC1 SCALE(1) -PA0 RSSI_IN ADC1 - -#pwm output PB0 TIM3_CH3 TIM3 PWM(1) GPIO(50) PB1 TIM3_CH4 TIM3 PWM(2) GPIO(51) BIDIR PA3 TIM2_CH4 TIM2 PWM(3) GPIO(52) BIDIR PB5 TIM3_CH2 TIM3 PWM(4) GPIO(53) BIDIR DMA_NOSHARE SPI2* - -PA4 MPU6000_CS CS -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -# note that this board needs PULLUP on I2C pins -PB10 I2C2_SCL I2C2 PULLUP -PB11 I2C2_SDA I2C2 PULLUP - -# I2C1 on PPM / PB9 pads of V6.x board revision -PB8 I2C1_SCL I2C1 PULLUP -PB9 I2C1_SDA I2C1 PULLUP - -# use RX3 / TX3 pins as USART3 = SERIAL4 in BRD_ALT_CONFIG = 1 -PB10 USART3_TX USART3 ALT(1) -PB11 USART3_RX USART3 ALT(1) - -# SPI2 for flash -PB15 SPI2_MOSI SPI2 -PB14 SPI2_MISO SPI2 -PB13 SPI2_SCK SPI2 -PB12 FLASH_CS CS - -# USART1 = SERIAL1 on original V6 revision only -# not available on V6.x revisions due to altered inverter layout -PA10 USART1_RX USART1 -PA9 USART1_TX USART1 - -# USART6 = SERIAL3 -PC6 USART6_TX USART6 -PC7 USART6_RX USART6 - -# UART4 (ESC sensor) -PA1 UART4_RX UART4 - -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -PA15 OSD_CS CS -PB3 BMP280_CS CS -PC12 SPI3_MOSI SPI3 -PC11 SPI3_MISO SPI3 -PC10 SPI3_SCK SPI3 - -PA8 LED OUTPUT HIGH GPIO(41) - -# passive buzzer disabled, timer 3 used for PWM(4) output -#PB4 TIM3_CH1 TIM3 GPIO(70) ALARM - -# use active buzzer instead -PB4 BUZZER OUTPUT GPIO(80) LOW -define HAL_BUZZER_PIN 80 -define HAL_BUZZER_ON 1 -define HAL_BUZZER_OFF 0 - -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 -PC5 VBUS INPUT OPENDRAIN - -#LED strip output pad used for RC input -PB6 TIM4_CH1 TIM4 RCININT PULLDOWN LOW - -#Omnibus F4 V3 and later had hw inverter on UART6 -#Overide it to use as GPS UART port -PC8 SBUS_INVERT_RX OUTPUT LOW -PC9 SBUS_INVERT_TX OUTPUT LOW - -# SPI Device table -SPIDEV mpu6000 SPI1 DEVID1 MPU6000_CS MODE3 1*MHZ 8*MHZ -SPIDEV bmp280 SPI3 DEVID3 BMP280_CS MODE3 1*MHZ 8*MHZ -SPIDEV osd SPI3 DEVID4 OSD_CS MODE0 10*MHZ 10*MHZ -SPIDEV dataflash SPI2 DEVID1 FLASH_CS MODE3 32*MHZ 32*MHZ - -# enable logging to dataflash -define HAL_LOGGING_DATAFLASH - -# one IMU -IMU Invensense SPI:mpu6000 ROTATION_YAW_90 - -# one baro -BARO BMP280 SPI:bmp280 - -# no built-in compass, but probe the i2c bus for all possible -# external compass types -define ALLOW_ARM_NO_COMPASS -define HAL_COMPASS_DEFAULT HAL_COMPASS_NONE -define HAL_PROBE_EXTERNAL_I2C_COMPASSES -define HAL_I2C_INTERNAL_MASK 0 - -define STORAGE_FLASH_PAGE 1 -define HAL_STORAGE_SIZE 15360 - - -# define default battery setup -define HAL_BATT_VOLT_PIN 12 -define HAL_BATT_CURR_PIN 11 -define HAL_BATT_VOLT_SCALE 11 -define HAL_BATT_CURR_SCALE 18.2 - -#analog rssi pin (also could be used as analog airspeed input) -#PA0 - ADC123_CH0 -define BOARD_RSSI_ANA_PIN 0 - - -define HAL_GPIO_A_LED_PIN 41 - -define OSD_ENABLED 1 -define HAL_OSD_TYPE_DEFAULT 1 - -define BOARD_PWM_COUNT_DEFAULT 4 - -#font for the osd -ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin - -define HAL_MOUNT_ENABLED 0 diff --git a/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..8c09b9c31c05b --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../Pixracer/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef.dat index 3b27c60463020..9ee405f803408 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/Pixracer-bdshot/hwdef.dat @@ -1,234 +1,15 @@ -# hw definition file for processing by chibios_hwdef.py for the -# mRo Pixracer board. This is a fmuv4 board +# Bi-directional dshot version of Pixracer +# DMA on USART1 is lost -define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_CHIBIOS_FMUV4 +include ../Pixracer/hwdef.dat -# MCU class and specific type -MCU STM32F4xx STM32F427xx +undef PB6 PB7 PE14 PE9 -# board ID for firmware load -APJ_BOARD_ID 11 - -# crystal frequency -OSCILLATOR_HZ 24000000 - - -# ChibiOS system timer -STM32_ST_USE_TIMER 5 - -# flash size -FLASH_SIZE_KB 2048 - -env OPTIMIZE -O2 - -# serial port for stdout disabled, use USB console -# STDOUT_SERIAL SD7 -# STDOUT_BAUDRATE 57600 - -# only one I2C bus -I2C_ORDER I2C1 - -# to match px4 we make the first bus number 1 -define HAL_I2C_BUS_BASE 1 -define HAL_I2C_INTERNAL_MASK 0 - -# order of UARTs (and USB) -SERIAL_ORDER OTG1 USART2 USART3 UART4 UART8 USART1 UART7 - -# UART4 is GPS -PA0 UART4_TX UART4 -PA1 UART4_RX UART4 -PA2 BATT_VOLTAGE_SENS ADC1 -PA3 BATT_CURRENT_SENS ADC1 -PA4 VDD_5V_SENS ADC1 SCALE(2) - -# SPI1 is sensors bus -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -PA9 VBUS INPUT - -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 - -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -# PWM output for buzzer -PA15 TIM2_CH1 TIM2 GPIO(77) ALARM - -# control of spektrum power pin -PE4 SPEKTRUM_PWR OUTPUT LOW GPIO(70) -define HAL_GPIO_SPEKTRUM_PWR 70 - -# spektrum power is active low -define HAL_SPEKTRUM_PWR_ENABLED 0 - -# spektrum RC input pin, used as GPIO for bind for satellite receivers -PB0 SPEKTRUM_RC INPUT PULLUP GPIO(71) -define HAL_GPIO_SPEKTRUM_RC 71 - -PB2 BOOT1 INPUT -PB5 VDD_BRICK_VALID INPUT PULLDOWN - -# USART1 is ESP8266 PB6 USART1_TX USART1 NODMA PB7 USART1_RX USART1 NODMA -PA8 USART1_RTS USART1 -# PE10 is not a hw CTS pin for USART1 -PE10 8266_CTS INPUT - -# make GPIOs for ESP8266 available via mavlink relay control as pins -# 60 to 63 -PB4 8266_GPIO2 OUTPUT GPIO(60) -PE2 8266_GPI0 INPUT PULLUP GPIO(61) -PE5 8266_PD OUTPUT HIGH GPIO(62) -PE6 8266_RST OUTPUT HIGH GPIO(63) - -PB8 I2C1_SCL I2C1 -PB9 I2C1_SDA I2C1 - -# SPI2 is FRAM -PB10 SPI2_SCK SPI2 -PB12 CAN2_RX CAN2 -PB13 CAN2_TX CAN2 # this is SPI2_SCK on beta board -PB14 SPI2_MISO SPI2 -PB15 SPI2_MOSI SPI2 - -PC0 VBUS_VALID INPUT PULLDOWN -PC1 RSSI_IN ADC1 -PC2 MPU9250_CS CS -PC3 LED_SAFETY OUTPUT -PC4 SAFETY_IN INPUT PULLDOWN -PC5 VDD_PERIPH_EN OUTPUT HIGH - -PC7 TIM8_CH2 TIM8 RCININT FLOAT LOW # also USART6_RX for serial RC -PC13 SBUS_INV OUTPUT LOW - -PC8 SDIO_D0 SDIO -PC9 SDIO_D1 SDIO -PC10 SDIO_D2 SDIO -PC11 SDIO_D3 SDIO -PC12 SDIO_CK SDIO - - -PC14 20608_DRDY INPUT -PC15 20608_CS CS - -PD0 CAN1_RX CAN1 -PD1 CAN1_TX CAN1 -PD2 SDIO_CMD SDIO - -# USART2 serial2 telem1 -PD3 USART2_CTS USART2 -PD4 USART2_RTS USART2 -PD5 USART2_TX USART2 -PD6 USART2_RX USART2 - -PD7 BARO_CS CS - -# USART3 serial3 telem2 -PD8 USART3_TX USART3 -PD9 USART3_RX USART3 -PD10 FRAM_CS CS -PD11 USART3_CTS USART3 -PD12 USART3_RTS USART3 - -PD15 MPU9250_DRDY INPUT - -# UART8 serial4 FrSky -PE0 UART8_RX UART8 -PE1 UART8_TX UART8 - -# allow this uart to be inverted for transmit under user control -# the polarity is the value to use on the GPIO to change the polarity -# to the opposite of the default -PA10 UART8_TXINV OUTPUT HIGH GPIO(78) POL(0) - -PE3 VDD_SENSORS_EN OUTPUT HIGH - -# UART7 is debug -PE7 UART7_RX UART7 NODMA -PE8 UART7_TX UART7 NODMA PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) BIDIR -PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) -PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) BIDIR -PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54) -PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55) DMA_PRIORITY SDIO TIM1_UP TIM1_CH4 TIM1_CH1 DMA_NOSHARE SPI1* - -PE12 MAG_DRDY INPUT -PE15 MAG_CS CS - -# SPI device table. The DEVID values are chosen to match the PX4 port -# of ArduPilot so users don't need to re-do their accel and compass calibrations -# when moving to ChibiOS -SPIDEV ms5611_int SPI2 DEVID3 BARO_CS MODE3 20*MHZ 20*MHZ -SPIDEV mpu9250 SPI1 DEVID4 MPU9250_CS MODE3 2*MHZ 4*MHZ -SPIDEV icm20608 SPI1 DEVID6 20608_CS MODE3 2*MHZ 8*MHZ -SPIDEV hmc5843 SPI1 DEVID5 MAG_CS MODE3 11*MHZ 11*MHZ -SPIDEV lis3mdl SPI1 DEVID5 MAG_CS MODE3 500*KHZ 500*KHZ -SPIDEV ramtron SPI2 DEVID10 FRAM_CS MODE3 8*MHZ 8*MHZ - -define HAL_CHIBIOS_ARCH_FMUV4 1 - -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -define HAL_STORAGE_SIZE 16384 - -# enable RAMTROM parameter storage -define HAL_WITH_RAMTRON 1 - -# enable FAT filesystem -define HAL_OS_FATFS_IO 1 - -# pixracer has 3 LEDs, Red, Green, Blue -define HAL_HAVE_PIXRACER_LED - -define HAL_GPIO_LED_ON 0 -define HAL_GPIO_LED_OFF 1 - -# LED setup for PixracerLED driver -PB11 LED_RED OUTPUT GPIO(0) -PB1 LED_GREEN OUTPUT GPIO(1) -PB3 LED_BLUE OUTPUT GPIO(2) - -define HAL_GPIO_A_LED_PIN 0 -define HAL_GPIO_B_LED_PIN 1 -define HAL_GPIO_C_LED_PIN 2 - -# battery setup -define HAL_BATT_VOLT_PIN 2 -define HAL_BATT_CURR_PIN 3 -define HAL_BATT_VOLT_SCALE 10.1 -define HAL_BATT_CURR_SCALE 17.0 - -# setup serial port defaults for ESP8266 -define HAL_SERIAL5_PROTOCOL SerialProtocol_MAVLink2 -define HAL_SERIAL5_BAUD 921600 - -# 6 PWM available by default -define BOARD_PWM_COUNT_DEFAULT 6 - - -# two IMUs -IMU Invensense SPI:icm20608 ROTATION_ROLL_180_YAW_90 -IMU Invensense SPI:mpu9250 ROTATION_ROLL_180_YAW_90 -define HAL_DEFAULT_INS_FAST_SAMPLE 1 - -# 2 compasses. R15 has LIS3MDL instead of HMC5843 -COMPASS HMC5843 SPI:hmc5843 false ROTATION_PITCH_180 -COMPASS LIS3MDL SPI:lis3mdl false ROTATION_NONE -COMPASS AK8963:probe_mpu9250 0 ROTATION_ROLL_180_YAW_90 - -# also probe all types of external I2C compasses -define HAL_PROBE_EXTERNAL_I2C_COMPASSES - -# one barometer -BARO MS56XX SPI:ms5611_int diff --git a/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..d5b537521c685 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../mRoPixracerPro/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef.dat index 706c8b914fd9f..405623a3292b9 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/mRoPixracerPro-bdshot/hwdef.dat @@ -1,285 +1,11 @@ -########################################################################################################################################################### -# mRo Pixracer Pro Flight Controller -# STM32H743IIK6 -# 8 PWM / IO - DMA capable and hardware and/or software switchable 3.3v / 5v Logic (hardware default) -# Logic level set in hardware: No Solder for 5v, Solder 1-2 for 3.3v, Solder 2-3 for 3.3v / 5v software switchable -# Exposed JST GH Connectors: GPS UART+I2C connector, 6 Available UARTS (2 with Flow Control), 2 FDCAN, SPI, I2C, Power with analog current and voltage sense -# 3 IMUs (ICM20602 6DOF, ICM20948 9DOF, BMI088 6DOF) -# Baro, FRAM (256kb), SDCARD Socket, TC2030 JTAG, USB-C -# Onboard 3 color LED and buzzer -# Uncased weight and dimensions: -# Weight (with headers): 11.3g (.40oz) -# Length: 36mm (1.42in) -# Width: 36mm (1.42in) -# Mounting holes: 31.5mm x 31.5mm 4mm grommeted mounting holes for 3mm fasteners -# M10064C - Initial Release -########################################################################################################################################################### +# Bi-directional dshot version of mRoPixracerPro -# default to all pins low to avoid ESD issues -DEFAULTGPIO OUTPUT LOW PULLDOWN +include ../mRoPixracerPro/hwdef.dat -# MCU class and specific type -MCU STM32H7xx STM32H743xx +undef PE14 PE9 -# board ID for firmware load -APJ_BOARD_ID 1017 - -# crystal frequency -OSCILLATOR_HZ 24000000 - -FLASH_SIZE_KB 2048 - -# with 2M flash we can afford to optimize for speed -env OPTIMIZE -O2 - -# start on 2th sector (1st sector for bootloader) -FLASH_RESERVE_START_KB 128 - -# use FRAM for storage -define HAL_STORAGE_SIZE 16384 -define HAL_WITH_RAMTRON 1 - -# USB setup -USB_STRING_MANUFACTURER "mRo" - -# RC Input set for Interrupt also USART6_RX for serial RC -PC7 TIM3_CH2 TIM3 RCININT FLOAT LOW - -# Control of Spektrum power pin -PE4 SPEKTRUM_PWR OUTPUT LOW GPIO(70) -define HAL_GPIO_SPEKTRUM_PWR 70 - -# Spektrum Power is Active Low -define HAL_SPEKTRUM_PWR_ENABLED 0 - -# Spektrum RC Input pin, used as GPIO for bind for Satellite Receivers -PB0 SPEKTRUM_RC INPUT PULLUP GPIO(71) -define HAL_GPIO_SPEKTRUM_RC 71 - -# Order of I2C buses -I2C_ORDER I2C1 - -# this board only has a single I2C bus so make it external -define HAL_I2C_INTERNAL_MASK 0 - -# order of UARTs (and USB) and suggested usage -# USART2 Telem 1 (Flow Control) -# USART3 Telem 2 (Flow Control) -# UART4 GPS -# UART8 FRSKY Telem -# USART1 Additional UART -# UART7 Additional UART - -# USART6 RC input (Only RX pin is connected) - -SERIAL_ORDER OTG1 USART2 USART3 UART4 UART8 USART1 UART7 OTG2 - -# default the 2nd interface to MAVLink2 -define HAL_OTG2_PROTOCOL SerialProtocol_MAVLink2 - -# Another USART, this one for telem1. This one has RTS and CTS lines. -# USART2 telem1 -PD3 USART2_CTS USART2 -PD4 USART2_RTS USART2 -PD5 USART2_TX USART2 -PD6 USART2_RX USART2 - -# The telem2 USART, this one for telem2. This one has RTS and CTS lines. -# USART3 telem2 -PD8 USART3_TX USART3 -PD9 USART3_RX USART3 -PD11 USART3_CTS USART3 -PD12 USART3_RTS USART3 - -# UART4 GPS -PA0 UART4_TX UART4 -PA1 UART4_RX UART4 - -# USART1 Spare -PB6 USART1_TX USART1 -PB7 USART1_RX USART1 - -# UART7 Spare or Debug Console -PE7 UART7_RX UART7 -PE8 UART7_TX UART7 - -# UART8 FrSky Telemetry -PE0 UART8_RX UART8 -PE1 UART8_TX UART8 - -# RSSI Analog Input -PC1 RSSI_IN ADC1 - -# Analog current and voltage sense pins. -PA2 BATT_VOLTAGE_SENS ADC1 SCALE(1) -PA3 BATT_CURRENT_SENS ADC1 SCALE(1) - -# Now the VDD sense pin. This is used to sense primary board voltage. -PA4 VDD_5V_SENS ADC1 SCALE(2) - -#SPI1 ICM_20602 / ICM_20948 -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -#SPI2 FRAM / DPS310 -PB10 SPI2_SCK SPI2 -PB14 SPI2_MISO SPI2 -PB15 SPI2_MOSI SPI2 - -#SPI5 BMI088 -PF7 SPI5_SCK SPI5 -PF8 SPI5_MISO SPI5 -PF9 SPI5_MOSI SPI5 - -#SPI6 EXTERNAL -PG13 SPI6_SCK SPI6 -PG12 SPI6_MISO SPI6 -PG14 SPI6_MOSI SPI6 - -# This is the pin that senses USB being connected. It is an input pin -# setup as OPENDRAIN. -PA9 VBUS INPUT OPENDRAIN - -# This input pin is used to detect that power is valid on USB. -PC0 VBUS_VALID INPUT - -# Now we define the pins that USB is connected on. -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 - -# These are the pins for SWD debugging with a STlinkv2 or black-magic probe. -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -# PWM output for buzzer -PA15 TIM2_CH1 TIM2 GPIO(77) ALARM - -# Now the first I2C bus. The pin speeds are automatically setup -# correctly, but can be overridden here if needed. -PB8 I2C1_SCL I2C1 -PB9 I2C1_SDA I2C1 - -# Now setup the pins for the microSD card, if available. -PC8 SDMMC1_D0 SDMMC1 -PC9 SDMMC1_D1 SDMMC1 -PC10 SDMMC1_D2 SDMMC1 -PC11 SDMMC1_D3 SDMMC1 -PC12 SDMMC1_CK SDMMC1 -PD2 SDMMC1_CMD SDMMC1 - -# More CS pins for more sensors. The labels for all CS pins need to -# match the SPI device table later in this file. -PC2 ICM_20602_CS CS -PD7 BARO_CS CS -PD10 FRAM_CS CS SPEED_VERYLOW -PE15 ICM_20948_CS CS -PF10 BMI088_GYRO_CS CS -PF6 BMI088_ACCEL_CS CS -PG9 EXT_SPI_CS CS - -# the first CAN bus -PD0 CAN1_RX CAN1 -PD1 CAN1_TX CAN1 - -PF11 GPIO_CAN1_SILENT OUTPUT PUSHPULL SPEED_LOW LOW GPIO(72) - -# This defines the pins for the 2nd CAN interface, OEM Only. -PB13 CAN2_TX CAN2 -PB12 CAN2_RX CAN2 - -PF14 GPIO_CAN2_SILENT OUTPUT PUSHPULL SPEED_LOW LOW GPIO(73) - -# Now we start defining some PWM pins. We also map these pins to GPIO -# values, so users can set BRD_PWM_COUNT to choose how many of the PWM -# outputs on the primary MCU are setup as PWM and how many as -# GPIOs. To match HAL_PX4 we number the GPIOs for the PWM outputs -# starting at 50. PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) BIDIR -PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) -PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) BIDIR -PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54) -PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55) -PI5 TIM8_CH1 TIM8 PWM(7) GPIO(56) -PI6 TIM8_CH2 TIM8 PWM(8) GPIO(57) DMA_PRIORITY TIM1_UP TIM1_CH4 TIM1_CH1 DMA_NOSHARE SPI1* SPI5* TIM1_UP - -define BOARD_PWM_COUNT_DEFAULT 8 - -# This is the invensense data-ready pin. We don't use it in the -# default driver. -PD15 MPU_DRDY INPUT - -# This is the pin to enable the sensors rail. It can be used to power -# cycle sensors to recover them in case there are problems with power on -# timing affecting sensor stability. We pull it high by default. -PE3 VDD_3V3_SENSORS_EN OUTPUT HIGH - -# 1.8V Sensor Level Shifter Output Enable. We pull it high by default. -PI3 VDD_1V8_SENSORS_EN OUTPUT HIGH - -# Pin for PWM Voltage Selection, 0 means 3.3v, 1 means 5v -PG6 PWM_VOLT_SEL OUTPUT LOW GPIO(74) -define HAL_GPIO_PWM_VOLT_PIN 74 -define HAL_GPIO_PWM_VOLT_3v3 0 - -# Power flag pins: these tell the MCU the status of the various power -# supplies that are available. The pin names need to exactly match the -# names used in AnalogIn.cpp. -PB5 VDD_BRICK_VALID INPUT PULLUP - -SPIDEV icm20948 SPI1 DEVID1 ICM_20948_CS MODE3 2*MHZ 4*MHZ -SPIDEV icm20608 SPI1 DEVID2 ICM_20602_CS MODE3 2*MHZ 8*MHZ -SPIDEV dps310 SPI2 DEVID3 BARO_CS MODE3 5*MHZ 5*MHZ -SPIDEV ramtron SPI2 DEVID10 FRAM_CS MODE3 8*MHZ 8*MHZ -SPIDEV bmi088_g SPI5 DEVID1 BMI088_GYRO_CS MODE3 10*MHZ 10*MHZ -SPIDEV bmi088_a SPI5 DEVID2 BMI088_ACCEL_CS MODE3 10*MHZ 10*MHZ - -# Now some defines for logging and terrain data files. -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -# Enable FAT filesystem support (needs a microSD defined via SDMMC). -define HAL_OS_FATFS_IO 1 - -# Now setup the default battery pins driver analog pins and default -# scaling for the power brick. -define HAL_BATT_VOLT_PIN 14 -define HAL_BATT_CURR_PIN 15 -define HAL_BATT_VOLT_SCALE 10.1 -define HAL_BATT_CURR_SCALE 17.0 - -# No hardware safety pin, CAN safety switch only -# define HAL_HAVE_SAFETY_SWITCH 0 - -# Pixracer Pro has a TriColor LED, Red, Green, Blue -define HAL_HAVE_PIXRACER_LED - -define HAL_GPIO_LED_ON 0 -define HAL_GPIO_LED_OFF 1 - -# LED setup for PixracerLED driver -PB11 LED_R OUTPUT HIGH GPIO(0) -PB1 LED_G OUTPUT HIGH GPIO(1) -PB3 LED_B OUTPUT HIGH GPIO(2) - -define HAL_GPIO_A_LED_PIN 0 -define HAL_GPIO_B_LED_PIN 1 -define HAL_GPIO_C_LED_PIN 2 - -# 3 IMUs -IMU BMI088 SPI:bmi088_a SPI:bmi088_g ROTATION_NONE -IMU Invensense SPI:icm20608 ROTATION_ROLL_180_YAW_90 -IMU Invensensev2 SPI:icm20948 ROTATION_ROLL_180_YAW_90 - -define HAL_DEFAULT_INS_FAST_SAMPLE 7 - -# 1 baro -BARO DPS280 SPI:dps310 - -# 1 compass -COMPASS AK09916:probe_ICM20948 0 ROTATION_ROLL_180 -define HAL_PROBE_EXTERNAL_I2C_COMPASSES diff --git a/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef-bl.dat new file mode 100644 index 0000000000000..18562c825498c --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef-bl.dat @@ -0,0 +1 @@ +include ../omnibusf4pro/hwdef-bl.dat diff --git a/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef.dat index dbaf75fa42075..d4b4d1a6d2911 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/omnibusf4pro-bdshot/hwdef.dat @@ -1,163 +1,10 @@ -# hw definition file for processing by chibios_pins.py -# Omnibus F4 PRO with on-board current sensor -# with F405 mcu, mpu6000 imu, bmp280 barometer, 7456 series osd and sdcard +# Bi-directional dshot version of omnibusf4pro +# Buzzer timer is required so becomes single tone -MCU STM32F4xx STM32F405xx +include ../omnibusf4pro/hwdef.dat -HAL_CHIBIOS_ARCH_F405 1 +undef PB0 PB1 PA3 PB4 -# board ID for firmware load -APJ_BOARD_ID 131 - -# crystal frequency -OSCILLATOR_HZ 8000000 - -STM32_ST_USE_TIMER 5 - -# flash size -FLASH_SIZE_KB 1024 -FLASH_RESERVE_START_KB 64 - -# order of I2C buses -I2C_ORDER I2C2 - -# order of UARTs -SERIAL_ORDER OTG1 USART1 USART3 USART6 UART4 - -#adc -PC1 BAT_CURR_SENS ADC1 SCALE(1) -PC2 BAT_VOLT_SENS ADC1 SCALE(1) - -#analog rssi pin (also could be used as analog airspeed input) -PA0 RSSI_IN ADC1 -define BOARD_RSSI_ANA_PIN 0 - -#pwm output. 1 - 4 on main header, 5 & 6 on separated header w/o 5V supply, 7 & 8 on CH5 and CH6 pads PB0 TIM3_CH3 TIM3 PWM(1) GPIO(50) PB1 TIM3_CH4 TIM3 PWM(2) GPIO(51) BIDIR PA3 TIM2_CH4 TIM2 PWM(3) GPIO(52) BIDIR -PA2 TIM2_CH3 TIM2 PWM(4) GPIO(53) -PA1 TIM2_CH2 TIM2 PWM(5) GPIO(54) -PA8 TIM1_CH1 TIM1 PWM(6) GPIO(55) -PC8 TIM8_CH3 TIM8 PWM(7) GPIO(56) -PC9 TIM8_CH4 TIM8 PWM(8) GPIO(59) - -PA4 MPU6000_CS CS -PA5 SPI1_SCK SPI1 -PA6 SPI1_MISO SPI1 -PA7 SPI1_MOSI SPI1 - -# note that this board needs PULLUP on I2C pins -PB10 I2C2_SCL I2C2 PULLUP -PB11 I2C2_SDA I2C2 PULLUP - -# use I2C pins as USART3 (SERIAL2) in BRD_ALT_CONFIG=1 & 4 -PB10 USART3_TX USART3 ALT(1) -PB11 USART3_RX USART3 ALT(1) -PB10 USART3_TX USART3 ALT(4) -PB11 USART3_RX USART3 ALT(4) - -PB15 SPI2_MOSI SPI2 -PB14 SPI2_MISO SPI2 -PB13 SPI2_SCK SPI2 -PB12 SDCARD_CS CS - -PA10 USART1_RX USART1 -PA9 USART1_TX USART1 - -PC6 USART6_TX USART6 -PC7 USART6_RX USART6 - -# UART4 TX available as an alternative config on PA0 (RSSI pad) with BRD_ALT_CONFIG=2 -PA0 UART4_TX UART4 ALT(2) - -# full UART4 also available as alt config on PA0 (RSSI pad) and PA1 (PWM output chan 5) with BRD_ALT_CONFIG=3 & 4 -PA0 UART4_TX UART4 ALT(3) -PA1 UART4_RX UART4 ALT(3) -PA0 UART4_TX UART4 ALT(4) -PA1 UART4_RX UART4 ALT(4) - -PA13 JTMS-SWDIO SWD -PA14 JTCK-SWCLK SWD - -PA15 OSD_CS CS -PB3 BMP280_CS CS -PC12 SPI3_MOSI SPI3 -PC11 SPI3_MISO SPI3 -PC10 SPI3_SCK SPI3 - -PB5 LED_BLUE OUTPUT LOW GPIO(1) -define HAL_GPIO_A_LED_PIN 1 - -#dummy assignment required to allow AP_NOTIFY to use board led -define HAL_GPIO_B_LED_PIN 2 - -# TIM3 is needed for bi-directional dshot -#PB4 TIM3_CH1 TIM3 GPIO(58) ALARM LOW - -#use LED-STRIP output as general purpose GPIO -PB6 GP_GPIO OUTPUT LOW GPIO(70) - -PA11 OTG_FS_DM OTG1 -PA12 OTG_FS_DP OTG1 -PC5 VBUS INPUT OPENDRAIN - -# "PPM" solder pad/resistor should be soldered and "S-BUS" resistor/solder pad removed -# Overwise UART1 or UART6 or RCIN will not work -PB8 TIM4_CH3 TIM4 RCININT PULLDOWN LOW - - -# SPI Device table -SPIDEV mpu6000 SPI1 DEVID1 MPU6000_CS MODE3 1*MHZ 8*MHZ -SPIDEV sdcard SPI2 DEVID2 SDCARD_CS MODE0 400*KHZ 25*MHZ -SPIDEV bmp280 SPI3 DEVID3 BMP280_CS MODE3 1*MHZ 8*MHZ -SPIDEV osd SPI3 DEVID4 OSD_CS MODE0 10*MHZ 10*MHZ - -# one IMU -IMU Invensense SPI:mpu6000 ROTATION_YAW_180 - -# one baro -BARO BMP280 SPI:bmp280 - -# no built-in compass, but probe the i2c bus for all possible -# external compass types -define ALLOW_ARM_NO_COMPASS -define HAL_COMPASS_DEFAULT HAL_COMPASS_NONE -define HAL_PROBE_EXTERNAL_I2C_COMPASSES -define HAL_I2C_INTERNAL_MASK 0 -define HAL_COMPASS_AUTO_ROT_DEFAULT 2 - -define STORAGE_FLASH_PAGE 1 -define HAL_STORAGE_SIZE 15360 - -define HAL_OS_FATFS_IO 1 -define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" -define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" - -# define default battery setup -define HAL_BATT_VOLT_PIN 12 -define HAL_BATT_CURR_PIN 11 -define HAL_BATT_VOLT_SCALE 11 -define HAL_BATT_CURR_SCALE 18.2 - -define OSD_ENABLED 1 -define HAL_OSD_TYPE_DEFAULT 1 - -#To complementary channels work we define this -define STM32_PWM_USE_ADVANCED TRUE - -define BOARD_PWM_COUNT_DEFAULT 8 - -#font for the osd -ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin - -# disable SMBUS and fuel battery monitors to save flash -define HAL_BATTMON_SMBUS_ENABLE 0 -define HAL_BATTMON_FUEL_ENABLE 0 - -# disable parachute and sprayer to save flash -define HAL_PARACHUTE_ENABLED 0 -define HAL_SPRAYER_ENABLED 0 - -# reduce max size of embedded params for apj_tool.py -define AP_PARAM_MAX_EMBEDDED_PARAM 1024 diff --git a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py index afbe8f370ca43..c09c7e04787f7 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py +++ b/libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py @@ -2053,27 +2053,30 @@ def process_line(line): elif a[0] == 'ROMFS_WILDCARD': romfs_wildcard(a[1]) elif a[0] == 'undef': - print("Removing %s" % a[1]) - config.pop(a[1], '') - bytype.pop(a[1], '') - bylabel.pop(a[1], '') - # also remove all occurences of defines in previous lines if any - for line in alllines[:]: - if line.startswith('define') and a[1] == line.split()[1]: - alllines.remove(line) - newpins = [] - for pin in allpins: - if pin.type == a[1] or pin.label == a[1] or pin.portpin == a[1]: - portmap[pin.port][pin.pin] = generic_pin(pin.port, pin.pin, None, 'INPUT', []) - continue - newpins.append(pin) - allpins = newpins - if a[1] == 'IMU': - imu_list = [] - if a[1] == 'COMPASS': - compass_list = [] - if a[1] == 'BARO': - baro_list = [] + for u in a[1:]: + print("Removing %s" % u) + config.pop(u, '') + bytype.pop(u, '') + bylabel.pop(u, '') + # also remove all occurences of defines in previous lines if any + for line in alllines[:]: + if line.startswith('define') and u == line.split()[1]: + alllines.remove(line) + newpins = [] + for pin in allpins: + if pin.type == u or pin.label == u or pin.portpin == u: + if pin.label is not None: + bylabel.pop(pin.label, '') + portmap[pin.port][pin.pin] = generic_pin(pin.port, pin.pin, None, 'INPUT', []) + continue + newpins.append(pin) + allpins = newpins + if u == 'IMU': + imu_list = [] + if u == 'COMPASS': + compass_list = [] + if u == 'BARO': + baro_list = [] elif a[0] == 'env': print("Adding environment %s" % ' '.join(a[1:])) if len(a[1:]) < 2: From e0391093af5381999a41a6348cccf714af0a4be5 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 27 Jan 2021 21:12:17 +0000 Subject: [PATCH 2/3] Bootloaders: add bi-directional dshot bootloaders --- Tools/bootloaders/CUAV-X7-bdshot_bl.bin | Bin 0 -> 17444 bytes Tools/bootloaders/CubeOrange-bdshot_bl.bin | Bin 0 -> 17372 bytes Tools/bootloaders/Durandal-bdshot_bl.bin | Bin 0 -> 17452 bytes Tools/bootloaders/MatekF405-bdshot_bl.bin | Bin 0 -> 14152 bytes Tools/bootloaders/MatekH743-bdshot_bl.bin | Bin 0 -> 17460 bytes Tools/bootloaders/OmnibusNanoV6-bdshot_bl.bin | Bin 0 -> 14112 bytes Tools/bootloaders/Pixracer-bdshot_bl.bin | Bin 0 -> 16048 bytes Tools/bootloaders/mRoPixracerPro-bdshot_bl.bin | Bin 0 -> 17292 bytes Tools/bootloaders/omnibusf4pro-bdshot_bl.bin | Bin 0 -> 14104 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tools/bootloaders/CUAV-X7-bdshot_bl.bin create mode 100644 Tools/bootloaders/CubeOrange-bdshot_bl.bin create mode 100644 Tools/bootloaders/Durandal-bdshot_bl.bin create mode 100644 Tools/bootloaders/MatekF405-bdshot_bl.bin create mode 100644 Tools/bootloaders/MatekH743-bdshot_bl.bin create mode 100644 Tools/bootloaders/OmnibusNanoV6-bdshot_bl.bin create mode 100644 Tools/bootloaders/Pixracer-bdshot_bl.bin create mode 100644 Tools/bootloaders/mRoPixracerPro-bdshot_bl.bin create mode 100644 Tools/bootloaders/omnibusf4pro-bdshot_bl.bin diff --git a/Tools/bootloaders/CUAV-X7-bdshot_bl.bin b/Tools/bootloaders/CUAV-X7-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..8ff1550f7a45cbedda6c47d37364199eb3dbb0bd GIT binary patch literal 17444 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 LPj$0@^7nrLCpD(w literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/MatekF405-bdshot_bl.bin b/Tools/bootloaders/MatekF405-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..9579c7e5c4ea84a287c23f72c54be99316ea0d55 GIT binary patch literal 14152 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 literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/MatekH743-bdshot_bl.bin b/Tools/bootloaders/MatekH743-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..854bcd761fe24aa3c327aa3adc6d755f1b024506 GIT binary patch literal 17460 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 literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/OmnibusNanoV6-bdshot_bl.bin b/Tools/bootloaders/OmnibusNanoV6-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..c678dbcf910ab4bc275c5a37b0e1495cc438cfe5 GIT binary patch literal 14112 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 HpZxt_;^(G4 literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/Pixracer-bdshot_bl.bin b/Tools/bootloaders/Pixracer-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..92e1fd74f79fc472bfeb7c2870fa3ab16475b89c GIT binary patch literal 16048 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 A)Bpeg literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/omnibusf4pro-bdshot_bl.bin b/Tools/bootloaders/omnibusf4pro-bdshot_bl.bin new file mode 100644 index 0000000000000000000000000000000000000000..185fed14120cf7ac24774613edcb2e233589a5ca GIT binary patch literal 14104 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 K><9cOfBzR~JE6J& literal 0 HcmV?d00001 From 510ddc739941e6481f09f8384b0461874a936a4a Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 27 Jan 2021 21:12:58 +0000 Subject: [PATCH 3/3] Scripts: add bi-directional dshot firmware to built binaries --- Tools/scripts/build_binaries.py | 9 +++++++++ Tools/scripts/generate_manifest.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/Tools/scripts/build_binaries.py b/Tools/scripts/build_binaries.py index 714c8aa31c4cf..64c362ba99da7 100755 --- a/Tools/scripts/build_binaries.py +++ b/Tools/scripts/build_binaries.py @@ -572,16 +572,20 @@ def common_boards(self): "KakuteF7Mini", "MambaF405v2", "MatekF405", + "MatekF405-bdshot", "MatekF405-STD", "MatekF405-Wing", "MatekF765-Wing", "MatekH743", + "MatekH743-bdshot", "OMNIBUSF7V2", "sparky2", "omnibusf4", "omnibusf4pro", + "omnibusf4pro-bdshot", "omnibusf4v6", "OmnibusNanoV6", + "OmnibusNanoV6-bdshot", "mini-pix", "airbotf4", "revo-mini", @@ -597,13 +601,16 @@ def common_boards(self): "CUAVv5Nano", "CUAV-Nora", "CUAV-X7", + "CUAV-X7-bdshot", "mRoX21", "Pixracer", + "Pixracer-bdshot", "F4BY", "mRoX21-777", "mRoControlZeroF7", "mRoNexus", "mRoPixracerPro", + "mRoPixracerPro-bdshot", "mRoControlZeroOEMH7", "F35Lightning", "speedybeef4", @@ -616,7 +623,9 @@ def common_boards(self): "VRBrain-v54", "TBS-Colibri-F7", "Durandal", + "Durandal-bdshot", "CubeOrange", + "CubeOrange-bdshot", "CubeYellow", "R9Pilot", "QioTekZealotF427", diff --git a/Tools/scripts/generate_manifest.py b/Tools/scripts/generate_manifest.py index 90cb767ae3dcb..cc7545de89d6e 100755 --- a/Tools/scripts/generate_manifest.py +++ b/Tools/scripts/generate_manifest.py @@ -23,6 +23,7 @@ 'Pixhawk4' : ('Pixhawk 4', 'Holybro'), 'Pix32v5' : ('Pix32 v5', 'Holybro'), 'Durandal' : ('Durandal', 'Holybro'), + 'Durandal-bdshot' : ('Durandal', 'Holybro'), 'PH4-mini' : ('Pixhawk 4 Mini', 'Holybro'), 'KakuteF4' : ('KakuteF4', 'Holybro'), 'KakuteF7' : ('KakuteF7', 'Holybro'), @@ -30,6 +31,7 @@ 'CubeBlack' : ('CubeBlack', 'Hex/ProfiCNC'), 'CubeYellow' : ('CubeYellow', 'Hex/ProfiCNC'), 'CubeOrange' : ('CubeOrange', 'Hex/ProfiCNC'), + 'CubeOrange-bdshot' : ('CubeOrange', 'Hex/ProfiCNC'), 'CubePurple' : ('CubePurple', 'Hex/ProfiCNC'), 'CubeSolo' : ('CubeSolo', '3DR'), 'CubeGreen-solo' : ('CubeGreen Solo', 'Hex/ProfiCNC'), @@ -37,17 +39,23 @@ 'CUAVv5Nano' : ('CUAVv5 Nano', 'CUAV'), 'CUAV-Nora' : ('CUAV Nora', 'CUAV'), 'CUAV-X7' : ('CUAV X7', 'CUAV'), + 'CUAV-X7-bdshot' : ('CUAV X7', 'CUAV'), 'DrotekP3Pro' : ('Pixhawk 3 Pro', 'Drotek'), 'MambaF405v2' : ('Diatone Mamba F405 MK2', 'Diatone'), 'MatekF405' : ('Matek F405', 'Matek'), + 'MatekF405-bdshot' : ('Matek F405', 'Matek'), 'MatekF405-STD' : ('Matek F405 STD', 'Matek'), 'MatekF405-Wing' : ('Matek F405 Wing', 'Matek'), + 'MatekH743' : ('Matek H743', 'Matek'), + 'MatekH743-bdshot' : ('Matek H743', 'Matek'), 'mini-pix' : ('MiniPix', 'Radiolink'), 'Pixhawk1' : ('Pixhawk1', 'mRobotics'), 'Pixracer' : ('PixRacer', 'mRobotics'), + 'Pixracer-bdshot' : ('PixRacer', 'mRobotics'), 'mRoX21' : ('mRo X2.1', 'mRobotics'), 'mRoX21-777' : ('mRo X2.1-777', 'mRobotics'), 'mRoPixracerPro' : ('mRo PixracerPro', 'mRobotics'), + 'mRoPixracerPro-bdshot' : ('mRo PixracerPro', 'mRobotics'), 'mRoControlZeroOEMH7' : ('mRo ControlZero OEM H7', 'mRobotics'), 'mRoNexus' : ('mRo Nexus', 'mRobotics'), 'TBS-Colibri-F7' : ('Colibri F7', 'TBS'), @@ -55,8 +63,10 @@ 'mindpx-v2' : ('MindPX V2', 'AirMind'), 'OMNIBUSF7V2' : ('Omnibus F7 V2', 'Airbot'), 'omnibusf4pro' : ('Omnibus F4 Pro', 'Airbot'), + 'omnibusf4pro-bdshot' : ('Omnibus F4 Pro', 'Airbot'), 'omnibusf4v6' : ('Omnibus F4 V6', 'Airbot'), 'OmnibusNanoV6' : ('Omnibus Nano V6', 'Airbot'), + 'OmnibusNanoV6-bdshot' : ('Omnibus Nano V6', 'Airbot'), 'speedybeef4' : ('SpeedyBee F4', 'SpeedyBee'), 'QioTekZealotF427' : ('ZealotF427', 'QioTek'), 'BeastH7' : ('Beast H7 55A AIO', 'iFlight'),