From c0e0d9a0802ac99963fc8ab1f9deb165360ced44 Mon Sep 17 00:00:00 2001 From: tompsontan <1153614092@qq.com> Date: Thu, 4 Dec 2025 04:03:22 +0800 Subject: [PATCH] boards: add new board X-MAV AP-H743r1 (#25967) Author: @TompsonTan --- .vscode/cmake-variants.yaml | 10 + boards/x-mav/ap-h743r1/CMakeLists.txt | 34 ++ boards/x-mav/ap-h743r1/bootloader.px4board | 4 + boards/x-mav/ap-h743r1/default.px4board | 92 ++++ .../ap-h743r1/extras/px4_io-v2_default.bin | Bin 0 -> 40160 bytes .../extras/x-mav_ap-h743r1_bootloader.bin | Bin 0 -> 42116 bytes boards/x-mav/ap-h743r1/firmware.prototype | 13 + boards/x-mav/ap-h743r1/init/rc.board_defaults | 29 ++ boards/x-mav/ap-h743r1/init/rc.board_extras | 4 + boards/x-mav/ap-h743r1/init/rc.board_sensors | 26 ++ boards/x-mav/ap-h743r1/nuttx-config/Kconfig | 17 + .../nuttx-config/bootloader/defconfig | 90 ++++ .../ap-h743r1/nuttx-config/include/board.h | 442 ++++++++++++++++++ .../nuttx-config/include/board_dma_map.h | 61 +++ .../ap-h743r1/nuttx-config/nsh/defconfig | 273 +++++++++++ .../nuttx-config/scripts/bootloader_script.ld | 213 +++++++++ .../ap-h743r1/nuttx-config/scripts/script.ld | 228 +++++++++ .../ap-h743r1/pwm_voltage/CMakeLists.txt | 42 ++ .../x-mav/ap-h743r1/pwm_voltage/parameters.c | 43 ++ .../ap-h743r1/pwm_voltage/pwm_voltage.cpp | 56 +++ boards/x-mav/ap-h743r1/rover.px4board | 15 + boards/x-mav/ap-h743r1/src/CMakeLists.txt | 70 +++ boards/x-mav/ap-h743r1/src/board_config.h | 226 +++++++++ boards/x-mav/ap-h743r1/src/bootloader_main.c | 75 +++ boards/x-mav/ap-h743r1/src/can.c | 140 ++++++ boards/x-mav/ap-h743r1/src/hw_config.h | 135 ++++++ boards/x-mav/ap-h743r1/src/i2c.cpp | 40 ++ boards/x-mav/ap-h743r1/src/init.c | 211 +++++++++ boards/x-mav/ap-h743r1/src/led.c | 113 +++++ boards/x-mav/ap-h743r1/src/mtd.cpp | 77 +++ boards/x-mav/ap-h743r1/src/sdio.c | 177 +++++++ boards/x-mav/ap-h743r1/src/spi.cpp | 52 +++ boards/x-mav/ap-h743r1/src/timer_config.cpp | 53 +++ boards/x-mav/ap-h743r1/src/usb.c | 78 ++++ .../x-mav_ap-h743r1/ap-h743r1-main.png | Bin 0 -> 76225 bytes .../x-mav_ap-h743r1/ap-h743r1-pinouts.png | Bin 0 -> 134095 bytes .../x-mav_ap-h743r1/ap-h743r1-size.png | Bin 0 -> 5451 bytes docs/en/SUMMARY.md | 1 + .../autopilot_manufacturer_supported.md | 1 + docs/en/flight_controller/x-mav_ap-h743r1.md | 145 ++++++ 40 files changed, 3286 insertions(+) create mode 100644 boards/x-mav/ap-h743r1/CMakeLists.txt create mode 100644 boards/x-mav/ap-h743r1/bootloader.px4board create mode 100644 boards/x-mav/ap-h743r1/default.px4board create mode 100644 boards/x-mav/ap-h743r1/extras/px4_io-v2_default.bin create mode 100755 boards/x-mav/ap-h743r1/extras/x-mav_ap-h743r1_bootloader.bin create mode 100644 boards/x-mav/ap-h743r1/firmware.prototype create mode 100644 boards/x-mav/ap-h743r1/init/rc.board_defaults create mode 100644 boards/x-mav/ap-h743r1/init/rc.board_extras create mode 100644 boards/x-mav/ap-h743r1/init/rc.board_sensors create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/Kconfig create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/bootloader/defconfig create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/include/board.h create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/include/board_dma_map.h create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld create mode 100644 boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld create mode 100644 boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt create mode 100644 boards/x-mav/ap-h743r1/pwm_voltage/parameters.c create mode 100644 boards/x-mav/ap-h743r1/pwm_voltage/pwm_voltage.cpp create mode 100644 boards/x-mav/ap-h743r1/rover.px4board create mode 100644 boards/x-mav/ap-h743r1/src/CMakeLists.txt create mode 100644 boards/x-mav/ap-h743r1/src/board_config.h create mode 100644 boards/x-mav/ap-h743r1/src/bootloader_main.c create mode 100644 boards/x-mav/ap-h743r1/src/can.c create mode 100644 boards/x-mav/ap-h743r1/src/hw_config.h create mode 100644 boards/x-mav/ap-h743r1/src/i2c.cpp create mode 100644 boards/x-mav/ap-h743r1/src/init.c create mode 100644 boards/x-mav/ap-h743r1/src/led.c create mode 100644 boards/x-mav/ap-h743r1/src/mtd.cpp create mode 100644 boards/x-mav/ap-h743r1/src/sdio.c create mode 100644 boards/x-mav/ap-h743r1/src/spi.cpp create mode 100644 boards/x-mav/ap-h743r1/src/timer_config.cpp create mode 100644 boards/x-mav/ap-h743r1/src/usb.c create mode 100644 docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-main.png create mode 100644 docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-pinouts.png create mode 100644 docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-size.png create mode 100644 docs/en/flight_controller/x-mav_ap-h743r1.md diff --git a/.vscode/cmake-variants.yaml b/.vscode/cmake-variants.yaml index 71aec979d4..4b2c95eb34 100644 --- a/.vscode/cmake-variants.yaml +++ b/.vscode/cmake-variants.yaml @@ -531,3 +531,13 @@ CONFIG: buildType: MinSizeRel settings: CONFIG: svehicle_e2_default + x-mav_ap-h743r1_bootloader: + short: x-mav_ap-h743r1-boot + buildType: MinSizeRel + settings: + CONFIG: x-mav_ap-h743r1_bootloader + x-mav_ap-h743r1_default: + short: x-mav_ap-h743r1 + buildType: MinSizeRel + settings: + CONFIG: x-mav_ap-h743r1_default diff --git a/boards/x-mav/ap-h743r1/CMakeLists.txt b/boards/x-mav/ap-h743r1/CMakeLists.txt new file mode 100644 index 0000000000..8756f63e64 --- /dev/null +++ b/boards/x-mav/ap-h743r1/CMakeLists.txt @@ -0,0 +1,34 @@ +############################################################################ +# +# Copyright (c) 2025 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_subdirectory(pwm_voltage) diff --git a/boards/x-mav/ap-h743r1/bootloader.px4board b/boards/x-mav/ap-h743r1/bootloader.px4board new file mode 100644 index 0000000000..cc68214fa3 --- /dev/null +++ b/boards/x-mav/ap-h743r1/bootloader.px4board @@ -0,0 +1,4 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROMFSROOT="" +CONFIG_ARCH_CHIP_STM32H7=y diff --git a/boards/x-mav/ap-h743r1/default.px4board b/boards/x-mav/ap-h743r1/default.px4board new file mode 100644 index 0000000000..a4c0f62d2d --- /dev/null +++ b/boards/x-mav/ap-h743r1/default.px4board @@ -0,0 +1,92 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0" +CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS2" +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS3" +CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS5" +CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS6" +CONFIG_DRIVERS_ADC_BOARD_ADC=y +CONFIG_DRIVERS_BAROMETER_DPS310=y +CONFIG_DRIVERS_BAROMETER_GOERTEK_SPL06=y +CONFIG_DRIVERS_CAMERA_CAPTURE=y +CONFIG_DRIVERS_CAMERA_TRIGGER=y +CONFIG_DRIVERS_CDCACM_AUTOSTART=y +CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y +CONFIG_DRIVERS_DISTANCE_SENSOR_TF02PRO=y +CONFIG_DRIVERS_DISTANCE_SENSOR_TFMINI=y +CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_BOSCH_BMI270=y +CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y +CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8310=y +CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y +CONFIG_COMMON_OPTICAL_FLOW=y +CONFIG_COMMON_OSD=y +CONFIG_DRIVERS_PWM_OUT=y +CONFIG_DRIVERS_PX4IO=y +CONFIG_COMMON_RC=y +CONFIG_COMMON_TELEMETRY=y +CONFIG_DRIVERS_TONE_ALARM=y +CONFIG_DRIVERS_UAVCAN=y +CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE=4 +CONFIG_MODULES_BATTERY_STATUS=y +CONFIG_MODULES_CAMERA_FEEDBACK=y +CONFIG_MODULES_COMMANDER=y +CONFIG_MODULES_CONTROL_ALLOCATOR=y +CONFIG_MODULES_DATAMAN=y +CONFIG_MODULES_EKF2=y +CONFIG_MODULES_EVENTS=y +CONFIG_MODULES_FLIGHT_MODE_MANAGER=y +CONFIG_MODULES_FW_ATT_CONTROL=y +CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_RATE_CONTROL=y +CONFIG_MODULES_GIMBAL=y +CONFIG_MODULES_GYRO_CALIBRATION=y +CONFIG_MODULES_GYRO_FFT=y +CONFIG_MODULES_LAND_DETECTOR=y +CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y +CONFIG_MODULES_LOAD_MON=y +CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y +CONFIG_MODULES_LOGGER=y +CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y +CONFIG_MODULES_MANUAL_CONTROL=y +CONFIG_MODULES_MAVLINK=y +CONFIG_MODULES_MC_ATT_CONTROL=y +CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_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_MODULES_TEMPERATURE_COMPENSATION=y +CONFIG_MODULES_VTOL_ATT_CONTROL=y +CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y +CONFIG_SYSTEMCMDS_BL_UPDATE=y +CONFIG_SYSTEMCMDS_DMESG=y +CONFIG_SYSTEMCMDS_DUMPFILE=y +CONFIG_SYSTEMCMDS_GPIO=y +CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y +CONFIG_SYSTEMCMDS_I2CDETECT=y +CONFIG_SYSTEMCMDS_LED_CONTROL=y +CONFIG_SYSTEMCMDS_MFT=y +CONFIG_SYSTEMCMDS_MTD=y +CONFIG_SYSTEMCMDS_NSHTERM=y +CONFIG_SYSTEMCMDS_PARAM=y +CONFIG_SYSTEMCMDS_PERF=y +CONFIG_SYSTEMCMDS_REBOOT=y +CONFIG_SYSTEMCMDS_SD_BENCH=y +CONFIG_SYSTEMCMDS_SD_STRESS=y +CONFIG_SYSTEMCMDS_SYSTEM_TIME=y +CONFIG_SYSTEMCMDS_TOP=y +CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y +CONFIG_SYSTEMCMDS_TUNE_CONTROL=y +CONFIG_SYSTEMCMDS_UORB=y +CONFIG_SYSTEMCMDS_USB_CONNECTED=y +CONFIG_SYSTEMCMDS_VER=y +CONFIG_SYSTEMCMDS_WORK_QUEUE=y +CONFIG_EXAMPLES_FAKE_GPS=y +CONFIG_ARCH_CHIP_STM32H7=y diff --git a/boards/x-mav/ap-h743r1/extras/px4_io-v2_default.bin b/boards/x-mav/ap-h743r1/extras/px4_io-v2_default.bin new file mode 100644 index 0000000000000000000000000000000000000000..145089ae0d7c21936cb60cc5c39501280771cf92 GIT binary patch literal 40160 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%0Dr&j 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 literal 0 HcmV?d00001 diff --git a/boards/x-mav/ap-h743r1/extras/x-mav_ap-h743r1_bootloader.bin b/boards/x-mav/ap-h743r1/extras/x-mav_ap-h743r1_bootloader.bin new file mode 100755 index 0000000000000000000000000000000000000000..0082f4f80593eda129c2ef121df15468a417dbf0 GIT binary patch literal 42116 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 a8NGCG9v0yYzY$0OX2EY}PXFiy_ + * + * 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 __NUTTX_CONFIG_APH743R1_INCLUDE_BOARD_H +#define __NUTTX_CONFIG_APH743R1_INCLUDE_BOARD_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include "board_dma_map.h" + +#include + +#ifndef __ASSEMBLY__ +# include +#endif + +#include "stm32_rcc.h" +#include "stm32_sdmmc.h" + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ + +/* Clocking *************************************************************************/ +/* The AP-H743 R1 board provides the following clock sources: + * + * X1: 8 MHz crystal for HSE + * + * So we have these clock source available within the STM32 + * + * HSI: 16 MHz RC factory-trimmed + * HSE: 16 MHz crystal for HSE + */ + +#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 = 16,000,000 + * + * PLL_VCOx = (STM32_HSE_FREQUENCY / PLLM) * PLLN + * Subject to: + * + * 1 <= PLLM <= 63 + * 4 <= PLLN <= 512 + * 150 MHz <= PLL_VCOL <= 420MHz + * 192 MHz <= PLL_VCOH <= 836MHz + * + * SYSCLK = PLL_VCO / PLLP + * CPUCLK = SYSCLK / D1CPRE + * Subject to + * + * PLLP1 = {2, 4, 6, 8, ..., 128} + * PLLP2,3 = {2, 3, 4, ..., 128} + * CPUCLK <= 480 MHz + */ + +#define STM32_BOARD_USEHSE + +#define STM32_PLLCFG_PLLSRC RCC_PLLCKSELR_PLLSRC_HSE + +/* PLL1, wide 4 - 8 MHz input, enable DIVP, DIVQ, DIVR + * + * PLL1_VCO = (8,000,000 / 1) * 120 = 960 MHz + * + * PLL1P = PLL1_VCO/2 = 960 MHz / 2 = 480 MHz + * PLL1Q = PLL1_VCO/4 = 960 MHz / 4 = 240 MHz + * PLL1R = PLL1_VCO/8 = 960 MHz / 8 = 120 MHz + */ + +#define STM32_PLLCFG_PLL1CFG (RCC_PLLCFGR_PLL1VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL1RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVP1EN | \ + RCC_PLLCFGR_DIVQ1EN | \ + RCC_PLLCFGR_DIVR1EN) +#define STM32_PLLCFG_PLL1M RCC_PLLCKSELR_DIVM1(1) +#define STM32_PLLCFG_PLL1N RCC_PLL1DIVR_N1(120) +#define STM32_PLLCFG_PLL1P RCC_PLL1DIVR_P1(2) +#define STM32_PLLCFG_PLL1Q RCC_PLL1DIVR_Q1(4) +#define STM32_PLLCFG_PLL1R RCC_PLL1DIVR_R1(8) + +#define STM32_VCO1_FREQUENCY ((STM32_HSE_FREQUENCY / 1) * 120) +#define STM32_PLL1P_FREQUENCY (STM32_VCO1_FREQUENCY / 2) +#define STM32_PLL1Q_FREQUENCY (STM32_VCO1_FREQUENCY / 4) +#define STM32_PLL1R_FREQUENCY (STM32_VCO1_FREQUENCY / 8) + +/* PLL2 */ + +#define STM32_PLLCFG_PLL2CFG (RCC_PLLCFGR_PLL2VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL2RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVP2EN | \ + RCC_PLLCFGR_DIVQ2EN | \ + RCC_PLLCFGR_DIVR2EN) +#define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(2) +#define STM32_PLLCFG_PLL2N RCC_PLL2DIVR_N2(48) +#define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(2) +#define STM32_PLLCFG_PLL2Q RCC_PLL2DIVR_Q2(2) +#define STM32_PLLCFG_PLL2R RCC_PLL2DIVR_R2(2) + +#define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 2) +#define STM32_PLL2Q_FREQUENCY (STM32_VCO2_FREQUENCY / 2) +#define STM32_PLL2R_FREQUENCY (STM32_VCO2_FREQUENCY / 2) + +/* PLL3 */ + +#define STM32_PLLCFG_PLL3CFG (RCC_PLLCFGR_PLL3VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL3RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVQ3EN) +#define STM32_PLLCFG_PLL3M RCC_PLLCKSELR_DIVM3(2) +#define STM32_PLLCFG_PLL3N RCC_PLL3DIVR_N3(48) +#define STM32_PLLCFG_PLL3P RCC_PLL3DIVR_P3(2) +#define STM32_PLLCFG_PLL3Q RCC_PLL3DIVR_Q3(4) +#define STM32_PLLCFG_PLL3R RCC_PLL3DIVR_R3(2) + +#define STM32_VCO3_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_PLL3P_FREQUENCY (STM32_VCO3_FREQUENCY / 2) +#define STM32_PLL3Q_FREQUENCY (STM32_VCO3_FREQUENCY / 4) +#define STM32_PLL3R_FREQUENCY (STM32_VCO3_FREQUENCY / 2) + +/* SYSCLK = PLL1P = 480MHz + * CPUCLK = SYSCLK / 1 = 480 MHz + */ + +#define STM32_RCC_D1CFGR_D1CPRE (RCC_D1CFGR_D1CPRE_SYSCLK) +#define STM32_SYSCLK_FREQUENCY (STM32_PLL1P_FREQUENCY) +#define STM32_CPUCLK_FREQUENCY (STM32_SYSCLK_FREQUENCY / 1) + +/* Configure Clock Assignments */ + +/* AHB clock (HCLK) is SYSCLK/2 (240 MHz max) + * HCLK1 = HCLK2 = HCLK3 = HCLK4 = 240 + */ + +#define STM32_RCC_D1CFGR_HPRE RCC_D1CFGR_HPRE_SYSCLKd2 /* HCLK = SYSCLK / 2 */ +#define STM32_ACLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* ACLK in D1, HCLK3 in D1 */ +#define STM32_HCLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* HCLK in D2, HCLK4 in D3 */ +#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */ + +/* APB1 clock (PCLK1) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D2CFGR_D2PPRE1 RCC_D2CFGR_D2PPRE1_HCLKd2 /* PCLK1 = HCLK / 2 */ +#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB2 clock (PCLK2) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D2CFGR_D2PPRE2 RCC_D2CFGR_D2PPRE2_HCLKd2 /* PCLK2 = HCLK / 2 */ +#define STM32_PCLK2_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB3 clock (PCLK3) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D1CFGR_D1PPRE RCC_D1CFGR_D1PPRE_HCLKd2 /* PCLK3 = HCLK / 2 */ +#define STM32_PCLK3_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB4 clock (PCLK4) is HCLK/4 (120 MHz) */ + +#define STM32_RCC_D3CFGR_D3PPRE RCC_D3CFGR_D3PPRE_HCLKd2 /* PCLK4 = HCLK / 2 */ +#define STM32_PCLK4_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* Timer clock frequencies */ + +/* 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) + +/* 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_TIM15_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM16_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM17_CLKIN (2*STM32_PCLK2_FREQUENCY) + +/* Kernel Clock Configuration + * + * Note: look at Table 54 in ST Manual + */ + +/* I2C123 clock source */ + +#define STM32_RCC_D2CCIP2R_I2C123SRC RCC_D2CCIP2R_I2C123SEL_HSI + +/* I2C4 clock source */ + +#define STM32_RCC_D3CCIPR_I2C4SRC RCC_D3CCIPR_I2C4SEL_HSI + +/* SPI123 clock source */ + +#define STM32_RCC_D2CCIP1R_SPI123SRC RCC_D2CCIP1R_SPI123SEL_PLL2 + +/* SPI45 clock source */ + +#define STM32_RCC_D2CCIP1R_SPI45SRC RCC_D2CCIP1R_SPI45SEL_PLL2 + +/* SPI6 clock source */ + +#define STM32_RCC_D3CCIPR_SPI6SRC RCC_D3CCIPR_SPI6SEL_PLL2 + +/* USB 1 and 2 clock source */ + +#define STM32_RCC_D2CCIP2R_USBSRC RCC_D2CCIP2R_USBSEL_PLL3 + +/* ADC 1 2 3 clock source */ + +#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 + +/* FDCAN 1 clock source */ + +// #define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ + +#define STM32_FDCANCLK STM32_HSE_FREQUENCY + +/* FLASH wait states + * + * ------------ ---------- ----------- + * Vcore MAX ACLK WAIT STATES + * ------------ ---------- ----------- + * 1.15-1.26 V 70 MHz 0 + * (VOS1 level) 140 MHz 1 + * 210 MHz 2 + * 1.05-1.15 V 55 MHz 0 + * (VOS2 level) 110 MHz 1 + * 165 MHz 2 + * 220 MHz 3 + * 0.95-1.05 V 45 MHz 0 + * (VOS3 level) 90 MHz 1 + * 135 MHz 2 + * 180 MHz 3 + * 225 MHz 4 + * ------------ ---------- ----------- + */ + +#define BOARD_FLASH_WAITSTATES 2 + +/* SDMMC definitions ********************************************************/ + +/* Init 400kHz, freq = PLL1Q/(2*div) div = PLL1Q/(2*freq) */ + +#define STM32_SDMMC_INIT_CLKDIV (300 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) + +/* 25 MHz Max for now, 25 mHZ = PLL1Q/(2*div), div = PLL1Q/(2*freq) + * div = 4.8 = 240 / 50, So round up to 5 for default speed 24 MB/s + */ + +#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) +# define STM32_SDMMC_MMCXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#else +# define STM32_SDMMC_MMCXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#endif +#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) +# define STM32_SDMMC_SDXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#else +# define STM32_SDMMC_SDXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#endif + +#define STM32_SDMMC_CLKCR_EDGE STM32_SDMMC_CLKCR_NEGEDGE + +/* LED definitions ******************************************************************/ +/* The board has two, LED_GREEN a Green LED and LED_BLUE a Blue LED, + * that can be controlled by software. + * + * 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 board_userled() */ + +#define BOARD_LED1 0 +#define BOARD_LED2 1 +#define BOARD_LED3 2 +#define BOARD_NLEDS 3 + +#define BOARD_LED_RED BOARD_LED1 +#define BOARD_LED_GREEN BOARD_LED2 +#define BOARD_LED_BLUE BOARD_LED3 + +/* LED bits for use with board_userled_all() */ + +#define BOARD_LED1_BIT (1 << BOARD_LED1) +#define BOARD_LED2_BIT (1 << BOARD_LED2) +#define BOARD_LED3_BIT (1 << BOARD_LED3) + +/* If CONFIG_ARCH_LEDS is defined, the usage by the board port is defined in + * include/board.h and src/stm32_leds.c. The LEDs are used to encode OS-related + * events as follows: + * + * + * SYMBOL Meaning LED state + * Red Green Blue + * ---------------------- -------------------------- ------ ------ ----*/ + +#define LED_STARTED 0 /* NuttX has been started OFF OFF OFF */ +#define LED_HEAPALLOCATE 1 /* Heap has been allocated OFF OFF ON */ +#define LED_IRQSENABLED 2 /* Interrupts enabled OFF ON OFF */ +#define LED_STACKCREATED 3 /* Idle stack created OFF ON ON */ +#define LED_INIRQ 4 /* In an interrupt N/C N/C GLOW */ +#define LED_SIGNAL 5 /* In a signal handler N/C GLOW N/C */ +#define LED_ASSERTION 6 /* An assertion failed GLOW N/C GLOW */ +#define LED_PANIC 7 /* The system has crashed Blink OFF N/C */ +#define LED_IDLE 8 /* MCU is is sleep mode ON OFF OFF */ + +/* Thus if the Green LED is statically on, NuttX has successfully booted and + * is, apparently, running normally. If the Red LED is flashing at + * approximately 2Hz, then a fatal error has been detected and the system + * has halted. + */ + +/* Alternate function pin selections ************************************************/ + +#define GPIO_USART1_RX GPIO_USART1_RX_2 /* PA10 */ +#define GPIO_USART1_TX GPIO_USART1_TX_2 /* PA9 */ + +#define GPIO_USART2_RX GPIO_USART2_RX_2 /* PD6 */ +#define GPIO_USART2_TX GPIO_USART2_TX_2 /* PD5 */ + +#define GPIO_USART3_RX GPIO_USART3_RX_3 /* PD9 */ +#define GPIO_USART3_TX GPIO_USART3_TX_3 /* PD8 */ + +#define GPIO_UART4_RX GPIO_UART4_RX_3 /* PB8 */ +#define GPIO_UART4_TX GPIO_UART4_TX_3 /* PB9 */ + +#define GPIO_USART6_RX GPIO_USART6_RX_1 /* PC7 */ +#define GPIO_USART6_TX GPIO_USART6_TX_1 /* PC6 */ + +#define GPIO_UART7_RX GPIO_UART7_RX_3 /* PE7 */ +#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 */ + +#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */ +#define GPIO_UART8_TX GPIO_UART8_TX_1 /* PE1 */ + +/* SPI + * + */ +#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_2MHz)) + +#define GPIO_SPI1_MISO GPIO_SPI1_MISO_1 /* PA6 */ +#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_1 /* PA7 */ +#define GPIO_SPI1_SCK ADJ_SLEW_RATE(GPIO_SPI1_SCK_1) /* PA5 */ + +#define GPIO_SPI3_MISO GPIO_SPI3_MISO_2 /* PC11 */ +#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_2 /* PC12 */ +#define GPIO_SPI3_SCK ADJ_SLEW_RATE(GPIO_SPI3_SCK_2) /* PC10 */ + +#define GPIO_SPI4_MISO GPIO_SPI4_MISO_2 /* PE5 */ +#define GPIO_SPI4_MOSI GPIO_SPI4_MOSI_2 /* PE6 */ +#define GPIO_SPI4_SCK ADJ_SLEW_RATE(GPIO_SPI4_SCK_2) /* PE2 */ + +/* I2C + * + */ +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1 /* PB6 */ +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1 /* PB7 */ + +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN6) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN7) + +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_1 /* PB10 */ +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_1 /* PB11 */ + +#define GPIO_I2C2_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN10) +#define GPIO_I2C2_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN11) + + +#define GPIO_I2C4_SCL GPIO_I2C4_SCL_1 /* PD12 */ +#define GPIO_I2C4_SDA GPIO_I2C4_SDA_1 /* PD13 */ + +#define GPIO_I2C4_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN12) +#define GPIO_I2C4_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_2MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN13) + +#define GPIO_CAN1_RX GPIO_CAN1_RX_3 /* PD0 */ +#define GPIO_CAN1_TX GPIO_CAN1_TX_3 /* PD1 */ + +#define GPIO_CAN2_RX GPIO_CAN2_RX_1 /* PB12 */ +#define GPIO_CAN2_TX GPIO_CAN2_TX_1 /* PB13 */ + +/* SDMMC2 + * + * VDD 3.3 + * GND + * SDMMC2_CK PD6 + * SDMMC2_CMD PD7 + * SDMMC2_D0 PB14 + * SDMMC2_D1 PB15 + * SDMMC2_D2 PG11 + * SDMMC2_D3 PB4 + */ + +#define GPIO_SDMMC2_CK GPIO_SDMMC2_CK_2 /* PC1 */ +#define GPIO_SDMMC2_CMD GPIO_SDMMC2_CMD_1 /* PD7 */ +// #define GPIO_SDMMC2_D0 GPIO_SDMMC2_D0 /* PB14 */ +// #define GPIO_SDMMC2_D1 GPIO_SDMMC2_D1 /* PB15 */ +#define GPIO_SDMMC2_D2 GPIO_SDMMC2_D2_2 /* PB3 */ +// #define GPIO_SDMMC2_D3 GPIO_SDMMC2_D3 /* PB4 */ + + +#endif /*__NUTTX_CONFIG_APH743R1_INCLUDE_BOARD_H */ diff --git a/boards/x-mav/ap-h743r1/nuttx-config/include/board_dma_map.h b/boards/x-mav/ap-h743r1/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..657ad280d9 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/include/board_dma_map.h @@ -0,0 +1,61 @@ +/**************************************************************************** + * + * Copyright (c) 2021 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 + +// DMAMUX1 Using at most 8 Channels on DMA1 -------- Assigned +// V + +#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* 1 DMA1:37 IMU */ +#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* 2 DMA1:38 IMU */ + +#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* DMA1:39 */ +#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* DMA1:40 */ + +#define DMAMAP_SPI4_RX DMAMAP_DMA12_SPI4RX_0 /* 3 DMA1:83 IMU */ +#define DMAMAP_SPI4_TX DMAMAP_DMA12_SPI4TX_0 /* 4 DMA1:84 IMU */ + +#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 /* DMA1:41 GPS1 */ +#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 /* DMA1:42 GPS1 */ + +#define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_0 /* DMA1:43 GPS2 */ +#define DMAMAP_USART2_TX DMAMAP_DMA12_USART2TX_0 /* DMA1:44 GPS2 */ + +#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_0 /* DMA1:45 TELEM1 */ +#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_0 /* DMA1:46 TELEM1 */ + +#define DMAMAP_UART4_RX DMAMAP_DMA12_UART4RX_1 /* DMA1:63 TELEM2 */ +#define DMAMAP_UART4_TX DMAMAP_DMA12_UART4TX_1 /* DMA1:64 TELEM2 */ + +#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 /* DMA1:71 PX4IO */ +#define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 /* DMA1:72 PX4IO */ diff --git a/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig b/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig new file mode 100644 index 0000000000..b75820d410 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig @@ -0,0 +1,273 @@ +# +# 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_DISABLE_ENVIRON is not set +# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set +# CONFIG_DISABLE_PTHREAD is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set +# CONFIG_MMCSD_HAVE_WRITEPROTECT is not set +# CONFIG_MMCSD_MMCSUPPORT is not set +# CONFIG_MMCSD_SPI is not set +# CONFIG_NSH_DISABLEBG is not set +# CONFIG_NSH_DISABLESCRIPT is not set +# CONFIG_NSH_DISABLE_CAT is not set +# CONFIG_NSH_DISABLE_CD is not set +# CONFIG_NSH_DISABLE_CP is not set +# CONFIG_NSH_DISABLE_DATE is not set +# CONFIG_NSH_DISABLE_DF is not set +# CONFIG_NSH_DISABLE_ECHO is not set +# CONFIG_NSH_DISABLE_ENV is not set +# CONFIG_NSH_DISABLE_EXEC is not set +# CONFIG_NSH_DISABLE_EXIT is not set +# CONFIG_NSH_DISABLE_EXPORT is not set +# CONFIG_NSH_DISABLE_FREE is not set +# CONFIG_NSH_DISABLE_GET is not set +# CONFIG_NSH_DISABLE_HELP is not set +# CONFIG_NSH_DISABLE_ITEF is not set +# CONFIG_NSH_DISABLE_KILL is not set +# CONFIG_NSH_DISABLE_LOOPS is not set +# CONFIG_NSH_DISABLE_LS is not set +# CONFIG_NSH_DISABLE_MKDIR is not set +# CONFIG_NSH_DISABLE_MKFATFS is not set +# CONFIG_NSH_DISABLE_MOUNT is not set +# CONFIG_NSH_DISABLE_MV is not set +# CONFIG_NSH_DISABLE_PRINTF is not set +# CONFIG_NSH_DISABLE_PS is not set +# CONFIG_NSH_DISABLE_PSSTACKUSAGE is not set +# CONFIG_NSH_DISABLE_PWD is not set +# CONFIG_NSH_DISABLE_RM is not set +# CONFIG_NSH_DISABLE_RMDIR is not set +# CONFIG_NSH_DISABLE_SEMICOLON is not set +# CONFIG_NSH_DISABLE_SET is not set +# CONFIG_NSH_DISABLE_SLEEP is not set +# CONFIG_NSH_DISABLE_SOURCE is not set +# CONFIG_NSH_DISABLE_TEST is not set +# CONFIG_NSH_DISABLE_TIME is not set +# CONFIG_NSH_DISABLE_UMOUNT is not set +# CONFIG_NSH_DISABLE_UNSET is not set +# CONFIG_NSH_DISABLE_USLEEP is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD_CUSTOM=y +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/x-mav/ap-h743r1/nuttx-config" +CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y +CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" +CONFIG_ARCH_CHIP="stm32h7" +CONFIG_ARCH_CHIP_STM32H743VI=y +CONFIG_ARCH_CHIP_STM32H7=y +CONFIG_ARCH_INTERRUPTSTACK=768 +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARMV7M_BASEPRI_WAR=y +CONFIG_ARMV7M_DCACHE=y +CONFIG_ARMV7M_DTCM=y +CONFIG_ARMV7M_ICACHE=y +CONFIG_ARMV7M_MEMCPY=y +CONFIG_ARMV7M_USEBASEPRI=y +CONFIG_ARM_MPU_EARLY_RESET=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_ASSERT_RESET_VALUE=0 +CONFIG_BOARD_CRASHDUMP=y +CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_RESET_ON_ASSERT=2 +CONFIG_BUILTIN=y +CONFIG_CDCACM=y +CONFIG_CDCACM_IFLOWCONTROL=y +CONFIG_CDCACM_PRODUCTID=0x0036 +CONFIG_CDCACM_PRODUCTSTR="X-MAV AP-H743r1" +CONFIG_CDCACM_RXBUFSIZE=600 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x1B8C +CONFIG_CDCACM_VENDORSTR="X-MAV" +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_HARDFAULT_ALERT=y +CONFIG_DEBUG_MEMFAULT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEFAULT_SMALL=y +CONFIG_DEV_FIFO_SIZE=0 +CONFIG_DEV_PIPE_MAXSIZE=1024 +CONFIG_DEV_PIPE_SIZE=70 +CONFIG_EXPERIMENTAL=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_INCLUDE_PROGMEM=y +CONFIG_FS_PROCFS_MAX_TASKS=64 +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_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=3194 +CONFIG_IOB_NBUFFERS=24 +CONFIG_IOB_NCHAINS=24 +CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_LIBC_LONG_LONG=y +CONFIG_LIBC_MAX_EXITFUNS=1 +CONFIG_LIBC_STRERROR=y +CONFIG_MEMSET_64BIT=y +CONFIG_MEMSET_OPTSPEED=y +CONFIG_MMCSD=y +CONFIG_MMCSD_SDIO=y +CONFIG_MMCSD_SDIOWAIT_WRCOMPLETE=y +CONFIG_MM_IOB=y +CONFIG_MM_REGIONS=4 +CONFIG_MTD=y +CONFIG_MTD_BYTE_WRITE=y +CONFIG_MTD_PARTITION=y +CONFIG_MTD_PROGMEM=y +CONFIG_MTD_RAMTRON=y +CONFIG_NAME_MAX=40 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_ARGCAT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_CMDPARMS=y +CONFIG_NSH_CROMFSETC=y +CONFIG_NSH_LINELEN=128 +CONFIG_NSH_MAXARGUMENTS=15 +CONFIG_NSH_NESTDEPTH=8 +CONFIG_NSH_QUOTE=y +CONFIG_NSH_ROMFSETC=y +CONFIG_NSH_ROMFSSECTSIZE=128 +CONFIG_NSH_STRERROR=y +CONFIG_NSH_VARS=y +CONFIG_OTG_ID_GPIO_DISABLE=y +CONFIG_PIPES=y +CONFIG_PREALLOC_TIMERS=50 +CONFIG_PRIORITY_INHERITANCE=y +CONFIG_PTHREAD_MUTEX_ROBUST=y +CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_RAMTRON_SETSPEED=y +CONFIG_RAM_SIZE=245760 +CONFIG_RAM_START=0x20010000 +CONFIG_RAW_BINARY=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_RTC_DATETIME=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_HPWORKPRIORITY=249 +CONFIG_SCHED_HPWORKSTACKSIZE=1280 +CONFIG_SCHED_INSTRUMENTATION=y +CONFIG_SCHED_INSTRUMENTATION_EXTERNAL=y +CONFIG_SCHED_INSTRUMENTATION_SWITCH=y +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_LPWORKPRIORITY=50 +CONFIG_SCHED_LPWORKSTACKSIZE=1632 +CONFIG_SCHED_WAITPID=y +CONFIG_SEM_PREALLOCHOLDERS=32 +CONFIG_SERIAL_IFLOWCONTROL_WATERMARKS=y +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=256 +CONFIG_STM32H7_ADC1=y +CONFIG_STM32H7_ADC2=y +CONFIG_STM32H7_ADC3=y +CONFIG_STM32H7_BBSRAM=y +CONFIG_STM32H7_BBSRAM_FILES=5 +CONFIG_STM32H7_BDMA=y +CONFIG_STM32H7_BKPSRAM=y +CONFIG_STM32H7_DMA1=y +CONFIG_STM32H7_DMA2=y +CONFIG_STM32H7_DMACAPABLE=y +CONFIG_STM32H7_FLASH_OVERRIDE_I=y +CONFIG_STM32H7_FLOWCONTROL_BROKEN=y +CONFIG_STM32H7_I2C1=y +CONFIG_STM32H7_I2C2=y +CONFIG_STM32H7_I2C4=y +CONFIG_STM32H7_I2C_DYNTIMEO=y +CONFIG_STM32H7_I2C_DYNTIMEO_STARTSTOP=10 +CONFIG_STM32H7_OTGFS=y +CONFIG_STM32H7_PROGMEM=y +CONFIG_STM32H7_RTC=y +CONFIG_STM32H7_RTC_HSECLOCK=y +CONFIG_STM32H7_RTC_MAGIC_REG=1 +CONFIG_STM32H7_SAVE_CRASHDUMP=y +CONFIG_STM32H7_SDMMC2=y +CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y +CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32H7_SPI1=y +CONFIG_STM32H7_SPI1_DMA=y +CONFIG_STM32H7_SPI1_DMA_BUFFER=4096 +CONFIG_STM32H7_SPI3=y +CONFIG_STM32H7_SPI4=y +CONFIG_STM32H7_SPI4_DMA=y +CONFIG_STM32H7_SPI4_DMA_BUFFER=4096 +CONFIG_STM32H7_SPI_DMATHRESHOLD=8 +CONFIG_STM32H7_TIM1=y +CONFIG_STM32H7_TIM2=y +CONFIG_STM32H7_TIM3=y +CONFIG_STM32H7_TIM4=y +CONFIG_STM32H7_TIM8=y +CONFIG_STM32H7_UART4=y +CONFIG_STM32H7_UART7=y +CONFIG_STM32H7_UART8=y +CONFIG_STM32H7_USART1=y +CONFIG_STM32H7_USART2=y +CONFIG_STM32H7_USART3=y +CONFIG_STM32H7_USART6=y +CONFIG_STM32H7_USART_BREAKS=y +CONFIG_STM32H7_USART_INVERT=y +CONFIG_STM32H7_USART_SINGLEWIRE=y +CONFIG_STM32H7_USART_SWAP=y +CONFIG_SYSTEM_CDCACM=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=24 +CONFIG_UART4_BAUD=921600 +CONFIG_UART4_RXBUFSIZE=3000 +CONFIG_UART4_RXDMA=y +CONFIG_UART4_TXBUFSIZE=3000 +CONFIG_UART4_TXDMA=y +CONFIG_UART7_BAUD=57600 +CONFIG_UART7_RXBUFSIZE=600 +CONFIG_UART7_TXBUFSIZE=3000 +CONFIG_UART8_BAUD=57600 +CONFIG_UART8_RXBUFSIZE=600 +CONFIG_UART8_SERIAL_CONSOLE=y +CONFIG_UART8_TXBUFSIZE=3000 +CONFIG_USART1_BAUD=57600 +CONFIG_USART1_RXBUFSIZE=600 +CONFIG_USART1_RXDMA=y +CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_USART1_TXDMA=y +CONFIG_USART2_BAUD=57600 +CONFIG_USART2_RXBUFSIZE=600 +CONFIG_USART2_RXDMA=y +CONFIG_USART2_TXBUFSIZE=3000 +CONFIG_USART2_TXDMA=y +CONFIG_USART3_BAUD=57600 +CONFIG_USART3_RXBUFSIZE=180 +CONFIG_USART3_RXDMA=y +CONFIG_USART3_TXBUFSIZE=1500 +CONFIG_USART3_TXDMA=y +CONFIG_USART6_BAUD=57600 +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_RXDMA=y +CONFIG_USART6_TXBUFSIZE=1500 +CONFIG_USART6_TXDMA=y +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 +CONFIG_WATCHDOG=y +CONFIG_WQUEUE_NOTIFIER=y diff --git a/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld b/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld new file mode 100644 index 0000000000..abd27222b9 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld @@ -0,0 +1,213 @@ +/**************************************************************************** + * scripts/script.ld + * + * Copyright (C) 2016, 2019 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 X-MAV AP-H743-R1 uses an STM32H743VIT6 has 2048Kb of main FLASH memory. + * The flash memory is partitioned into a User Flash memory and a System + * Flash memory. Each of these memories has two banks: + * + * 1) User Flash memory: + * + * Bank 1: Start address 0x0800:0000 to 0x080F:FFFF with 8 sectors, 128Kb each + * Bank 2: Start address 0x0810:0000 to 0x081F:FFFF with 8 sectors, 128Kb each + * + * 2) System Flash memory: + * + * Bank 1: Start address 0x1FF0:0000 to 0x1FF1:FFFF with 1 x 128Kb sector + * Bank 1: Start address 0x1FF4:0000 to 0x1FF5:FFFF with 1 x 128Kb sector + * + * 3) User option bytes for user configuration, only in Bank 1. + * + * In the STM32H743VIT6, two different boot spaces can be selected through + * the BOOT pin and the boot base address programmed in the BOOT_ADD0 and + * BOOT_ADD1 option bytes: + * + * 1) BOOT=0: Boot address defined by user option byte BOOT_ADD0[15:0]. + * ST programmed value: Flash memory at 0x0800:0000 + * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. + * ST programmed value: System bootloader at 0x1FF0:0000 + * + * The AP-H743-R1 has a Button on board, the BOOT0 pin is at ground so by default, + * the STM32 will boot to address 0x0800:0000 in FLASH unless the button has been pressed, + * then the boot will be from 0x1FF0:0000 + * + * The STM32H743VIT6 also has 1024Kb of data SRAM. + * SRAM is split up into several blocks and into three power domains: + * + * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with + * 0 wait states by the Cortex-M7 and by MDMA through AHBS slave bus + * + * 1.1) 128Kb of DTCM-RAM beginning at address 0x2000:0000 + * + * The DTCM-RAM is organized as 2 x 64Kb DTCM-RAMs on 2 x 32 bit + * DTCM ports. The DTCM-RAM could be used for critical real-time + * data, such as interrupt service routines or stack / heap memory. + * Both DTCM-RAMs can be used in parallel (for load/store operations) + * thanks to the Cortex-M7 dual issue capability. + * + * 1.2) 64Kb of ITCM-RAM beginning at address 0x0000:0000 + * + * This RAM is connected to ITCM 64-bit interface designed for + * execution of critical real-times routines by the CPU. + * + * 2) AXI SRAM (D1 domain) accessible by all system masters except BDMA + * through D1 domain AXI bus matrix + * + * 2.1) 512Kb of SRAM beginning at address 0x2400:0000 + * + * 3) AHB SRAM (D2 domain) accessible by all system masters except BDMA + * through D2 domain AHB bus matrix + * + * 3.1) 128Kb of SRAM1 beginning at address 0x3000:0000 + * 3.2) 128Kb of SRAM2 beginning at address 0x3002:0000 + * 3.3) 32Kb of SRAM3 beginning at address 0x3004:0000 + * + * SRAM1 - SRAM3 are one contiguous block: 288Kb at address 0x3000:0000 + * + * 4) AHB SRAM (D3 domain) accessible by most of system masters + * through D3 domain AHB bus matrix + * + * 4.1) 64Kb of SRAM4 beginning at address 0x3800:0000 + * 4.1) 4Kb of backup RAM beginning at address 0x3880: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. + */ + +MEMORY +{ + itcm (rwx) : ORIGIN = 0x00000000, LENGTH = 64K + flash (rx) : ORIGIN = 0x08000000, LENGTH = 2048K + dtcm1 (rwx) : ORIGIN = 0x20000000, LENGTH = 64K + dtcm2 (rwx) : ORIGIN = 0x20010000, LENGTH = 64K + sram (rwx) : ORIGIN = 0x24000000, LENGTH = 512K + sram1 (rwx) : ORIGIN = 0x30000000, LENGTH = 128K + sram2 (rwx) : ORIGIN = 0x30020000, LENGTH = 128K + sram3 (rwx) : ORIGIN = 0x30040000, LENGTH = 32K + sram4 (rwx) : ORIGIN = 0x38000000, LENGTH = 64K + bbram (rwx) : ORIGIN = 0x38800000, LENGTH = 4K +} + +OUTPUT_ARCH(arm) +EXTERN(_vectors) +ENTRY(_stext) + +/* + * 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) +EXTERN(_bootdelay_signature) + +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + . = ALIGN(32); + /* + This signature provides the bootloader with a way to delay booting + */ + _bootdelay_signature = ABSOLUTE(.); + FILL(0xffecc2925d7d05c5) + . += 8; + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.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/x-mav/ap-h743r1/nuttx-config/scripts/script.ld b/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..ace39a1bd7 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld @@ -0,0 +1,228 @@ +/**************************************************************************** + * scripts/script.ld + * + * Copyright (C) 2020 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 board uses an STM32H743VIT6 and has 2048Kb of main FLASH memory. + * The flash memory is partitioned into a User Flash memory and a System + * Flash memory. Each of these memories has two banks: + * + * 1) User Flash memory: + * + * Bank 1: Start address 0x0800:0000 to 0x080F:FFFF with 8 sectors, 128Kb each + * Bank 2: Start address 0x0810:0000 to 0x081F:FFFF with 8 sectors, 128Kb each + * + * 2) System Flash memory: + * + * Bank 1: Start address 0x1FF0:0000 to 0x1FF1:FFFF with 1 x 128Kb sector + * Bank 1: Start address 0x1FF4:0000 to 0x1FF5:FFFF with 1 x 128Kb sector + * + * 3) User option bytes for user configuration, only in Bank 1. + * + * In the STM32H743VIT6, two different boot spaces can be selected through + * the BOOT pin and the boot base address programmed in the BOOT_ADD0 and + * BOOT_ADD1 option bytes: + * + * 1) BOOT=0: Boot address defined by user option byte BOOT_ADD0[15:0]. + * ST programmed value: Flash memory at 0x0800:0000 + * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. + * ST programmed value: System bootloader at 0x1FF0:0000 + * + * There's a button on board, the BOOT0 pin is at ground so by default, + * the STM32 will boot to address 0x0800:0000 in FLASH unless the switch is + * drepresed, then the boot will be from 0x1FF0:0000 + * + * The STM32H743VIT6 also has 1024Kb of data SRAM. + * SRAM is split up into several blocks and into three power domains: + * + * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with + * 0 wait states by the Cortex-M7 and by MDMA through AHBS slave bus + * + * 1.1) 128Kb of DTCM-RAM beginning at address 0x2000:0000 + * + * The DTCM-RAM is organized as 2 x 64Kb DTCM-RAMs on 2 x 32 bit + * DTCM ports. The DTCM-RAM could be used for critical real-time + * data, such as interrupt service routines or stack / heap memory. + * Both DTCM-RAMs can be used in parallel (for load/store operations) + * thanks to the Cortex-M7 dual issue capability. + * + * 1.2) 64Kb of ITCM-RAM beginning at address 0x0000:0000 + * + * This RAM is connected to ITCM 64-bit interface designed for + * execution of critical real-times routines by the CPU. + * + * 2) AXI SRAM (D1 domain) accessible by all system masters except BDMA + * through D1 domain AXI bus matrix + * + * 2.1) 512Kb of SRAM beginning at address 0x2400:0000 + * + * 3) AHB SRAM (D2 domain) accessible by all system masters except BDMA + * through D2 domain AHB bus matrix + * + * 3.1) 128Kb of SRAM1 beginning at address 0x3000:0000 + * 3.2) 128Kb of SRAM2 beginning at address 0x3002:0000 + * 3.3) 32Kb of SRAM3 beginning at address 0x3004:0000 + * + * SRAM1 - SRAM3 are one contiguous block: 288Kb at address 0x3000:0000 + * + * 4) AHB SRAM (D3 domain) accessible by most of system masters + * through D3 domain AHB bus matrix + * + * 4.1) 64Kb of SRAM4 beginning at address 0x3800:0000 + * 4.1) 4Kb of backup RAM beginning at address 0x3880: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. + */ + +MEMORY +{ + ITCM_RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 64K + FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1920K + + DTCM1_RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K + DTCM2_RAM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K + AXI_SRAM (rwx) : ORIGIN = 0x24000000, LENGTH = 512K /* D1 domain AXI bus */ + SRAM1 (rwx) : ORIGIN = 0x30000000, LENGTH = 128K /* D2 domain AHB bus */ + SRAM2 (rwx) : ORIGIN = 0x30020000, LENGTH = 128K /* D2 domain AHB bus */ + SRAM3 (rwx) : ORIGIN = 0x30040000, LENGTH = 32K /* D2 domain AHB bus */ + SRAM4 (rwx) : ORIGIN = 0x38000000, LENGTH = 64K /* D3 domain */ + BKPRAM (rwx) : ORIGIN = 0x38800000, LENGTH = 4K +} + +OUTPUT_ARCH(arm) +EXTERN(_vectors) +ENTRY(_stext) + +/* + * 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) +EXTERN(_bootdelay_signature) + +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + . = ALIGN(32); + /* + This signature provides the bootloader with a way to delay booting + */ + _bootdelay_signature = ABSOLUTE(.); + FILL(0xffecc2925d7d05c5) + . += 8; + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.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(.); + + /* Pad out last section as the STM32H7 Flash write size is 256 bits. 32 bytes */ + . = ALIGN(16); + FILL(0xffff) + . += 16; + } > AXI_SRAM AT > FLASH = 0xffff + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > AXI_SRAM + + /* Emit the the D3 power domain section for locating BDMA data */ + + .sram4_reserve (NOLOAD) : + { + *(.sram4) + . = ALIGN(4); + _sram4_heap_start = ABSOLUTE(.); + } > SRAM4 + + /* 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/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt b/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt new file mode 100644 index 0000000000..6db1696208 --- /dev/null +++ b/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt @@ -0,0 +1,42 @@ +############################################################################ +# +# Copyright (c) 2025 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. +# +############################################################################ + +px4_add_module( + MODULE modules__pwm_voltage_apply + MAIN pwm_voltage_apply + + SRCS + pwm_voltage.cpp + DEPENDS + px4_work_queue + ) diff --git a/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c b/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c new file mode 100644 index 0000000000..728bcc7a55 --- /dev/null +++ b/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c @@ -0,0 +1,43 @@ +/**************************************************************************** + * + * Copyright (c) 2025 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. + * + ****************************************************************************/ + +/** + * Control PWM output voltage + * + * @value 0 3.3V + * @value 1 5.0V + * + * @reboot_required true + * @group PWM Outputs + */ +PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); diff --git a/boards/x-mav/ap-h743r1/pwm_voltage/pwm_voltage.cpp b/boards/x-mav/ap-h743r1/pwm_voltage/pwm_voltage.cpp new file mode 100644 index 0000000000..2bef9ae0f6 --- /dev/null +++ b/boards/x-mav/ap-h743r1/pwm_voltage/pwm_voltage.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * Copyright (c) 2025 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 +#include + +#include "board_config.h" + +extern "C" int pwm_voltage_apply_main(int argc, char *argv[]) +{ + int32_t pwm_volt_sel = 0; + + param_get(param_find("PWM_VOLT_SEL"), &pwm_volt_sel); + + if (pwm_volt_sel != 0) { + PWM_5V_VOLT_SEL(true); + + } else { + PWM_5V_VOLT_SEL(false); + } + + return 0; +} diff --git a/boards/x-mav/ap-h743r1/rover.px4board b/boards/x-mav/ap-h743r1/rover.px4board new file mode 100644 index 0000000000..e105ef2772 --- /dev/null +++ b/boards/x-mav/ap-h743r1/rover.px4board @@ -0,0 +1,15 @@ +CONFIG_MODULES_FLIGHT_MODE_MANAGER=n +CONFIG_MODULES_FW_ATT_CONTROL=n +CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_RATE_CONTROL=n +CONFIG_MODULES_MC_ATT_CONTROL=n +CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=n +CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=n +CONFIG_MODULES_MC_POS_CONTROL=n +CONFIG_MODULES_MC_RATE_CONTROL=n +CONFIG_MODULES_VTOL_ATT_CONTROL=n +CONFIG_MODULES_ROVER_ACKERMANN=y +CONFIG_MODULES_ROVER_DIFFERENTIAL=y +CONFIG_MODULES_ROVER_MECANUM=y diff --git a/boards/x-mav/ap-h743r1/src/CMakeLists.txt b/boards/x-mav/ap-h743r1/src/CMakeLists.txt new file mode 100644 index 0000000000..123bc75b16 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/CMakeLists.txt @@ -0,0 +1,70 @@ +############################################################################ +# +# Copyright (c) 2021 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. +# +############################################################################ +if("${PX4_BOARD_LABEL}" STREQUAL "bootloader") + add_library(drivers_board + bootloader_main.c + usb.c + ) + target_link_libraries(drivers_board + PRIVATE + nuttx_arch + nuttx_drivers + bootloader + ) + target_include_directories(drivers_board PRIVATE ${PX4_SOURCE_DIR}/platforms/nuttx/src/bootloader/common) + +else() + add_library(drivers_board + i2c.cpp + init.c + led.c + sdio.c + spi.cpp + timer_config.cpp + usb.c + mtd.cpp + can.c + ) + # add_dependencies(drivers_board arch_board_hw_info) + + target_link_libraries(drivers_board + PRIVATE + arch_io_pins + arch_spi + arch_board_hw_info + drivers__led + nuttx_arch + nuttx_drivers + px4_layer + ) +endif() diff --git a/boards/x-mav/ap-h743r1/src/board_config.h b/boards/x-mav/ap-h743r1/src/board_config.h new file mode 100644 index 0000000000..254261ba1a --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/board_config.h @@ -0,0 +1,226 @@ +/**************************************************************************** + * + * Copyright (c) 2021 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 + * + * Board internal definitions + */ + +#pragma once + +/**************************************************************************************************** + * Included Files + ****************************************************************************************************/ + +#include +#include +#include + +#include + +/**************************************************************************************************** + * Definitions + ****************************************************************************************************/ + +/* PX4IO connection configuration */ +#define BOARD_USES_PX4IO_VERSION 2 +#define PX4IO_SERIAL_DEVICE "/dev/ttyS4" +#define PX4IO_SERIAL_TX_GPIO GPIO_USART6_TX +#define PX4IO_SERIAL_RX_GPIO GPIO_USART6_RX +#define PX4IO_SERIAL_BASE STM32_USART6_BASE +#define PX4IO_SERIAL_VECTOR STM32_IRQ_USART6 +#define PX4IO_SERIAL_TX_DMAMAP DMAMAP_USART6_TX +#define PX4IO_SERIAL_RX_DMAMAP DMAMAP_USART6_RX +#define PX4IO_SERIAL_RCC_REG STM32_RCC_APB2ENR +#define PX4IO_SERIAL_RCC_EN RCC_APB2ENR_USART6EN +#define PX4IO_SERIAL_CLOCK STM32_PCLK2_FREQUENCY +#define PX4IO_SERIAL_BITRATE 1500000 /* 1.5Mbps -> max rate for IO */ + +/* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ + +# define GPIO_nLED_RED /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN15) +# define GPIO_nLED_GREEN /* PD11 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN11) +# define GPIO_nLED_BLUE /* PD10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN10) + +# define BOARD_HAS_CONTROL_STATUS_LEDS 1 +# define BOARD_OVERLOAD_LED LED_RED +# define BOARD_ARMED_STATE_LED LED_BLUE + +/* + * 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 + */ + +/* ADC defines to be used in sensors.cpp to read from a particular channel */ + +#define SYSTEM_ADC_BASE STM32_ADC1_BASE + +#define ADC12_CH(n) (n) +#define ADC3_CH(n) (n) + +#define ANALOG_PC3 (GPIO_ANALOG|GPIO_PORTC|GPIO_PIN3) + +#define PX4_ADC_GPIO \ + /* PC4 */ GPIO_ADC12_INP4, \ + /* PC5 */ GPIO_ADC12_INP8 + +/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ +/* Define Channel numbers must match above GPIO pin IN(n)*/ +#define ADC_BATTERY_VOLTAGE_CHANNEL ADC12_CH(4) +#define ADC_BATTERY_CURRENT_CHANNEL ADC12_CH(8) + +#define ADC_CHANNELS \ + ((1 << ADC_BATTERY_VOLTAGE_CHANNEL) | \ + (1 << ADC_BATTERY_CURRENT_CHANNEL)) + +#define BOARD_ADC_OPEN_CIRCUIT_V (1.6f) + +#define BOARD_HAS_STATIC_MANIFEST 1 + +#define UAVCAN_NUM_IFACES_RUNTIME 1 + +/* PWM + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 7 + +#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS + +/* PWM Power */ +#define GPIO_PWM_VOLT_SEL /* PA8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) +#define PWM_5V_VOLT_SEL(on_true) px4_arch_gpiowrite(GPIO_PWM_VOLT_SEL, (on_true)) + +/* Tone alarm output */ +#define TONE_ALARM_TIMER 5 /* Timer 5 */ +#define TONE_ALARM_CHANNEL 4 /* PA3 GPIO_TIM5_CH4 */ +#define GPIO_BUZZER_1 /* PA3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN3) + +#define GPIO_TONE_ALARM_IDLE GPIO_BUZZER_1 +#define GPIO_TONE_ALARM GPIO_BUZZER_1 + +/* USB OTG FS + * + * PE15 OTG_FS_VBUS VBUS sensing + */ +#define GPIO_OTGFS_VBUS /* PE15 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTE|GPIO_PIN15) +#define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS)) + +/* High-resolution timer */ +#define HRT_TIMER 8 /* use timer1 for the HRT */ +#define HRT_TIMER_CHANNEL 1 /* use capture/compare channel 1 */ + +/* RC Serial port */ +#define RC_SERIAL_PORT "/dev/ttyS4" +#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT + +/* SD card bringup does not work if performed on the IDLE thread because it + * will cause waiting. Use either: + * + * CONFIG_LIB_BOARDCTL=y, OR + * CONFIG_BOARD_INITIALIZE=y && CONFIG_BOARD_INITTHREAD=y + */ +#define SDIO_SLOTNO 0 /* Only one slot */ +#define SDIO_MINOR 0 +#if defined(CONFIG_BOARD_INITIALIZE) && !defined(CONFIG_LIB_BOARDCTL) && \ + !defined(CONFIG_BOARD_INITTHREAD) +# warning SDIO initialization cannot be perfomed on the IDLE thread +#endif + +/* This board provides a DMA pool and APIs */ +#define BOARD_DMA_ALLOC_POOL_SIZE 5120 + +/* This board provides the board_on_reset interface */ +#define BOARD_HAS_ON_RESET 1 + +#define PX4_GPIO_INIT_LIST { \ + GPIO_CAN1_TX,\ + GPIO_CAN1_RX,\ + GPIO_CAN2_TX,\ + GPIO_CAN2_RX,\ + PX4_ADC_GPIO,\ + GPIO_TONE_ALARM_IDLE,\ + GPIO_PWM_VOLT_SEL\ + } + +#define BOARD_ENABLE_CONSOLE_BUFFER + +#define BOARD_NUM_IO_TIMERS 5 + + +__BEGIN_DECLS + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************************************** + * Public Functions + ****************************************************************************************************/ + +/**************************************************************************** + * Name: stm32_sdio_initialize + * + * Description: + * Initialize SDIO-based MMC/SD card support + * + ****************************************************************************/ + +int stm32_sdio_initialize(void); + +/**************************************************************************************************** + * Name: stm32_spiinitialize + * + * Description: + * Called to configure SPI chip select GPIO pins for the board. + * + ****************************************************************************************************/ + +extern void stm32_spiinitialize(void); + +extern void stm32_usbinitialize(void); + +extern void board_peripheral_reset(int ms); + +#include + +#endif /* __ASSEMBLY__ */ + +__END_DECLS diff --git a/boards/x-mav/ap-h743r1/src/bootloader_main.c b/boards/x-mav/ap-h743r1/src/bootloader_main.c new file mode 100644 index 0000000000..5670308a29 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/bootloader_main.c @@ -0,0 +1,75 @@ +/**************************************************************************** + * + * Copyright (c) 2021 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 bootloader_main.c + * + * FMU-specific early startup code for bootloader +*/ + +#include "board_config.h" +#include "bl.h" + +#include +#include +#include +#include +#include +#include "arm_internal.h" +#include + +extern int sercon_main(int c, char **argv); + +__EXPORT void board_on_reset(int status) {} + +__EXPORT void stm32_boardinitialize(void) +{ + /* configure USB interfaces */ + stm32_usbinitialize(); +} + +__EXPORT int board_app_initialize(uintptr_t arg) +{ + return 0; +} + +void board_late_initialize(void) +{ + sercon_main(0, NULL); +} + +extern void sys_tick_handler(void); +void board_timerhook(void) +{ + sys_tick_handler(); +} diff --git a/boards/x-mav/ap-h743r1/src/can.c b/boards/x-mav/ap-h743r1/src/can.c new file mode 100644 index 0000000000..71a89955e2 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/can.c @@ -0,0 +1,140 @@ +/**************************************************************************** + * + * Copyright (C) 2012 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 px4fmu_can.c + * + * Board-specific CAN functions. + */ + +#if !defined(CONFIG_CAN) + +#include + +#include "board_config.h" + + +__EXPORT +uint16_t board_get_can_interfaces(void) +{ + uint16_t enabled_interfaces = 0x3; + + enabled_interfaces &= ~(1 << 1); + + return enabled_interfaces; +} + +#else + +#include +#include + +#include +#include + +#include "chip.h" +#include "arm_internal.h" + +#include "chip.h" +#include "stm32_can.h" +#include "board_config.h" + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ +/* Configuration ********************************************************************/ + +#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) +# warning "Both CAN1 and CAN2 are enabled. Assuming only CAN1." +# undef CONFIG_STM32_CAN2 +#endif + +#ifdef CONFIG_STM32_CAN1 +# define CAN_PORT 1 +#else +# define CAN_PORT 2 +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ +int can_devinit(void); + +/************************************************************************************ + * Name: can_devinit + * + * Description: + * All STM32 architectures must provide the following interface to work with + * examples/can. + * + ************************************************************************************/ + +int can_devinit(void) +{ + static bool initialized = false; + struct can_dev_s *can; + int ret; + + /* Check if we have already initialized */ + + if (!initialized) { + /* Call stm32_caninitialize() to get an instance of the CAN interface */ + + can = stm32_caninitialize(CAN_PORT); + + if (can == NULL) { + canerr("ERROR: Failed to get CAN interface\n"); + return -ENODEV; + } + + /* Register the CAN driver at "/dev/can0" */ + + ret = can_register("/dev/can0", can); + + if (ret < 0) { + canerr("ERROR: can_register failed: %d\n", ret); + return ret; + } + + /* Now we are initialized */ + + initialized = true; + } + + return OK; +} +#endif /* CONFIG_CAN */ diff --git a/boards/x-mav/ap-h743r1/src/hw_config.h b/boards/x-mav/ap-h743r1/src/hw_config.h new file mode 100644 index 0000000000..faffbab701 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/hw_config.h @@ -0,0 +1,135 @@ +/**************************************************************************** + * + * Copyright (C) 2021 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 + +/**************************************************************************** + * 10-8--2016: + * To simplify the ripple effect on the tools, we will be using + * /dev/serial/by-id/PX4 to locate PX4 devices. Therefore + * moving forward all Bootloaders must contain the prefix "PX4 BL " + * in the USBDEVICESTRING + * This Change will be made in an upcoming BL release + ****************************************************************************/ +/* + * Define usage to configure a bootloader + * + * + * Constant example Usage + * APP_LOAD_ADDRESS 0x08004000 - The address in Linker Script, where the app fw is org-ed + * BOOTLOADER_DELAY 5000 - Ms to wait while under USB pwr or bootloader request + * BOARD_FMUV2 + * INTERFACE_USB 1 - (Optional) Scan and use the USB interface for bootloading + * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading + * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string + * USBPRODUCTID 0x0011 - PID Should match defconfig + * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom + * delay provided by an APP FW + * BOARD_TYPE 9 - Must match .prototype boad_id + * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection + * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector + * BOARD_FLASH_SECTORS 11 - Hard coded zero based last sector + * BOARD_FLASH_SIZE (_FLASH_KBYTES*1024)- Total Flash size of device, determined at run time. + * (1024 * 1024) - Hard coded Total Flash of device - The bootloader and app reserved will be deducted + * programmatically + * + * BOARD_FIRST_FLASH_SECTOR_TO_ERASE 2 - Optional sectors index in the flash_sectors table (F4 only), to begin erasing. + * This is to allow sectors to be reserved for app fw usage. That will NOT be erased + * during a FW upgrade. + * The default is 0, and selects the first sector to be erased, as the 0th entry in the + * flash_sectors table. Which is the second physical sector of FLASH in the device. + * The first physical sector of FLASH is used by the bootloader, and is not defined + * in the table. + * + * APP_RESERVATION_SIZE (BOARD_FIRST_FLASH_SECTOR_TO_ERASE * 16 * 1024) - Number of bytes reserved by the APP FW. This number plus + * BOOTLOADER_RESERVATION_SIZE will be deducted from + * BOARD_FLASH_SIZE to determine the size of the App FW + * and hence the address space of FLASH to erase and program. + * USBMFGSTRING "PX4 AP" - Optional USB MFG string (default is '3D Robotics' if not defined.) + * SERIAL_BREAK_DETECT_DISABLED - Optional prevent break selection on Serial port from entering or staying in BL + * + * * Other defines are somewhat self explanatory. + */ + +/* Boot device selection list*/ +#define USB0_DEV 0x01 +#define SERIAL0_DEV 0x02 +#define SERIAL1_DEV 0x04 + +#define APP_LOAD_ADDRESS 0x08020000 +#define BOOTLOADER_DELAY 5000 +#define INTERFACE_USB 1 +#define INTERFACE_USB_CONFIG "/dev/ttyACM0" +#define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) + +//#define USE_VBUS_PULL_DOWN +// #define INTERFACE_USART 6 +#define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" +#define BOOT_DELAY_ADDRESS 0x000001a0 +#define BOARD_TYPE 1203 +#define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) +#define BOARD_FLASH_SECTORS (15) +#define BOARD_FLASH_SIZE (_FLASH_KBYTES * 1024) + +#define OSC_FREQ 8 + +#define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE +#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_RED // RED +#define BOARD_LED_ON 1 +#define BOARD_LED_OFF 0 + +#define SERIAL_BREAK_DETECT_DISABLED 1 + +#if !defined(ARCH_SN_MAX_LENGTH) +# define ARCH_SN_MAX_LENGTH 12 +#endif + +#if !defined(APP_RESERVATION_SIZE) +# define APP_RESERVATION_SIZE 0 +#endif + +#if !defined(BOARD_FIRST_FLASH_SECTOR_TO_ERASE) +# define BOARD_FIRST_FLASH_SECTOR_TO_ERASE 1 +#endif + +#if !defined(USB_DATA_ALIGN) +# define USB_DATA_ALIGN +#endif + +#ifndef BOOT_DEVICES_SELECTION +# define BOOT_DEVICES_SELECTION USB0_DEV|SERIAL0_DEV|SERIAL1_DEV +#endif + +#ifndef BOOT_DEVICES_FILTER_ONUSB +# define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV +#endif diff --git a/boards/x-mav/ap-h743r1/src/i2c.cpp b/boards/x-mav/ap-h743r1/src/i2c.cpp new file mode 100644 index 0000000000..d836ada04f --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/i2c.cpp @@ -0,0 +1,40 @@ +/**************************************************************************** + * + * Copyright (C) 2021 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] = { + initI2CBusInternal(1), + initI2CBusExternal(2), + initI2CBusExternal(4), +}; diff --git a/boards/x-mav/ap-h743r1/src/init.c b/boards/x-mav/ap-h743r1/src/init.c new file mode 100644 index 0000000000..6b41d489bf --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/init.c @@ -0,0 +1,211 @@ +/**************************************************************************** + * + * Copyright (c) 2021 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 + * + * FMU-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 initialisation. + */ + +#include "board_config.h" + +#include + +#include +#include +#include +#include +#include +#include "arm_internal.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +# if defined(FLASH_BASED_PARAMS) +# include +#endif + +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +__END_DECLS + +/************************************************************************************ + * 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) +{ + for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { + px4_arch_configgpio(PX4_MAKE_GPIO_INPUT(io_timer_channel_get_as_pwm_input(i))); + } + + /* + * On resets invoked from system (not boot) ensure we establish a low + * output state on PWM pins to disarm the ESC and prevent the reset from potentially + * spinning up the motors. + */ + if (status >= 0) { + up_mdelay(100); + } +} + +/************************************************************************************ + * 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 PWM first thing */ + board_on_reset(-1); + + /* configure LEDs */ + board_autoled_initialize(); + + /* configure pins */ + const uint32_t gpio[] = PX4_GPIO_INIT_LIST; + px4_gpio_init(gpio, arraySize(gpio)); + + /* configure SPI interfaces */ + stm32_spiinitialize(); + + /* configure USB interfaces */ + stm32_usbinitialize(); + +} + +/**************************************************************************** + * 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; + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure to indicate the nature of the failure. + * + ****************************************************************************/ +__EXPORT int board_app_initialize(uintptr_t arg) +{ + /* Need hrt running before using the ADC */ + px4_platform_init(); + + /* configure the DMA allocator */ + if (board_dma_alloc_init() < 0) { + syslog(LOG_ERR, "[boot] DMA alloc FAILED\n"); + } + + /* initial LED state */ + drv_led_start(); + led_off(LED_RED); + led_off(LED_BLUE); + + if (board_hardfault_init(2, true) != 0) { + led_on(LED_BLUE); + } + +#ifdef CONFIG_MMCSD + int ret = stm32_sdio_initialize(); + + if (ret != OK) { + led_on(LED_BLUE); + return ret; + } + +#endif + +// TODO:internal flash store parameters +#if defined(FLASH_BASED_PARAMS) + static sector_descriptor_t params_sector_map[] = { + {15, 128 * 1024, 0x081E0000}, + {0, 0, 0}, + }; + + /* Initialize the flashfs layer to use heap allocated memory */ + int 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_RED); + } + +#endif + + /* Configure the HW based on the manifest */ + px4_platform_configure(); + + return OK; +} diff --git a/boards/x-mav/ap-h743r1/src/led.c b/boards/x-mav/ap-h743r1/src/led.c new file mode 100644 index 0000000000..0420c1da2e --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/led.c @@ -0,0 +1,113 @@ +/**************************************************************************** + * + * Copyright (c) 2021 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 + * + * LED backend. + */ + +#include + +#include + +#include "chip.h" +#include "stm32_gpio.h" +#include "board_config.h" + +#include +#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 + +# define xlat(p) (p) +static uint32_t g_ledmap[] = { + GPIO_nLED_GREEN, // Indexed by BOARD_LED_GREEN + GPIO_nLED_BLUE, // Indexed by BOARD_LED_BLUE + GPIO_nLED_RED, // Indexed by BOARD_LED_RED +}; + +__EXPORT void led_init(void) +{ + /* Configure LED GPIOs for output */ + for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { + if (g_ledmap[l] != 0) { + stm32_configgpio(g_ledmap[l]); + } + } +} + +static void phy_set_led(int led, bool state) +{ + /* Drive Low to switch on */ + if (g_ledmap[led] != 0) { + stm32_gpiowrite(g_ledmap[led], !state); + } +} + +static bool phy_get_led(int led) +{ + /* If Low it is on */ + if (g_ledmap[led] != 0) { + return !stm32_gpioread(g_ledmap[led]); + } + + return false; +} + +__EXPORT void led_on(int led) +{ + phy_set_led(xlat(led), true); +} + +__EXPORT void led_off(int led) +{ + phy_set_led(xlat(led), false); +} + +__EXPORT void led_toggle(int led) +{ + phy_set_led(xlat(led), !phy_get_led(xlat(led))); +} diff --git a/boards/x-mav/ap-h743r1/src/mtd.cpp b/boards/x-mav/ap-h743r1/src/mtd.cpp new file mode 100644 index 0000000000..e374a9be7e --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/mtd.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ +//TODO:Prepare for NxtDual + +#include +#include +// KiB BS nB +static const px4_mft_device_t spi5 = { // FM25V02A on FMUM native: 32K X 8, emulated as (1024 Blocks of 32) + .bus_type = px4_mft_device_t::SPI, + .devid = SPIDEV_FLASH(0) +}; + +static const px4_mtd_entry_t fmum_fram = { + .device = &spi5, + .npart = 1, + .partd = { + { + .type = MTD_PARAMETERS, + .path = "/fs/mtd_params", + .nblocks = 32 + } + }, +}; + +static const px4_mtd_manifest_t board_mtd_config = { + .nconfigs = 1, + .entries = { + &fmum_fram + } +}; + +static const px4_mft_entry_s mtd_mft = { + .type = MTD, + .pmft = (void *) &board_mtd_config, +}; + +static const px4_mft_s mft = { + .nmft = 1, + .mfts = { + &mtd_mft + } +}; + +const px4_mft_s *board_get_manifest(void) +{ + return &mft; +} diff --git a/boards/x-mav/ap-h743r1/src/sdio.c b/boards/x-mav/ap-h743r1/src/sdio.c new file mode 100644 index 0000000000..869d757756 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/sdio.c @@ -0,0 +1,177 @@ +/**************************************************************************** + * + * Copyright (C) 2014, 2016 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "chip.h" +#include "board_config.h" +#include "stm32_gpio.h" +#include "stm32_sdmmc.h" + +#ifdef CONFIG_MMCSD + + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Card detections requires card support and a card detection GPIO */ + +#define HAVE_NCD 1 +#if !defined(GPIO_SDMMC1_NCD) +# undef HAVE_NCD +#endif + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static FAR struct sdio_dev_s *sdio_dev; +#ifdef HAVE_NCD +static bool g_sd_inserted = 0xff; /* Impossible value */ +#endif + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_ncd_interrupt + * + * Description: + * Card detect interrupt handler. + * + ****************************************************************************/ + +#ifdef HAVE_NCD +static int stm32_ncd_interrupt(int irq, FAR void *context) +{ + bool present; + + present = !stm32_gpioread(GPIO_SDMMC1_NCD); + + if (sdio_dev && present != g_sd_inserted) { + sdio_mediachange(sdio_dev, present); + g_sd_inserted = present; + } + + return OK; +} +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_sdio_initialize + * + * Description: + * Initialize SDIO-based MMC/SD card support + * + ****************************************************************************/ + +int stm32_sdio_initialize(void) +{ + int ret; + +#ifdef HAVE_NCD + /* Card detect */ + + bool cd_status; + + /* Configure the card detect GPIO */ + + stm32_configgpio(GPIO_SDMMC1_NCD); + + /* Register an interrupt handler for the card detect pin */ + + stm32_gpiosetevent(GPIO_SDMMC1_NCD, true, true, true, stm32_ncd_interrupt); +#endif + + /* Mount the SDIO-based MMC/SD block driver */ + /* First, get an instance of the SDIO interface */ + + finfo("Initializing SDIO slot %d\n", SDIO_SLOTNO); + + sdio_dev = sdio_initialize(SDIO_SLOTNO); + + if (!sdio_dev) { + syslog(LOG_ERR, "[boot] Failed to initialize SDIO slot %d\n", SDIO_SLOTNO); + return -ENODEV; + } + + /* Now bind the SDIO interface to the MMC/SD driver */ + + finfo("Bind SDIO to the MMC/SD driver, minor=%d\n", SDIO_MINOR); + + ret = mmcsd_slotinitialize(SDIO_MINOR, sdio_dev); + + if (ret != OK) { + syslog(LOG_ERR, "[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret); + return ret; + } + + finfo("Successfully bound SDIO to the MMC/SD driver\n"); + +#ifdef HAVE_NCD + /* Use SD card detect pin to check if a card is g_sd_inserted */ + + cd_status = !stm32_gpioread(GPIO_SDMMC1_NCD); + finfo("Card detect : %d\n", cd_status); + + sdio_mediachange(sdio_dev, cd_status); +#else + /* Assume that the SD card is inserted. What choice do we have? */ + + sdio_mediachange(sdio_dev, true); +#endif + + return OK; +} + +#endif /* CONFIG_MMCSD */ diff --git a/boards/x-mav/ap-h743r1/src/spi.cpp b/boards/x-mav/ap-h743r1/src/spi.cpp new file mode 100644 index 0000000000..4b262023ea --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/spi.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** + * + * Copyright (C) 2021 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_ICM42688P, SPI::CS{GPIO::PortA, GPIO::Pin2}, SPI::DRDY{GPIO::PortA, GPIO::Pin4}), + initSPIDevice(DRV_IMU_DEVTYPE_BMI270, SPI::CS{GPIO::PortA, GPIO::Pin2}, SPI::DRDY{GPIO::PortA, GPIO::Pin4}) + }), + initSPIBus(SPI::Bus::SPI3, { + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortD, GPIO::Pin4}) + }), + initSPIBus(SPI::Bus::SPI4, { + initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P, SPI::CS{GPIO::PortC, GPIO::Pin13}, SPI::DRDY{GPIO::PortE, GPIO::Pin4}), + initSPIDevice(DRV_IMU_DEVTYPE_BMI270, SPI::CS{GPIO::PortC, GPIO::Pin13}, SPI::DRDY{GPIO::PortE, GPIO::Pin4}) + }), +}; + +static constexpr bool unused = validateSPIConfig(px4_spi_buses); diff --git a/boards/x-mav/ap-h743r1/src/timer_config.cpp b/boards/x-mav/ap-h743r1/src/timer_config.cpp new file mode 100644 index 0000000000..73cee06f31 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/timer_config.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** + * + * Copyright (C) 2021 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::Timer1, DMA{DMA::Index1}), + initIOTimer(Timer::Timer2, DMA{DMA::Index1}), + initIOTimer(Timer::Timer3, DMA{DMA::Index1}), +}; + +constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), + initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel1}, {GPIO::PortA, GPIO::Pin0}) +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/x-mav/ap-h743r1/src/usb.c b/boards/x-mav/ap-h743r1/src/usb.c new file mode 100644 index 0000000000..9591784866 --- /dev/null +++ b/boards/x-mav/ap-h743r1/src/usb.c @@ -0,0 +1,78 @@ +/**************************************************************************** + * + * Copyright (C) 2021 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. + */ + +#include "board_config.h" +#include +#include +#include +#include + +/************************************************************************************ + * Name: stm32_usbinitialize + * + * Description: + * Called to setup USB-related GPIO pins for the 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_STM32H7_OTGFS + stm32_configgpio(GPIO_OTGFS_VBUS); +#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); +} diff --git a/docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-main.png b/docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-main.png new file mode 100644 index 0000000000000000000000000000000000000000..56efaa40a3b1d501c18930415c01278cc7ecf6f2 GIT binary patch literal 76225 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 OVDNPHb6Mw<&;$V9a|Pu9 literal 0 HcmV?d00001 diff --git a/docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-size.png b/docs/assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-size.png new file mode 100644 index 0000000000000000000000000000000000000000..8796767c25684c791015e1c21fa327e1982db462 GIT binary patch literal 5451 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 literal 0 HcmV?d00001 diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index 7965ba8c0d..456fc83df6 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -194,6 +194,7 @@ - [SVehicle E2](flight_controller/svehicle_e2.md) - [ThePeach FCC-K1](flight_controller/thepeach_k1.md) - [ThePeach FCC-R1](flight_controller/thepeach_r1.md) + - [AP-H743-R1](flight_controller/x-mav_ap-h743r1.md) - [Experimental Autopilots](flight_controller/autopilot_experimental.md) - [BeagleBone Blue](flight_controller/beaglebone_blue.md) - [Raspberry Pi 2/3 Navio2](flight_controller/raspberry_pi_navio2.md) diff --git a/docs/en/flight_controller/autopilot_manufacturer_supported.md b/docs/en/flight_controller/autopilot_manufacturer_supported.md index 46885eaf82..aa1d4cb5cb 100644 --- a/docs/en/flight_controller/autopilot_manufacturer_supported.md +++ b/docs/en/flight_controller/autopilot_manufacturer_supported.md @@ -39,3 +39,4 @@ The boards in this category are: - [Svehicle E2](../flight_controller/svehicle_e2.md) - [ThePeach FCC-K1](../flight_controller/thepeach_k1.md) - [ThePeach FCC-R1](../flight_controller/thepeach_r1.md) +- [X-MAV AP-H743-R1](../flight_controller/x-mav_ap-h743r1.md) diff --git a/docs/en/flight_controller/x-mav_ap-h743r1.md b/docs/en/flight_controller/x-mav_ap-h743r1.md new file mode 100644 index 0000000000..435d39b640 --- /dev/null +++ b/docs/en/flight_controller/x-mav_ap-h743r1.md @@ -0,0 +1,145 @@ +# AP-H743-R1 + + + +:::warning +PX4 does not manufacture this (or any) autopilot. +::: + +The AP-H743-R1 is an advanced autopilot manufactured by X-MAV®. + +The autopilot is recommended for commercial system integration, but is also suitable for academic research and any other applications. +It brings you ultimate performance, stability, and reliability in every aspect. + +![AP-H743-R1](../../assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-main.png) + +::: info +These flight controllers are [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +### Processors & Sensors + +- FMU Processor: STM32H743VIT6 + - 32 Bit Arm® Cortex®-M7, 480MHz, 2MB flash memory, 1MB RAM +- IO Processor: STM32F103 + - 32 Bit Arm® Cortex®-M3, 72MHz, 20KB SRAM +- On-board sensors + - Accel/Gyro: ICM-42688-P\*2(Version1), BMI270\*2(Version2) + - Mag: IST8310 + - Barometer: DPS310(Version1),SPL06(Version2) + +### Interfaces + +- 15x PWM Servo Outputs +- 1x Dedicated S.Bus Input +- 3x TELEM Ports +- 1x SERIAL4 Port +- 2x GPS Ports +- 1x USB Port (TYPE-C) +- 3x I2C Bus Ports +- 2x CAN Ports +- 2x Power Input Ports + - ADC Power Input + - DroneCAN/UAVCAN Power Input +- 2x Dedicated Debug Port + - FMU Debug + - IO Debug + +## Purchase Channels + +Order from [X-MAV](https://www.x-mav.cn/). + +## Radio Control +A Radio Control (RC) system is required if you want to manually control your vehicle (PX4 does not require a radio system for autonomous flight modes). + +You will need to select a compatible transmitter/receiver and then bind them so that they communicate (read the instructions that come with your specific transmitter/receiver). + +SBUS receivers connect to the SBUS-IN input port. +CRSF receiver must be wired to a spare port (UART) on the Flight Controller. Then you can bind the transmitter and receiver together. + +## Serial Port Mapping + +| UART | Device | Port | +| ------ | ---------- | ------------- | +| USART1 | /dev/ttyS0 | GPS | +| USART2 | /dev/ttyS1 | GPS2 | +| USART3 | /dev/ttyS2 | TELEM1 | +| UART4 | /dev/ttyS3 | TELEM2 | +| UART7 | /dev/ttyS4 | TELEM3 | +| UART8 | /dev/ttyS5 | SERIAL4 | + +## PWM Output + +The AP-H743-R1 flight controller supports up to 15 PWM outputs. +The first 8 outputs (labelled M1 to M8) are controlled by a dedicated STM32F103 IOMCU controller. +The remaining 7 outputs (labelled A1 to A7) are the "auxiliary" outputs. +These are directly attached to the STM32H743 FMU controller . + +The 15 PWM outputs are: + +M1 - M8 are connected to the IOMCU. +A1 - A7 are connected to the FMU. + +M1 - M8 support DShot and are in 3 groups: + +- M1, M2 in group 1 +- M3, M4 in group 2 +- M5, M6, M7, M8 in group 3 + +The 7 FMU PWM outputs are in 3 groups: + +- A1 - A4 are in one group. +- A5, A6 are in a 2nd group. +- A7 is in a 3nd group. + +Channels within the same group need to use the same output rate. +If any channel in a group uses DShot then all channels in the group need to use DShot. + +### Electrical data + +- Voltage Ratings: + - Max input voltage: 5.4V + - USB Power Input: 4.75\~5.25V + - Servo Rail Input: 0\~9.9V + +## Battery Monitoring + +The board has connectors for 2 power monitors. + +- POWER1 -- ADC +- POWER2 -- DroneCAN + +The board is configure by default for a analog power monitor, and also has DroneCAN power monitor configured which is enabled. + +## Building Firmware + +To [build PX4](../dev_setup/building_px4.md) for this target, execute: + +```sh +make x-mav_ap-h743r1_default +``` + +## Pinouts and Size + +![AP-H743-R1 pinouts](../../assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-pinouts.png) + +![AP-H743-R1](../../assets/flight_controller/x-mav_ap-h743r1/ap-h743r1-size.png) + +## Supported Platforms / Airframes + +Any multirotor/airplane/rover or boat that can be controlled using normal RC servos or Futaba S-Bus servos. +The complete set of supported configurations can be found in the [Airframe Reference](../airframes/airframe_reference.md). + +## Debug Port + +### SWD +The [SWD interface](../debug/swd_debug.md) operate on the **FMU-DEBUG** port (`FMU-DEBUG`). + +The debug port (`FMU-DEBUG`) uses a [JST SM04B-GHS-TB](https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM04B-GHS-TB/807788) connector and has the following pinout: + +| Pin | Signal | Volt | +| ------- | -------------- | ----- | +| 1 (red) | 5V+ | +5V | +| 2 (blk) | FMU_SWDIO | +3.3V | +| 3 (blk) | FMU_SWCLK | +3.3V | +| 4 (blk) | GND | GND |