From 8d4663ed5ae074d51b1eb46cf6254b0de2cab613 Mon Sep 17 00:00:00 2001 From: Minderring <1701213518@sz.edu.pku.cn> Date: Mon, 23 Dec 2024 17:25:03 +0800 Subject: [PATCH] boards: add micoair743-v2 config files to PX4-Autopilot --- .vscode/cmake-variants.yaml | 15 + Makefile | 1 + boards/micoair/h743-v2/bootloader.px4board | 3 + boards/micoair/h743-v2/default.px4board | 83 ++++ .../extras/micoair_h743-v2_bootloader.bin | Bin 0 -> 41028 bytes boards/micoair/h743-v2/firmware.prototype | 13 + boards/micoair/h743-v2/init/rc.board_defaults | 27 ++ boards/micoair/h743-v2/init/rc.board_extras | 7 + boards/micoair/h743-v2/init/rc.board_sensors | 19 + .../h743-v2/nuttx-config/bootloader/defconfig | 86 ++++ .../h743-v2/nuttx-config/include/board.h | 418 ++++++++++++++++++ .../nuttx-config/include/board_dma_map.h | 38 ++ .../h743-v2/nuttx-config/nsh/defconfig | 253 +++++++++++ .../nuttx-config/scripts/bootloader_script.ld | 213 +++++++++ .../h743-v2/nuttx-config/scripts/script.ld | 228 ++++++++++ boards/micoair/h743-v2/src/CMakeLists.txt | 68 +++ boards/micoair/h743-v2/src/board_config.h | 201 +++++++++ boards/micoair/h743-v2/src/bootloader_main.c | 75 ++++ boards/micoair/h743-v2/src/hw_config.h | 135 ++++++ boards/micoair/h743-v2/src/i2c.cpp | 39 ++ boards/micoair/h743-v2/src/init.c | 203 +++++++++ boards/micoair/h743-v2/src/led.c | 114 +++++ boards/micoair/h743-v2/src/sdio.c | 177 ++++++++ boards/micoair/h743-v2/src/spi.cpp | 49 ++ boards/micoair/h743-v2/src/timer_config.cpp | 57 +++ boards/micoair/h743-v2/src/usb.c | 78 ++++ 26 files changed, 2600 insertions(+) create mode 100644 boards/micoair/h743-v2/bootloader.px4board create mode 100644 boards/micoair/h743-v2/default.px4board create mode 100755 boards/micoair/h743-v2/extras/micoair_h743-v2_bootloader.bin create mode 100644 boards/micoair/h743-v2/firmware.prototype create mode 100644 boards/micoair/h743-v2/init/rc.board_defaults create mode 100644 boards/micoair/h743-v2/init/rc.board_extras create mode 100644 boards/micoair/h743-v2/init/rc.board_sensors create mode 100644 boards/micoair/h743-v2/nuttx-config/bootloader/defconfig create mode 100644 boards/micoair/h743-v2/nuttx-config/include/board.h create mode 100644 boards/micoair/h743-v2/nuttx-config/include/board_dma_map.h create mode 100644 boards/micoair/h743-v2/nuttx-config/nsh/defconfig create mode 100644 boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld create mode 100644 boards/micoair/h743-v2/nuttx-config/scripts/script.ld create mode 100644 boards/micoair/h743-v2/src/CMakeLists.txt create mode 100644 boards/micoair/h743-v2/src/board_config.h create mode 100644 boards/micoair/h743-v2/src/bootloader_main.c create mode 100644 boards/micoair/h743-v2/src/hw_config.h create mode 100644 boards/micoair/h743-v2/src/i2c.cpp create mode 100644 boards/micoair/h743-v2/src/init.c create mode 100644 boards/micoair/h743-v2/src/led.c create mode 100644 boards/micoair/h743-v2/src/sdio.c create mode 100644 boards/micoair/h743-v2/src/spi.cpp create mode 100644 boards/micoair/h743-v2/src/timer_config.cpp create mode 100644 boards/micoair/h743-v2/src/usb.c diff --git a/.vscode/cmake-variants.yaml b/.vscode/cmake-variants.yaml index 9a0dc7a14b..5e45397e31 100644 --- a/.vscode/cmake-variants.yaml +++ b/.vscode/cmake-variants.yaml @@ -301,6 +301,11 @@ CONFIG: buildType: MiniSizeRel settings: CONFIG: matek_gnss-m9n-f4_default + micoair_h743_bootloader: + short: micoair_h743_bootloader + buildType: MinSizeRel + settings: + CONFIG: micoair_h743_bootloader micoair_h743_default: short: micoair_h743 buildType: MinSizeRel @@ -316,6 +321,16 @@ CONFIG: buildType: MinSizeRel settings: CONFIG: micoair_h743-aio_default + micoair_h743-v2_bootloader: + short: micoair_h743-v2_bootloader + buildType: MinSizeRel + settings: + CONFIG: micoair_h743-v2_bootloader + micoair_h743-v2_default: + short: micoair_h743-v2 + buildType: MinSizeRel + settings: + CONFIG: micoair_h743-v2_default modalai_fc-v1_default: short: modalai_fc-v1 buildType: MinSizeRel diff --git a/Makefile b/Makefile index 77867de871..f549e4c8ce 100644 --- a/Makefile +++ b/Makefile @@ -344,6 +344,7 @@ bootloaders_update: \ matek_h743-slim_bootloader \ micoair_h743_bootloader \ micoair_h743-aio_bootloader \ + micoair_h743-v2_bootloader \ modalai_fc-v2_bootloader \ mro_ctrl-zero-classic_bootloader \ mro_ctrl-zero-h7_bootloader \ diff --git a/boards/micoair/h743-v2/bootloader.px4board b/boards/micoair/h743-v2/bootloader.px4board new file mode 100644 index 0000000000..19b6e662be --- /dev/null +++ b/boards/micoair/h743-v2/bootloader.px4board @@ -0,0 +1,3 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROMFSROOT="" diff --git a/boards/micoair/h743-v2/default.px4board b/boards/micoair/h743-v2/default.px4board new file mode 100644 index 0000000000..330e0fa594 --- /dev/null +++ b/boards/micoair/h743-v2/default.px4board @@ -0,0 +1,83 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_SERIAL_URT6="/dev/ttyS6" +CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS2" +CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS3" +CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS4" +CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS7" +CONFIG_BOARD_SERIAL_RC="/dev/ttyS5" +CONFIG_DRIVERS_ADC_BOARD_ADC=y +CONFIG_DRIVERS_BAROMETER_GOERTEK_SPL06=y +CONFIG_DRIVERS_CDCACM_AUTOSTART=y +CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_BOSCH_BMI088=y +CONFIG_DRIVERS_IMU_BOSCH_BMI270=y +CONFIG_COMMON_INS=y +CONFIG_COMMON_MAGNETOMETER=y +CONFIG_DRIVERS_PPS_CAPTURE=y +CONFIG_DRIVERS_PWM_OUT=y +CONFIG_COMMON_RC=y +CONFIG_DRIVERS_RC_INPUT=y +CONFIG_DRIVERS_TAP_ESC=y +CONFIG_DRIVERS_UAVCAN=y +CONFIG_BOARD_UAVCAN_INTERFACES=1 +CONFIG_COMMON_TELEMETRY=y +CONFIG_DRIVERS_TONE_ALARM=y +CONFIG_MODULES_BATTERY_STATUS=y +CONFIG_MODULES_COMMANDER=y +CONFIG_MODULES_CONTROL_ALLOCATOR=y +CONFIG_MODULES_DATAMAN=y +CONFIG_MODULES_EKF2=y +CONFIG_MODULES_ESC_BATTERY=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_POS_CONTROL=y +CONFIG_MODULES_FW_RATE_CONTROL=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_PAYLOAD_DELIVERER=y +CONFIG_MODULES_RC_UPDATE=y +CONFIG_MODULES_SENSORS=y +CONFIG_MODULES_TEMPERATURE_COMPENSATION=y +CONFIG_MODULES_UXRCE_DDS_CLIENT=y +CONFIG_MODULES_VTOL_ATT_CONTROL=y +CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y +CONFIG_SYSTEMCMDS_DMESG=y +CONFIG_SYSTEMCMDS_DUMPFILE=y +CONFIG_SYSTEMCMDS_FAILURE=y +CONFIG_SYSTEMCMDS_GPIO=y +CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y +CONFIG_SYSTEMCMDS_I2CDETECT=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 diff --git a/boards/micoair/h743-v2/extras/micoair_h743-v2_bootloader.bin b/boards/micoair/h743-v2/extras/micoair_h743-v2_bootloader.bin new file mode 100755 index 0000000000000000000000000000000000000000..678f20842089460e191003ffa6ce0d938f6fb7fc GIT binary patch literal 41028 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 literal 0 HcmV?d00001 diff --git a/boards/micoair/h743-v2/firmware.prototype b/boards/micoair/h743-v2/firmware.prototype new file mode 100644 index 0000000000..3f1a41def8 --- /dev/null +++ b/boards/micoair/h743-v2/firmware.prototype @@ -0,0 +1,13 @@ +{ + "board_id": 1179, + "magic": "PX4FWv1", + "description": "Firmware for the MicoAir743v2 board", + "image": "", + "build_time": 0, + "summary": "MicoAir743v2", + "version": "0.1", + "image_size": 0, + "image_maxsize": 1835008, + "git_identity": "", + "board_revision": 0 +} diff --git a/boards/micoair/h743-v2/init/rc.board_defaults b/boards/micoair/h743-v2/init/rc.board_defaults new file mode 100644 index 0000000000..2115bc8848 --- /dev/null +++ b/boards/micoair/h743-v2/init/rc.board_defaults @@ -0,0 +1,27 @@ +#!/bin/sh +# +# board specific defaults +#------------------------------------------------------------------------------ +param set-default BAT1_A_PER_V 40 +param set-default BAT1_N_CELLS 4 +param set-default BAT1_V_CHARGED 4.2 +param set-default BAT1_V_DIV 21.12 +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 MAV_2_CONFIG 104 +param set-default SER_TEL4_BAUD 115200 + +param set-default IMU_GYRO_CUTOFF 80 +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 diff --git a/boards/micoair/h743-v2/init/rc.board_extras b/boards/micoair/h743-v2/init/rc.board_extras new file mode 100644 index 0000000000..e7653077db --- /dev/null +++ b/boards/micoair/h743-v2/init/rc.board_extras @@ -0,0 +1,7 @@ +#!/bin/sh +# +# board specific extras init +#------------------------------------------------------------------------------ + +# enable onboard OSD chip +# atxxxx start -s diff --git a/boards/micoair/h743-v2/init/rc.board_sensors b/boards/micoair/h743-v2/init/rc.board_sensors new file mode 100644 index 0000000000..011c223ef7 --- /dev/null +++ b/boards/micoair/h743-v2/init/rc.board_sensors @@ -0,0 +1,19 @@ +#!/bin/sh +# +# board specific sensors init +#------------------------------------------------------------------------------ + +board_adc start + +# # Internal SPI bus BMI088 accel/gyro +bmi088 -s -b 2 -A -R 6 start +bmi088 -s -b 2 -G -R 6 start + +# # Internal SPI bus BMI270 accel/gyro +bmi270 -s -b 3 -R 0 start + +# Internal baro +spl06 -I -a 0x77 start + +# External mag +qmc5883l -I -a 0x0D -R 4 start diff --git a/boards/micoair/h743-v2/nuttx-config/bootloader/defconfig b/boards/micoair/h743-v2/nuttx-config/bootloader/defconfig new file mode 100644 index 0000000000..b2c2fc88ca --- /dev/null +++ b/boards/micoair/h743-v2/nuttx-config/bootloader/defconfig @@ -0,0 +1,86 @@ +# +# 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/micoair/h743-v2/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=0x004b +CONFIG_CDCACM_PRODUCTSTR="MicoAir743v2" +CONFIG_CDCACM_RXBUFSIZE=6000 +CONFIG_CDCACM_TXBUFSIZE=12000 +#TODO:ally for VENDOR ID in the future +CONFIG_CDCACM_VENDORID=0x3162 +CONFIG_CDCACM_VENDORSTR="MicoAir" +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_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_TIM1=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_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 diff --git a/boards/micoair/h743-v2/nuttx-config/include/board.h b/boards/micoair/h743-v2/nuttx-config/include/board.h new file mode 100644 index 0000000000..433aa04a54 --- /dev/null +++ b/boards/micoair/h743-v2/nuttx-config/include/board.h @@ -0,0 +1,418 @@ +/************************************************************************************ + * 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_MICOAIR743V2_INCLUDE_BOARD_H +#define __NUTTX_CONFIG_MICOAIR743V2_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 MicoAir743 board provides the following clock sources: + * + * X1: 8 MHz crystal for HSE + * + * So we have these clock source available within the STM32 + * + * HSI: 64 MHz RC factory-trimmed + * HSE: 8 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 = 8,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 480kHz, freq = PLL1Q/(2*div) div = PLL1Q/(2*freq) */ + +#define STM32_SDMMC_INIT_CLKDIV (300 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) + +/* 20 MHz Max for now - more reliable on some boards than 25 MHz + * 20 MHz = PLL1Q/(2*div), div = PLL1Q/(2*freq), div = 6 = 240 / 40 + */ + +#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) +# define STM32_SDMMC_MMCXFR_CLKDIV (6 << 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 (6 << 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_1 /* PA3 */ +#define GPIO_USART2_TX GPIO_USART2_TX_1 /* PA2 */ + +#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_2 /* PA1 */ +#define GPIO_UART4_TX GPIO_UART4_TX_2 /* PA0 */ + +#define GPIO_UART5_RX GPIO_UART5_RX_2 /* PB5 */ +#define GPIO_UART5_TX GPIO_UART5_TX_2 /* PB6 */ + +#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_SPI2_MISO GPIO_SPI2_MISO_2 /* PC2 */ +#define GPIO_SPI2_MOSI GPIO_SPI2_MOSI_3 /* PC3 */ +#define GPIO_SPI2_SCK ADJ_SLEW_RATE(GPIO_SPI2_SCK_5) /* PD3 */ + +#define GPIO_SPI3_MISO GPIO_SPI3_MISO_1 /* PB4 */ +#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_1 /* PD6 */ +#define GPIO_SPI3_SCK ADJ_SLEW_RATE(GPIO_SPI3_SCK_1) /* PB3 */ + +/* I2C + * + + * + */ + +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_2 /* PB8 */ +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_2 /* PB9 */ + +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN9) + +#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_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN10) +#define GPIO_I2C2_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN11) + +# define PROBE_INIT(mask) +# define PROBE(n,s) +# define PROBE_MARK(n) + +#endif /*__NUTTX_CONFIG_MICOAIR743V2_INCLUDE_BOARD_H */ diff --git a/boards/micoair/h743-v2/nuttx-config/include/board_dma_map.h b/boards/micoair/h743-v2/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..c56138f0dc --- /dev/null +++ b/boards/micoair/h743-v2/nuttx-config/include/board_dma_map.h @@ -0,0 +1,38 @@ +/**************************************************************************** + * + * 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 +#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 +#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 +#define DMAMAP_SPI3_RX DMAMAP_DMA12_SPI3RX_0 +#define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_0 diff --git a/boards/micoair/h743-v2/nuttx-config/nsh/defconfig b/boards/micoair/h743-v2/nuttx-config/nsh/defconfig new file mode 100644 index 0000000000..5a1f555257 --- /dev/null +++ b/boards/micoair/h743-v2/nuttx-config/nsh/defconfig @@ -0,0 +1,253 @@ +# +# 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_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/micoair/h743-v2/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_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="MicoAir743v2" +CONFIG_CDCACM_RXBUFSIZE=6000 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x1B8C +CONFIG_CDCACM_VENDORSTR="MicoAir" +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_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_RAM_SIZE=245760 +CONFIG_RAM_START=0x20010000 +CONFIG_RAW_BINARY=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_SDMMC1_SDIO_PULLUP=y +CONFIG_SEM_PREALLOCHOLDERS=32 +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_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_I2C1=y +CONFIG_STM32H7_I2C2=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_SDMMC1=y +CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y +CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32H7_SPI2=y +CONFIG_STM32H7_SPI3=y +CONFIG_STM32H7_SPI2_DMA=y +CONFIG_STM32H7_SPI2_DMA_BUFFER=2048 +CONFIG_STM32H7_SPI3_DMA=y +CONFIG_STM32H7_SPI3_DMA_BUFFER=2048 +CONFIG_STM32H7_SPI_DMATHRESHOLD=8 +CONFIG_STM32H7_TIM1=y +CONFIG_STM32H7_TIM3=y +CONFIG_STM32H7_TIM4=y +CONFIG_STM32H7_TIM8=y +CONFIG_STM32H7_TIM15=y +CONFIG_STM32H7_UART4=y +CONFIG_STM32H7_UART5=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=115200 +CONFIG_UART4_RXBUFSIZE=600 +CONFIG_UART4_TXBUFSIZE=800 +CONFIG_UART5_BAUD=115200 +CONFIG_UART5_RXBUFSIZE=600 +CONFIG_UART5_TXBUFSIZE=800 +CONFIG_UART7_BAUD=115200 +CONFIG_UART7_RXBUFSIZE=600 +CONFIG_UART7_TXBUFSIZE=800 +CONFIG_UART8_BAUD=115200 +CONFIG_UART8_RXBUFSIZE=600 +CONFIG_UART8_TXBUFSIZE=800 +CONFIG_USART1_BAUD=115200 +CONFIG_USART1_RXBUFSIZE=1200 +CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_USART2_BAUD=115200 +CONFIG_USART2_RXBUFSIZE=600 +CONFIG_USART2_TXBUFSIZE=800 +CONFIG_USART3_BAUD=115200 +CONFIG_USART3_RXBUFSIZE=600 +CONFIG_USART3_TXBUFSIZE=800 +CONFIG_USART6_BAUD=57600 +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_TXBUFSIZE=800 +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 +CONFIG_WATCHDOG=y diff --git a/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld new file mode 100644 index 0000000000..511ef26242 --- /dev/null +++ b/boards/micoair/h743-v2/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 Durandal-v1 uses an STM32H743II 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 STM32H743II, 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 Durandal has a Swtich on board, the BOOT0 pin is at ground so by default, + * the STM32 will boot to address 0x0800:0000 in FLASH unless the swiutch is + * drepresed, then the boot will be from 0x1FF0:0000 + * + * The STM32H743ZI 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/micoair/h743-v2/nuttx-config/scripts/script.ld b/boards/micoair/h743-v2/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..1dc1a0ef97 --- /dev/null +++ b/boards/micoair/h743-v2/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 STM32H743II 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 STM32H743II, 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 switch 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 STM32H743ZI 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 = 1792K + + 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/micoair/h743-v2/src/CMakeLists.txt b/boards/micoair/h743-v2/src/CMakeLists.txt new file mode 100644 index 0000000000..c47215375d --- /dev/null +++ b/boards/micoair/h743-v2/src/CMakeLists.txt @@ -0,0 +1,68 @@ +############################################################################ +# +# 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 + ) + 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/micoair/h743-v2/src/board_config.h b/boards/micoair/h743-v2/src/board_config.h new file mode 100644 index 0000000000..97f36585ad --- /dev/null +++ b/boards/micoair/h743-v2/src/board_config.h @@ -0,0 +1,201 @@ +/**************************************************************************** + * + * 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 + ****************************************************************************************************/ + +// #define FLASH_BASED_PARAMS + + +/* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ + +# define GPIO_nLED_RED /* PE3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) +# define GPIO_nLED_GREEN /* PE2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN2) +# define GPIO_nLED_BLUE /* PE4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN4) + +# 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 ADC1_CH(n) (n) + +/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ +#define PX4_ADC_GPIO \ + /* PC0 */ GPIO_ADC123_INP10, \ + /* PC1 */ GPIO_ADC123_INP11 + + +/* Define Channel numbers must match above GPIO pin IN(n)*/ +#define ADC_BATTERY_VOLTAGE_CHANNEL /* PC0 */ ADC1_CH(10) +#define ADC_BATTERY_CURRENT_CHANNEL /* PC1 */ ADC1_CH(11) + + +#define ADC_CHANNELS \ + ((1 << ADC_BATTERY_VOLTAGE_CHANNEL) | \ + (1 << ADC_BATTERY_CURRENT_CHANNEL)) + + +/* Define Battery 1 Voltage Divider and A per V + */ + +// #define BOARD_BATTERY1_V_DIV (11.0f) /* measured with the provided PM board */ +// #define BOARD_BATTERY1_A_PER_V (40.0f) +// #define BOARD_BATTERY2_V_DIV (11.0f) /* measured with the provided PM board */ + + +/* PWM + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 10 +#define DIRECT_INPUT_TIMER_CHANNELS 10 + +#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS + +#define GPIO_TONE_ALARM_IDLE /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN15) +#define GPIO_TONE_ALARM_GPIO /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN15) + +/* USB OTG FS + * + * PA8 OTG_FS_VBUS VBUS sensing + */ + +#define GPIO_OTGFS_VBUS /* PA8 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTA|GPIO_PIN8) + + +/* High-resolution timer */ +#define HRT_TIMER 2 /* use timer8 for the HRT */ +#define HRT_TIMER_CHANNEL 1 /* use capture/compare channel 3 */ + + +/* RC Serial port */ +#define RC_SERIAL_PORT "/dev/ttyS5" +#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT + +#define GPIO_I2C2_DRDY1_SPL06 /* PD0 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTD|GPIO_PIN0) + + +/* SD Card */ +#define SDIO_SLOTNO 0 /* Only one slot */ +#define SDIO_MINOR 0 + +/* 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 { \ + PX4_ADC_GPIO, \ + GPIO_TONE_ALARM_IDLE, \ + } + +#define BOARD_ENABLE_CONSOLE_BUFFER + +#define FLASH_BASED_PARAMS + +#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/micoair/h743-v2/src/bootloader_main.c b/boards/micoair/h743-v2/src/bootloader_main.c new file mode 100644 index 0000000000..5670308a29 --- /dev/null +++ b/boards/micoair/h743-v2/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/micoair/h743-v2/src/hw_config.h b/boards/micoair/h743-v2/src/hw_config.h new file mode 100644 index 0000000000..a74346eddb --- /dev/null +++ b/boards/micoair/h743-v2/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 1 +#define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" +#define BOOT_DELAY_ADDRESS 0x000001a0 +#define BOARD_TYPE 1179 +#define BOARD_FLASH_SECTORS (14) +#define BOARD_FLASH_SIZE (16 * 128 * 1024) +#define APP_RESERVATION_SIZE (1 * 128 * 1024) + +#define OSC_FREQ 8 + +#define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE +#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_GREEN // GREEN +#define BOARD_LED_ON 0 +#define BOARD_LED_OFF 1 + +#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/micoair/h743-v2/src/i2c.cpp b/boards/micoair/h743-v2/src/i2c.cpp new file mode 100644 index 0000000000..1444ea1172 --- /dev/null +++ b/boards/micoair/h743-v2/src/i2c.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** + * + * 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] = { + initI2CBusExternal(1), + initI2CBusInternal(2), +}; diff --git a/boards/micoair/h743-v2/src/init.c b/boards/micoair/h743-v2/src/init.c new file mode 100644 index 0000000000..43f86f902d --- /dev/null +++ b/boards/micoair/h743-v2/src/init.c @@ -0,0 +1,203 @@ +/**************************************************************************** + * + * 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 + +# 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))); + } + + if (status >= 0) { + up_mdelay(6); + } +} + +/************************************************************************************ + * 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/micoair/h743-v2/src/led.c b/boards/micoair/h743-v2/src/led.c new file mode 100644 index 0000000000..d7794392db --- /dev/null +++ b/boards/micoair/h743-v2/src/led.c @@ -0,0 +1,114 @@ +/**************************************************************************** + * + * 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/micoair/h743-v2/src/sdio.c b/boards/micoair/h743-v2/src/sdio.c new file mode 100644 index 0000000000..869d757756 --- /dev/null +++ b/boards/micoair/h743-v2/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/micoair/h743-v2/src/spi.cpp b/boards/micoair/h743-v2/src/spi.cpp new file mode 100644 index 0000000000..d8876bc186 --- /dev/null +++ b/boards/micoair/h743-v2/src/spi.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * 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::SPI2, { + initSPIDevice(DRV_GYR_DEVTYPE_BMI088, SPI::CS{GPIO::PortD, GPIO::Pin5}, SPI::DRDY{GPIO::PortC, GPIO::Pin15}), + initSPIDevice(DRV_ACC_DEVTYPE_BMI088, SPI::CS{GPIO::PortD, GPIO::Pin4}, SPI::DRDY{GPIO::PortC, GPIO::Pin14}), + }), + initSPIBus(SPI::Bus::SPI3, { + initSPIDevice(DRV_IMU_DEVTYPE_BMI270, SPI::CS{GPIO::PortA, GPIO::Pin15}, SPI::DRDY{GPIO::PortB, GPIO::Pin7}), + }), +}; + +static constexpr bool unused = validateSPIConfig(px4_spi_buses); diff --git a/boards/micoair/h743-v2/src/timer_config.cpp b/boards/micoair/h743-v2/src/timer_config.cpp new file mode 100644 index 0000000000..be33feed1c --- /dev/null +++ b/boards/micoair/h743-v2/src/timer_config.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** + * + * 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::Timer3, DMA{DMA::Index1}), + initIOTimer(Timer::Timer4, DMA{DMA::Index1}), + initIOTimer(Timer::Timer15), +}; + +constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), + 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::Timer4, Timer::Channel1}, {GPIO::PortD, GPIO::Pin12}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel2}, {GPIO::PortD, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer15, Timer::Channel1}, {GPIO::PortE, GPIO::Pin5}), + initIOTimerChannel(io_timers, {Timer::Timer15, Timer::Channel2}, {GPIO::PortE, GPIO::Pin6}), +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/micoair/h743-v2/src/usb.c b/boards/micoair/h743-v2/src/usb.c new file mode 100644 index 0000000000..9591784866 --- /dev/null +++ b/boards/micoair/h743-v2/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); +}