From ff8c4b918a81e36ee4e6910e0562c4fe312d9bf8 Mon Sep 17 00:00:00 2001 From: Vincello <58676585+holydust@users.noreply.github.com> Date: Wed, 30 Apr 2025 23:14:04 +0800 Subject: [PATCH] boards: new Corvon 743v1 board support --- boards/corvon/743v1/bootloader.px4board | 3 + boards/corvon/743v1/default.px4board | 85 ++++ .../743v1/extras/corvon_743v1_bootloader.bin | Bin 0 -> 41044 bytes boards/corvon/743v1/firmware.prototype | 13 + boards/corvon/743v1/init/rc.board_defaults | 24 + boards/corvon/743v1/init/rc.board_extras | 7 + boards/corvon/743v1/init/rc.board_sensors | 18 + .../743v1/nuttx-config/bootloader/defconfig | 85 ++++ .../corvon/743v1/nuttx-config/include/board.h | 426 ++++++++++++++++++ .../nuttx-config/include/board_dma_map.h | 36 ++ .../corvon/743v1/nuttx-config/nsh/defconfig | 245 ++++++++++ .../nuttx-config/scripts/bootloader_script.ld | 213 +++++++++ .../743v1/nuttx-config/scripts/script.ld | 228 ++++++++++ boards/corvon/743v1/src/CMakeLists.txt | 68 +++ boards/corvon/743v1/src/board_config.h | 197 ++++++++ boards/corvon/743v1/src/bootloader_main.c | 75 +++ boards/corvon/743v1/src/hw_config.h | 135 ++++++ boards/corvon/743v1/src/i2c.cpp | 39 ++ boards/corvon/743v1/src/init.c | 208 +++++++++ boards/corvon/743v1/src/led.c | 114 +++++ boards/corvon/743v1/src/sdio.c | 177 ++++++++ boards/corvon/743v1/src/spi.cpp | 47 ++ boards/corvon/743v1/src/timer_config.cpp | 56 +++ boards/corvon/743v1/src/usb.c | 78 ++++ 24 files changed, 2577 insertions(+) create mode 100644 boards/corvon/743v1/bootloader.px4board create mode 100644 boards/corvon/743v1/default.px4board create mode 100644 boards/corvon/743v1/extras/corvon_743v1_bootloader.bin create mode 100644 boards/corvon/743v1/firmware.prototype create mode 100644 boards/corvon/743v1/init/rc.board_defaults create mode 100644 boards/corvon/743v1/init/rc.board_extras create mode 100644 boards/corvon/743v1/init/rc.board_sensors create mode 100644 boards/corvon/743v1/nuttx-config/bootloader/defconfig create mode 100644 boards/corvon/743v1/nuttx-config/include/board.h create mode 100644 boards/corvon/743v1/nuttx-config/include/board_dma_map.h create mode 100644 boards/corvon/743v1/nuttx-config/nsh/defconfig create mode 100644 boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld create mode 100644 boards/corvon/743v1/nuttx-config/scripts/script.ld create mode 100644 boards/corvon/743v1/src/CMakeLists.txt create mode 100644 boards/corvon/743v1/src/board_config.h create mode 100644 boards/corvon/743v1/src/bootloader_main.c create mode 100644 boards/corvon/743v1/src/hw_config.h create mode 100644 boards/corvon/743v1/src/i2c.cpp create mode 100644 boards/corvon/743v1/src/init.c create mode 100644 boards/corvon/743v1/src/led.c create mode 100644 boards/corvon/743v1/src/sdio.c create mode 100644 boards/corvon/743v1/src/spi.cpp create mode 100644 boards/corvon/743v1/src/timer_config.cpp create mode 100644 boards/corvon/743v1/src/usb.c diff --git a/boards/corvon/743v1/bootloader.px4board b/boards/corvon/743v1/bootloader.px4board new file mode 100644 index 0000000000..19b6e662be --- /dev/null +++ b/boards/corvon/743v1/bootloader.px4board @@ -0,0 +1,3 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROMFSROOT="" diff --git a/boards/corvon/743v1/default.px4board b/boards/corvon/743v1/default.px4board new file mode 100644 index 0000000000..149bcaff21 --- /dev/null +++ b/boards/corvon/743v1/default.px4board @@ -0,0 +1,85 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_SERIAL_URT6="/dev/ttyS5" +CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS2" +CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS3" +CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS6" +CONFIG_BOARD_SERIAL_RC="/dev/ttyS4" +CONFIG_DRIVERS_ADC_BOARD_ADC=y +CONFIG_DRIVERS_BAROMETER_DPS310=y +CONFIG_DRIVERS_CDCACM_AUTOSTART=y +CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_AUAV=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ETS=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_MS4515=y +CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_BOSCH_BMI088=y +CONFIG_DRIVERS_IMU_BOSCH_BMI270=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_COMMON_TELEMETRY=y +CONFIG_DRIVERS_UAVCAN=y +CONFIG_BOARD_UAVCAN_INTERFACES=1 +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/corvon/743v1/extras/corvon_743v1_bootloader.bin b/boards/corvon/743v1/extras/corvon_743v1_bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..a9209278330a4ab0132e5db7161ac06841e6dce4 GIT binary patch literal 41044 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 AN&o-= literal 0 HcmV?d00001 diff --git a/boards/corvon/743v1/firmware.prototype b/boards/corvon/743v1/firmware.prototype new file mode 100644 index 0000000000..d4b0d6af34 --- /dev/null +++ b/boards/corvon/743v1/firmware.prototype @@ -0,0 +1,13 @@ +{ + "board_id": 1188, + "magic": "PX4FWv1", + "description": "Firmware for the CORVON743v1 board", + "image": "", + "build_time": 0, + "summary": "CORVON743v1", + "version": "0.1", + "image_size": 0, + "image_maxsize": 1835008, + "git_identity": "", + "board_revision": 0 +} diff --git a/boards/corvon/743v1/init/rc.board_defaults b/boards/corvon/743v1/init/rc.board_defaults new file mode 100644 index 0000000000..55b69959dc --- /dev/null +++ b/boards/corvon/743v1/init/rc.board_defaults @@ -0,0 +1,24 @@ +#!/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.2 +param set-default BAT1_V_EMPTY 3.2 + +param set-default SYS_HAS_MAG 1 +param set-default PWM_MAIN_TIM0 -4 +param set-default RC_INPUT_PROTO -1 + +param set-default IMU_GYRO_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/corvon/743v1/init/rc.board_extras b/boards/corvon/743v1/init/rc.board_extras new file mode 100644 index 0000000000..e7653077db --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/init/rc.board_sensors b/boards/corvon/743v1/init/rc.board_sensors new file mode 100644 index 0000000000..96273de2da --- /dev/null +++ b/boards/corvon/743v1/init/rc.board_sensors @@ -0,0 +1,18 @@ +#!/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 2 -R 0 start + +# Internal baro +dps310 -I start -a 118 + +ist8310 -I -R 2 start diff --git a/boards/corvon/743v1/nuttx-config/bootloader/defconfig b/boards/corvon/743v1/nuttx-config/bootloader/defconfig new file mode 100644 index 0000000000..533fa0f46f --- /dev/null +++ b/boards/corvon/743v1/nuttx-config/bootloader/defconfig @@ -0,0 +1,85 @@ +# +# 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/corvon/743v1/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="CORVON743v1" +CONFIG_CDCACM_RXBUFSIZE=600 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x3162 +CONFIG_CDCACM_VENDORSTR="CORVON" +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/corvon/743v1/nuttx-config/include/board.h b/boards/corvon/743v1/nuttx-config/include/board.h new file mode 100644 index 0000000000..0496de7c07 --- /dev/null +++ b/boards/corvon/743v1/nuttx-config/include/board.h @@ -0,0 +1,426 @@ +/************************************************************************************ + * 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_CORVON743V1_INCLUDE_BOARD_H +#define __NUTTX_CONFIG_CORVON743V1_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 CORVON743V1 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_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 */ + + +/* CAN + * + * CAN1 is routed to transceiver. + */ + +#define GPIO_CAN1_RX GPIO_CAN1_RX_2 /* PB8 */ +#define GPIO_CAN1_TX GPIO_CAN1_TX_2 /* PB9 */ + +/* SPI + * + + */ + +#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_2MHz)) + +//#define GPIO_SPI1_MISO GPIO_SPI1_MISO_1 /* PA6 */ +//#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_1 /* PA7 */ +//#define GPIO_SPI1_SCK ADJ_SLEW_RATE(GPIO_SPI1_SCK_1) /* PA5 */ + +#define GPIO_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 */ + + + +/* I2C + * + + * + */ + +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1 /* PB6 */ +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1 /* PB7 */ + +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN6) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN7) + +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_1 /* PB10 */ +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_1 /* PB11 */ + +#define GPIO_I2C2_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_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_CORVON743V1_INCLUDE_BOARD_H */ diff --git a/boards/corvon/743v1/nuttx-config/include/board_dma_map.h b/boards/corvon/743v1/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..ba3f15eb97 --- /dev/null +++ b/boards/corvon/743v1/nuttx-config/include/board_dma_map.h @@ -0,0 +1,36 @@ +/**************************************************************************** + * + * 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 /* DMA1:39 */ +#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* DMA1:40 */ diff --git a/boards/corvon/743v1/nuttx-config/nsh/defconfig b/boards/corvon/743v1/nuttx-config/nsh/defconfig new file mode 100644 index 0000000000..1a9a906e6c --- /dev/null +++ b/boards/corvon/743v1/nuttx-config/nsh/defconfig @@ -0,0 +1,245 @@ +# +# 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/corvon/743v1/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="CORVON743v1" +CONFIG_CDCACM_RXBUFSIZE=6000 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x1B8C +CONFIG_CDCACM_VENDORSTR="CORVON" +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_SPI2_DMA=y +CONFIG_STM32H7_SPI2_DMA_BUFFER=4096 +CONFIG_STM32H7_SPI_DMATHRESHOLD=8 +CONFIG_STM32H7_TIM1=y +CONFIG_STM32H7_TIM3=y +CONFIG_STM32H7_TIM4=y +CONFIG_STM32H7_TIM8=y +CONFIG_STM32H7_UART4=y +CONFIG_STM32H7_UART7=y +CONFIG_STM32H7_UART8=y +CONFIG_STM32H7_USART1=y +CONFIG_STM32H7_USART2=y +CONFIG_STM32H7_USART3=y +CONFIG_STM32H7_USART6=y +CONFIG_STM32H7_USART_BREAKS=y +CONFIG_STM32H7_USART_INVERT=y +CONFIG_STM32H7_USART_SINGLEWIRE=y +CONFIG_STM32H7_USART_SWAP=y +CONFIG_SYSTEM_CDCACM=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=24 +CONFIG_UART4_BAUD=57600 +CONFIG_UART4_RXBUFSIZE=600 +CONFIG_UART4_TXBUFSIZE=1500 +CONFIG_UART7_BAUD=57600 +CONFIG_UART7_RXBUFSIZE=600 +CONFIG_UART7_TXBUFSIZE=1500 +CONFIG_UART8_BAUD=57600 +CONFIG_UART8_RXBUFSIZE=600 +CONFIG_UART8_TXBUFSIZE=1500 +CONFIG_USART1_BAUD=57600 +CONFIG_USART1_RXBUFSIZE=600 +CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_USART2_BAUD=57600 +CONFIG_USART2_RXBUFSIZE=600 +CONFIG_USART2_TXBUFSIZE=1500 +CONFIG_USART3_BAUD=57600 +CONFIG_USART3_RXBUFSIZE=600 +CONFIG_USART3_TXBUFSIZE=1500 +CONFIG_USART6_BAUD=57600 +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_TXBUFSIZE=1500 +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 +CONFIG_WATCHDOG=y diff --git a/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld b/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld new file mode 100644 index 0000000000..fb877cc443 --- /dev/null +++ b/boards/corvon/743v1/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 Switch 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/corvon/743v1/nuttx-config/scripts/script.ld b/boards/corvon/743v1/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..1dc1a0ef97 --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/CMakeLists.txt b/boards/corvon/743v1/src/CMakeLists.txt new file mode 100644 index 0000000000..c47215375d --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/board_config.h b/boards/corvon/743v1/src/board_config.h new file mode 100644 index 0000000000..48ff3ff203 --- /dev/null +++ b/boards/corvon/743v1/src/board_config.h @@ -0,0 +1,197 @@ +/**************************************************************************** + * + * 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 /* PE5 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN5) +# define GPIO_nLED_GREEN /* PE6 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN6) +# 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 + + +/* 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/ttyS4" +#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT + +/* 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_CAN1_TX, \ + GPIO_CAN1_RX, \ + } + +#define BOARD_ENABLE_CONSOLE_BUFFER + +#define FLASH_BASED_PARAMS + +#define BOARD_NUM_IO_TIMERS 4 + + +__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/corvon/743v1/src/bootloader_main.c b/boards/corvon/743v1/src/bootloader_main.c new file mode 100644 index 0000000000..5670308a29 --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/hw_config.h b/boards/corvon/743v1/src/hw_config.h new file mode 100644 index 0000000000..6e63d9b9a7 --- /dev/null +++ b/boards/corvon/743v1/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 1188 +#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/corvon/743v1/src/i2c.cpp b/boards/corvon/743v1/src/i2c.cpp new file mode 100644 index 0000000000..1444ea1172 --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/init.c b/boards/corvon/743v1/src/init.c new file mode 100644 index 0000000000..c0e1f9776c --- /dev/null +++ b/boards/corvon/743v1/src/init.c @@ -0,0 +1,208 @@ +/**************************************************************************** + * + * 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))); + } + + /* + * On resets invoked from system (not boot) ensure we establish a low + * output state on PWM pins to disarm the ESC and prevent the reset from potentially + * spinning up the motors. + */ + if (status >= 0) { + up_mdelay(100); + } +} + +/************************************************************************************ + * Name: stm32_boardinitialize + * + * Description: + * All STM32 architectures must provide the following entry point. This entry point + * is called early in the initialization -- after all memory has been configured + * and mapped but before any devices have been initialized. + * + ************************************************************************************/ +__EXPORT void stm32_boardinitialize(void) +{ + /* Reset PWM first thing */ + board_on_reset(-1); + + /* configure LEDs */ + board_autoled_initialize(); + + /* configure pins */ + const uint32_t gpio[] = PX4_GPIO_INIT_LIST; + px4_gpio_init(gpio, arraySize(gpio)); + + /* configure SPI interfaces */ + stm32_spiinitialize(); + + /* configure USB interfaces */ + stm32_usbinitialize(); + +} + +/**************************************************************************** + * Name: board_app_initialize + * + * Description: + * Perform application specific initialization. This function is never + * called directly from application code, but only indirectly via the + * (non-standard) boardctl() interface using the command BOARDIOC_INIT. + * + * Input Parameters: + * arg - The boardctl() argument is passed to the board_app_initialize() + * implementation without modification. The argument has no + * meaning to NuttX; + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure to indicate the nature of the failure. + * + ****************************************************************************/ +__EXPORT int board_app_initialize(uintptr_t arg) +{ + /* Need hrt running before using the ADC */ + px4_platform_init(); + + /* configure the DMA allocator */ + if (board_dma_alloc_init() < 0) { + syslog(LOG_ERR, "[boot] DMA alloc FAILED\n"); + } + + /* initial LED state */ + drv_led_start(); + led_off(LED_RED); + led_off(LED_BLUE); + + if (board_hardfault_init(2, true) != 0) { + led_on(LED_BLUE); + } + +#ifdef CONFIG_MMCSD + int ret = stm32_sdio_initialize(); + + if (ret != OK) { + led_on(LED_BLUE); + return ret; + } + +#endif + +// TODO:internal flash store parameters +#if defined(FLASH_BASED_PARAMS) + static sector_descriptor_t params_sector_map[] = { + {15, 128 * 1024, 0x081E0000}, + {0, 0, 0}, + }; + + /* Initialize the flashfs layer to use heap allocated memory */ + int result = parameter_flashfs_init(params_sector_map, NULL, 0); + + if (result != OK) { + syslog(LOG_ERR, "[boot] FAILED to init params in FLASH %d\n", result); + led_on(LED_RED); + } + +#endif + + /* Configure the HW based on the manifest */ + px4_platform_configure(); + + return OK; +} diff --git a/boards/corvon/743v1/src/led.c b/boards/corvon/743v1/src/led.c new file mode 100644 index 0000000000..d7794392db --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/sdio.c b/boards/corvon/743v1/src/sdio.c new file mode 100644 index 0000000000..869d757756 --- /dev/null +++ b/boards/corvon/743v1/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/corvon/743v1/src/spi.cpp b/boards/corvon/743v1/src/spi.cpp new file mode 100644 index 0000000000..2e0916973e --- /dev/null +++ b/boards/corvon/743v1/src/spi.cpp @@ -0,0 +1,47 @@ +/**************************************************************************** + * + * 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}), + initSPIDevice(DRV_ACC_DEVTYPE_BMI088, SPI::CS{GPIO::PortD, GPIO::Pin4}), + initSPIDevice(DRV_IMU_DEVTYPE_BMI270, SPI::CS{GPIO::PortA, GPIO::Pin15}), + }), +}; + +static constexpr bool unused = validateSPIConfig(px4_spi_buses); diff --git a/boards/corvon/743v1/src/timer_config.cpp b/boards/corvon/743v1/src/timer_config.cpp new file mode 100644 index 0000000000..515a56928c --- /dev/null +++ b/boards/corvon/743v1/src/timer_config.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * 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}), +}; + +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::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/corvon/743v1/src/usb.c b/boards/corvon/743v1/src/usb.c new file mode 100644 index 0000000000..9591784866 --- /dev/null +++ b/boards/corvon/743v1/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); +}