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 9a0dc7a14b97..5e45397e31b6 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 77867de871bd..f549e4c8cecc 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 000000000000..19b6e662be69 --- /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 000000000000..330e0fa594df --- /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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 b?BAy>HQUT)WB1ne>bW#JXQF!15sdvemLn8Z 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 000000000000..3f1a41def855 --- /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 000000000000..2115bc8848ce --- /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 000000000000..e7653077db5f --- /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 000000000000..011c223ef7e7 --- /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 000000000000..b2c2fc88cadd --- /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 000000000000..433aa04a543c --- /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 000000000000..c56138f0dcfb --- /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 000000000000..5a1f555257f8 --- /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 000000000000..511ef2624248 --- /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 000000000000..1dc1a0ef97eb --- /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 000000000000..c47215375d08 --- /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 000000000000..97f36585ad8d --- /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 000000000000..5670308a29d8 --- /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 000000000000..a74346eddbdb --- /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 000000000000..1444ea117204 --- /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 000000000000..43f86f902d24 --- /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 000000000000..d7794392dbb3 --- /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 000000000000..869d757756a0 --- /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 000000000000..d8876bc186af --- /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 000000000000..be33feed1cd8 --- /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 000000000000..9591784866a6 --- /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); +}