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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 X)A#=FhWu{R^tGrg4>p#39QgkqC*?Zt 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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 X+RSF)^v?6zy=1y)f{zjWT#Wr6)^QT< literal 0 HcmV?d00001 diff --git a/boards/x-mav/ap-h743r1/firmware.prototype b/boards/x-mav/ap-h743r1/firmware.prototype new file mode 100644 index 0000000000..81aeb5622b --- /dev/null +++ b/boards/x-mav/ap-h743r1/firmware.prototype @@ -0,0 +1,13 @@ +{ + "board_id": 1203, + "magic": "PX4FWv1", + "description": "Firmware for the AP-H743r1 board", + "image": "", + "build_time": 0, + "summary": "AP-H743r1", + "version": "0.1", + "image_size": 0, + "image_maxsize": 1966080, + "git_identity": "", + "board_revision": 0 +} diff --git a/boards/x-mav/ap-h743r1/init/rc.board_defaults b/boards/x-mav/ap-h743r1/init/rc.board_defaults new file mode 100644 index 0000000000..af3cd672e1 --- /dev/null +++ b/boards/x-mav/ap-h743r1/init/rc.board_defaults @@ -0,0 +1,29 @@ +#!/bin/sh +# +# board specific defaults +#------------------------------------------------------------------------------ +param set-default BAT1_A_PER_V 17 +param set-default BAT1_N_CELLS 4 +param set-default BAT1_V_CHARGED 4.2 +param set-default BAT1_V_DIV 10.1 +param set-default BAT1_V_EMPTY 3.2 + +param set-default SYS_HAS_MAG 1 +param set-default PWM_MAIN_TIM0 -4 +param set-default RC_INPUT_PROTO -1 + +param set-default IMU_GYRO_RATEMAX 2000 +param set-default SYS_AUTOSTART 4001 +param set-default MC_PITCHRATE_K 0.4 +param set-default MC_ROLLRATE_K 0.35 +param set-default MC_YAWRATE_K 1.2 +param set-default MC_YAWRATE_MAX 360 +param set-default MAV_TYPE 2 +param set-default CA_AIRFRAME 0 +param set-default CA_ROTOR_COUNT 4 +param set-default CBRK_SUPPLY_CHK 894281 + +param set-default USB_MAV_MODE 5 + +# pwm voltage 3.3V/5V switch +pwm_voltage_apply start diff --git a/boards/x-mav/ap-h743r1/init/rc.board_extras b/boards/x-mav/ap-h743r1/init/rc.board_extras new file mode 100644 index 0000000000..cccb4ed416 --- /dev/null +++ b/boards/x-mav/ap-h743r1/init/rc.board_extras @@ -0,0 +1,4 @@ +#!/bin/sh +# +# board specific extras init +#------------------------------------------------------------------------------ diff --git a/boards/x-mav/ap-h743r1/init/rc.board_sensors b/boards/x-mav/ap-h743r1/init/rc.board_sensors new file mode 100644 index 0000000000..fbc41fa1cb --- /dev/null +++ b/boards/x-mav/ap-h743r1/init/rc.board_sensors @@ -0,0 +1,26 @@ +#!/bin/sh +# +# board specific sensors init +#------------------------------------------------------------------------------ + +board_adc start + +# IMU +if ! icm42688p -s -b 1 -R 4 start +then + bmi270 -s -b 1 -R 4 start +fi + +if ! icm42688p -s -b 4 -R 4 start +then + bmi270 -s -b 4 -R 4 start +fi + +# baro +if ! dps310 -I start -a 0x76 +then + spl06 -I start -a 0x76 +fi + +# internal mag +ist8310 -I -R 6 start diff --git a/boards/x-mav/ap-h743r1/nuttx-config/Kconfig b/boards/x-mav/ap-h743r1/nuttx-config/Kconfig new file mode 100644 index 0000000000..bb33d3cfda --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/Kconfig @@ -0,0 +1,17 @@ +# +# For a description of the syntax of this configuration file, +# see misc/tools/kconfig-language.txt. +# +config BOARD_HAS_PROBES + bool "Board provides GPIO or other Hardware for signaling to timing analyze." + default y + ---help--- + This board provides GPIO FMU-CH1-5, CAP1-6 as PROBE_1-11 to provide timing signals from selected drivers. + +config BOARD_USE_PROBES + bool "Enable the use the board provided FMU-CH1-5, CAP1-6 as PROBE_1-11" + default n + depends on BOARD_HAS_PROBES + + ---help--- + Select to use GPIO FMU-CH1-5, CAP1-6 to provide timing signals from selected drivers. diff --git a/boards/x-mav/ap-h743r1/nuttx-config/bootloader/defconfig b/boards/x-mav/ap-h743r1/nuttx-config/bootloader/defconfig new file mode 100644 index 0000000000..b4128c5932 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/bootloader/defconfig @@ -0,0 +1,90 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DEV_CONSOLE is not set +# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set +# CONFIG_SPI_EXCHANGE is not set +# CONFIG_STM32H7_SYSCFG 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_ARMV7M_BASEPRI_WAR=y +CONFIG_ARMV7M_ICACHE=y +CONFIG_ARMV7M_MEMCPY=y +CONFIG_ARMV7M_USEBASEPRI=y +CONFIG_BOARDCTL=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_ASSERT_RESET_VALUE=0 +CONFIG_BOARD_INITTHREAD_PRIORITY=254 +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_RESET_ON_ASSERT=2 +CONFIG_CDCACM=y +CONFIG_CDCACM_IFLOWCONTROL=y +CONFIG_CDCACM_PRODUCTID=0x0036 +CONFIG_CDCACM_PRODUCTSTR="X-MAV AP-H743r1 Bootloader" +CONFIG_CDCACM_RXBUFSIZE=600 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x1B8C +CONFIG_CDCACM_VENDORSTR="X-MAV" +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEBUG_TCBINFO=y +CONFIG_DEFAULT_SMALL=y +CONFIG_EXPERIMENTAL=y +CONFIG_FDCLONE_DISABLE=y +CONFIG_FDCLONE_STDIO=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_IDLETHREAD_STACKSIZE=750 +CONFIG_INIT_ENTRYPOINT="bootloader_main" +CONFIG_INIT_STACKSIZE=3194 +CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_LIBC_LONG_LONG=y +CONFIG_LIBC_STRERROR=y +CONFIG_MEMSET_64BIT=y +CONFIG_MEMSET_OPTSPEED=y +CONFIG_PREALLOC_TIMERS=50 +CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_RAM_SIZE=245760 +CONFIG_RAM_START=0x20010000 +CONFIG_RAW_BINARY=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_SPI=y +CONFIG_STACK_COLORATION=y +CONFIG_START_DAY=30 +CONFIG_START_MONTH=11 +CONFIG_STDIO_BUFFER_SIZE=32 +CONFIG_STM32H7_BKPSRAM=y +CONFIG_STM32H7_DMA1=y +CONFIG_STM32H7_OTGFS=y +CONFIG_STM32H7_PROGMEM=y +CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32H7_TIM1=y +CONFIG_STM32H7_USART6=y +CONFIG_SYSTEMTICK_HOOK=y +CONFIG_SYSTEM_CDCACM=y +CONFIG_TASK_NAME_SIZE=24 +CONFIG_TTY_SIGINT=y +CONFIG_TTY_SIGINT_CHAR=0x03 +CONFIG_TTY_SIGTSTP=y +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_TXBUFSIZE=300 +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 diff --git a/boards/x-mav/ap-h743r1/nuttx-config/include/board.h b/boards/x-mav/ap-h743r1/nuttx-config/include/board.h new file mode 100644 index 0000000000..e6ff9ec362 --- /dev/null +++ b/boards/x-mav/ap-h743r1/nuttx-config/include/board.h @@ -0,0 +1,442 @@ +/************************************************************************************ + * nuttx-configs/px4_fmu-v6u/include/board.h + * + * Copyright (C) 2016-2019 Gregory Nutt. All rights reserved. + * Authors: David Sidrane + * + * 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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Ĺ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

Nzgqyo4?S^vNyRAc3Xwuwih{f;@zY_g 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 lf&axB_?I01ZzTs<&^&hLr3I>j1f_*67w-t{< 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 + +:::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 |