From 8cb1c31f46775b0994f76e1849978fd0d760dc67 Mon Sep 17 00:00:00 2001 From: Hubert <1701213518@sz.pku.edu.cn> Date: Wed, 5 Nov 2025 00:16:38 +0800 Subject: [PATCH] boards: add new board micoair743-lite (#25777) Authored-by: Minderring <1701213518@sz.edu.pku.cn> Manufacturer supported board. --- .vscode/cmake-variants.yaml | 10 + Makefile | 1 + boards/micoair/h743-lite/bootloader.px4board | 3 + boards/micoair/h743-lite/default.px4board | 108 +++++ .../extras/micoair_h743-lite_bootloader.bin | Bin 0 -> 41032 bytes boards/micoair/h743-lite/firmware.prototype | 13 + .../micoair/h743-lite/init/rc.board_defaults | 28 ++ boards/micoair/h743-lite/init/rc.board_extras | 7 + .../micoair/h743-lite/init/rc.board_sensors | 13 + .../nuttx-config/bootloader/defconfig | 85 ++++ .../h743-lite/nuttx-config/include/board.h | 414 ++++++++++++++++++ .../nuttx-config/include/board_dma_map.h | 36 ++ .../h743-lite/nuttx-config/nsh/defconfig | 244 +++++++++++ .../nuttx-config/scripts/bootloader_script.ld | 213 +++++++++ .../h743-lite/nuttx-config/scripts/script.ld | 228 ++++++++++ boards/micoair/h743-lite/src/CMakeLists.txt | 68 +++ boards/micoair/h743-lite/src/board_config.h | 199 +++++++++ .../micoair/h743-lite/src/bootloader_main.c | 75 ++++ boards/micoair/h743-lite/src/hw_config.h | 135 ++++++ boards/micoair/h743-lite/src/i2c.cpp | 39 ++ boards/micoair/h743-lite/src/init.c | 208 +++++++++ boards/micoair/h743-lite/src/led.c | 114 +++++ boards/micoair/h743-lite/src/sdio.c | 177 ++++++++ boards/micoair/h743-lite/src/spi.cpp | 45 ++ boards/micoair/h743-lite/src/timer_config.cpp | 63 +++ boards/micoair/h743-lite/src/usb.c | 78 ++++ 26 files changed, 2604 insertions(+) create mode 100644 boards/micoair/h743-lite/bootloader.px4board create mode 100644 boards/micoair/h743-lite/default.px4board create mode 100755 boards/micoair/h743-lite/extras/micoair_h743-lite_bootloader.bin create mode 100644 boards/micoair/h743-lite/firmware.prototype create mode 100644 boards/micoair/h743-lite/init/rc.board_defaults create mode 100644 boards/micoair/h743-lite/init/rc.board_extras create mode 100644 boards/micoair/h743-lite/init/rc.board_sensors create mode 100644 boards/micoair/h743-lite/nuttx-config/bootloader/defconfig create mode 100644 boards/micoair/h743-lite/nuttx-config/include/board.h create mode 100644 boards/micoair/h743-lite/nuttx-config/include/board_dma_map.h create mode 100644 boards/micoair/h743-lite/nuttx-config/nsh/defconfig create mode 100644 boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld create mode 100644 boards/micoair/h743-lite/nuttx-config/scripts/script.ld create mode 100644 boards/micoair/h743-lite/src/CMakeLists.txt create mode 100644 boards/micoair/h743-lite/src/board_config.h create mode 100644 boards/micoair/h743-lite/src/bootloader_main.c create mode 100644 boards/micoair/h743-lite/src/hw_config.h create mode 100644 boards/micoair/h743-lite/src/i2c.cpp create mode 100644 boards/micoair/h743-lite/src/init.c create mode 100644 boards/micoair/h743-lite/src/led.c create mode 100644 boards/micoair/h743-lite/src/sdio.c create mode 100644 boards/micoair/h743-lite/src/spi.cpp create mode 100644 boards/micoair/h743-lite/src/timer_config.cpp create mode 100644 boards/micoair/h743-lite/src/usb.c diff --git a/.vscode/cmake-variants.yaml b/.vscode/cmake-variants.yaml index 504c38b2d3..b80cdb73c8 100644 --- a/.vscode/cmake-variants.yaml +++ b/.vscode/cmake-variants.yaml @@ -421,6 +421,16 @@ CONFIG: buildType: MinSizeRel settings: CONFIG: micoair_h743-v2_default + micoair_h743-lite_bootloader: + short: micoair_h743-lite_bootloader + buildType: MinSizeRel + settings: + CONFIG: micoair_h743-lite_bootloader + micoair_h743-lite_default: + short: micoair_h743-lite + buildType: MinSizeRel + settings: + CONFIG: micoair_h743-lite_default modalai_fc-v1_default: short: modalai_fc-v1 buildType: MinSizeRel diff --git a/Makefile b/Makefile index 80e0ee1f64..3639bbdee4 100644 --- a/Makefile +++ b/Makefile @@ -346,6 +346,7 @@ bootloaders_update: \ micoair_h743_bootloader \ micoair_h743-aio_bootloader \ micoair_h743-v2_bootloader \ + micoair_h743-lite_bootloader \ modalai_fc-v2_bootloader \ mro_ctrl-zero-classic_bootloader \ mro_ctrl-zero-h7_bootloader \ diff --git a/boards/micoair/h743-lite/bootloader.px4board b/boards/micoair/h743-lite/bootloader.px4board new file mode 100644 index 0000000000..19b6e662be --- /dev/null +++ b/boards/micoair/h743-lite/bootloader.px4board @@ -0,0 +1,3 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROMFSROOT="" diff --git a/boards/micoair/h743-lite/default.px4board b/boards/micoair/h743-lite/default.px4board new file mode 100644 index 0000000000..68a87e863c --- /dev/null +++ b/boards/micoair/h743-lite/default.px4board @@ -0,0 +1,108 @@ +CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" +CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_SERIAL_URT6="/dev/ttyS6" +CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS2" +CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS3" +CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS4" +CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS7" +CONFIG_BOARD_SERIAL_RC="/dev/ttyS5" +CONFIG_BOARD_PARAM_FILE="/fs/microsd/params" +CONFIG_DRIVERS_ADC_BOARD_ADC=y +CONFIG_DRIVERS_BAROMETER_GOERTEK_SPA06=y +CONFIG_DRIVERS_CAMERA_CAPTURE=y +CONFIG_DRIVERS_CAMERA_TRIGGER=y +CONFIG_DRIVERS_CDCACM_AUTOSTART=y +CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ETS=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_MS4515=y +CONFIG_COMMON_DISTANCE_SENSOR=y +CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GNSS_SEPTENTRIO=y +CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_INVENSENSE_ICM45686=y +CONFIG_COMMON_MAGNETOMETER=y +CONFIG_COMMON_OPTICAL_FLOW=y +CONFIG_DRIVERS_POWER_MONITOR_INA220=y +CONFIG_DRIVERS_POWER_MONITOR_INA226=y +CONFIG_DRIVERS_POWER_MONITOR_INA228=y +CONFIG_DRIVERS_POWER_MONITOR_INA238=y +CONFIG_DRIVERS_POWER_MONITOR_PM_SELECTOR_AUTERION=y +CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y +CONFIG_DRIVERS_PPS_CAPTURE=y +CONFIG_DRIVERS_PWM_OUT=y +CONFIG_COMMON_RC=y +CONFIG_DRIVERS_RC_INPUT=y +CONFIG_COMMON_RPM=y +CONFIG_DRIVERS_SMART_BATTERY_BATMON=y +CONFIG_DRIVERS_TAP_ESC=y +CONFIG_COMMON_TELEMETRY=y +CONFIG_DRIVERS_TONE_ALARM=y +CONFIG_COMMON_UWB=y +CONFIG_COMMON_WIND_SENSOR=y +CONFIG_MODULES_AIRSHIP_ATT_CONTROL=y +CONFIG_MODULES_AIRSPEED_SELECTOR=y +CONFIG_MODULES_BATTERY_STATUS=y +CONFIG_MODULES_CAMERA_FEEDBACK=y +CONFIG_MODULES_COMMANDER=y +CONFIG_MODULES_CONTROL_ALLOCATOR=y +CONFIG_MODULES_DATAMAN=y +CONFIG_MODULES_EKF2=y +CONFIG_MODULES_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_GIMBAL=y +CONFIG_MODULES_GYRO_CALIBRATION=y +CONFIG_MODULES_GYRO_FFT=y +CONFIG_MODULES_LAND_DETECTOR=y +CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y +CONFIG_MODULES_LOAD_MON=y +CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y +CONFIG_MODULES_LOGGER=y +CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y +CONFIG_MODULES_MANUAL_CONTROL=y +CONFIG_MODULES_MAVLINK=y +CONFIG_MODULES_MC_ATT_CONTROL=y +CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y +CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y +CONFIG_MODULES_MC_POS_CONTROL=y +CONFIG_MODULES_MC_RATE_CONTROL=y +CONFIG_MODULES_NAVIGATOR=y +CONFIG_MODULES_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_BL_UPDATE=y +CONFIG_SYSTEMCMDS_BSONDUMP=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_SERIAL_PASSTHRU=y +CONFIG_SYSTEMCMDS_SERIAL_TEST=y +CONFIG_SYSTEMCMDS_SYSTEM_TIME=y +CONFIG_SYSTEMCMDS_TESTS=y +CONFIG_SYSTEMCMDS_TOP=y +CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y +CONFIG_SYSTEMCMDS_TUNE_CONTROL=y +CONFIG_SYSTEMCMDS_UORB=y +CONFIG_SYSTEMCMDS_USB_CONNECTED=y +CONFIG_SYSTEMCMDS_VER=y +CONFIG_SYSTEMCMDS_WORK_QUEUE=y diff --git a/boards/micoair/h743-lite/extras/micoair_h743-lite_bootloader.bin b/boards/micoair/h743-lite/extras/micoair_h743-lite_bootloader.bin new file mode 100755 index 0000000000000000000000000000000000000000..e9bf775cde0f8803b1ef1dca130071b8a3c8d2cc GIT binary patch literal 41032 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 fbSm;T_3cxZnr&v&uzTlv^;{~QGf} + * + * 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_MICOAIR743_LITE_INCLUDE_BOARD_H +#define __NUTTX_CONFIG_MICOAIR743_LITE_INCLUDE_BOARD_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include "board_dma_map.h" + +#include + +#ifndef __ASSEMBLY__ +# include +#endif + +#include "stm32_rcc.h" +#include "stm32_sdmmc.h" + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ + +/* Clocking *************************************************************************/ +/* The MicoAir743-Lite board provides the following clock sources: + * + * X1: 8 MHz crystal for HSE + * + * So we have these clock source available within the STM32 + * + * HSI: 64 MHz RC factory-trimmed + * HSE: 8 MHz crystal for HSE + */ + +#define STM32_BOARD_XTAL 8000000ul + +#define STM32_HSI_FREQUENCY 16000000ul +#define STM32_LSI_FREQUENCY 32000 +#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL +#define STM32_LSE_FREQUENCY 32768 + +/* Main PLL Configuration. + * + * PLL source is HSE = 8,000,000 + * + * PLL_VCOx = (STM32_HSE_FREQUENCY / PLLM) * PLLN + * Subject to: + * + * 1 <= PLLM <= 63 + * 4 <= PLLN <= 512 + * 150 MHz <= PLL_VCOL <= 420MHz + * 192 MHz <= PLL_VCOH <= 836MHz + * + * SYSCLK = PLL_VCO / PLLP + * CPUCLK = SYSCLK / D1CPRE + * Subject to + * + * PLLP1 = {2, 4, 6, 8, ..., 128} + * PLLP2,3 = {2, 3, 4, ..., 128} + * CPUCLK <= 480 MHz + */ + +#define STM32_BOARD_USEHSE + +#define STM32_PLLCFG_PLLSRC RCC_PLLCKSELR_PLLSRC_HSE + +/* PLL1, wide 4 - 8 MHz input, enable DIVP, DIVQ, DIVR + * + * PLL1_VCO = (8,000,000 / 1) * 120 = 960 MHz + * + * PLL1P = PLL1_VCO/2 = 960 MHz / 2 = 480 MHz + * PLL1Q = PLL1_VCO/4 = 960 MHz / 4 = 240 MHz + * PLL1R = PLL1_VCO/8 = 960 MHz / 8 = 120 MHz + */ + +#define STM32_PLLCFG_PLL1CFG (RCC_PLLCFGR_PLL1VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL1RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVP1EN | \ + RCC_PLLCFGR_DIVQ1EN | \ + RCC_PLLCFGR_DIVR1EN) +#define STM32_PLLCFG_PLL1M RCC_PLLCKSELR_DIVM1(1) +#define STM32_PLLCFG_PLL1N RCC_PLL1DIVR_N1(120) +#define STM32_PLLCFG_PLL1P RCC_PLL1DIVR_P1(2) +#define STM32_PLLCFG_PLL1Q RCC_PLL1DIVR_Q1(4) +#define STM32_PLLCFG_PLL1R RCC_PLL1DIVR_R1(8) + +#define STM32_VCO1_FREQUENCY ((STM32_HSE_FREQUENCY / 1) * 120) +#define STM32_PLL1P_FREQUENCY (STM32_VCO1_FREQUENCY / 2) +#define STM32_PLL1Q_FREQUENCY (STM32_VCO1_FREQUENCY / 4) +#define STM32_PLL1R_FREQUENCY (STM32_VCO1_FREQUENCY / 8) + +/* PLL2 */ + +#define STM32_PLLCFG_PLL2CFG (RCC_PLLCFGR_PLL2VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL2RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVP2EN | \ + RCC_PLLCFGR_DIVQ2EN | \ + RCC_PLLCFGR_DIVR2EN) +#define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(2) +#define STM32_PLLCFG_PLL2N RCC_PLL2DIVR_N2(48) +#define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(2) +#define STM32_PLLCFG_PLL2Q RCC_PLL2DIVR_Q2(2) +#define STM32_PLLCFG_PLL2R RCC_PLL2DIVR_R2(2) + +#define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 2) +#define STM32_PLL2Q_FREQUENCY (STM32_VCO2_FREQUENCY / 2) +#define STM32_PLL2R_FREQUENCY (STM32_VCO2_FREQUENCY / 2) + +/* PLL3 */ + +#define STM32_PLLCFG_PLL3CFG (RCC_PLLCFGR_PLL3VCOSEL_WIDE | \ + RCC_PLLCFGR_PLL3RGE_4_8_MHZ | \ + RCC_PLLCFGR_DIVQ3EN) +#define STM32_PLLCFG_PLL3M RCC_PLLCKSELR_DIVM3(2) +#define STM32_PLLCFG_PLL3N RCC_PLL3DIVR_N3(48) +#define STM32_PLLCFG_PLL3P RCC_PLL3DIVR_P3(2) +#define STM32_PLLCFG_PLL3Q RCC_PLL3DIVR_Q3(4) +#define STM32_PLLCFG_PLL3R RCC_PLL3DIVR_R3(2) + +#define STM32_VCO3_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_PLL3P_FREQUENCY (STM32_VCO3_FREQUENCY / 2) +#define STM32_PLL3Q_FREQUENCY (STM32_VCO3_FREQUENCY / 4) +#define STM32_PLL3R_FREQUENCY (STM32_VCO3_FREQUENCY / 2) + +/* SYSCLK = PLL1P = 480MHz + * CPUCLK = SYSCLK / 1 = 480 MHz + */ + +#define STM32_RCC_D1CFGR_D1CPRE (RCC_D1CFGR_D1CPRE_SYSCLK) +#define STM32_SYSCLK_FREQUENCY (STM32_PLL1P_FREQUENCY) +#define STM32_CPUCLK_FREQUENCY (STM32_SYSCLK_FREQUENCY / 1) + +/* Configure Clock Assignments */ + +/* AHB clock (HCLK) is SYSCLK/2 (240 MHz max) + * HCLK1 = HCLK2 = HCLK3 = HCLK4 = 240 + */ + +#define STM32_RCC_D1CFGR_HPRE RCC_D1CFGR_HPRE_SYSCLKd2 /* HCLK = SYSCLK / 2 */ +#define STM32_ACLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* ACLK in D1, HCLK3 in D1 */ +#define STM32_HCLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* HCLK in D2, HCLK4 in D3 */ +#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */ + +/* APB1 clock (PCLK1) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D2CFGR_D2PPRE1 RCC_D2CFGR_D2PPRE1_HCLKd2 /* PCLK1 = HCLK / 2 */ +#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB2 clock (PCLK2) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D2CFGR_D2PPRE2 RCC_D2CFGR_D2PPRE2_HCLKd2 /* PCLK2 = HCLK / 2 */ +#define STM32_PCLK2_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB3 clock (PCLK3) is HCLK/2 (120 MHz) */ + +#define STM32_RCC_D1CFGR_D1PPRE RCC_D1CFGR_D1PPRE_HCLKd2 /* PCLK3 = HCLK / 2 */ +#define STM32_PCLK3_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* APB4 clock (PCLK4) is HCLK/4 (120 MHz) */ + +#define STM32_RCC_D3CFGR_D3PPRE RCC_D3CFGR_D3PPRE_HCLKd2 /* PCLK4 = HCLK / 2 */ +#define STM32_PCLK4_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* Timer clock frequencies */ + +/* Timers driven from APB1 will be twice PCLK1 */ + +#define STM32_APB1_TIM2_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM3_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM4_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM5_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM6_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM7_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM12_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM13_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM14_CLKIN (2*STM32_PCLK1_FREQUENCY) + +/* Timers driven from APB2 will be twice PCLK2 */ + +#define STM32_APB2_TIM1_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM8_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM15_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM16_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM17_CLKIN (2*STM32_PCLK2_FREQUENCY) + +/* Kernel Clock Configuration + * + * Note: look at Table 54 in ST Manual + */ + +/* I2C123 clock source */ + +#define STM32_RCC_D2CCIP2R_I2C123SRC RCC_D2CCIP2R_I2C123SEL_HSI + +/* I2C4 clock source */ + +#define STM32_RCC_D3CCIPR_I2C4SRC RCC_D3CCIPR_I2C4SEL_HSI + +/* SPI123 clock source */ + +#define STM32_RCC_D2CCIP1R_SPI123SRC RCC_D2CCIP1R_SPI123SEL_PLL2 + +/* SPI45 clock source */ + +#define STM32_RCC_D2CCIP1R_SPI45SRC RCC_D2CCIP1R_SPI45SEL_PLL2 + +/* SPI6 clock source */ + +#define STM32_RCC_D3CCIPR_SPI6SRC RCC_D3CCIPR_SPI6SEL_PLL2 + +/* USB 1 and 2 clock source */ + +#define STM32_RCC_D2CCIP2R_USBSRC RCC_D2CCIP2R_USBSEL_PLL3 + +/* ADC 1 2 3 clock source */ + +#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 + +/* FDCAN 1 clock source */ + +#define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ + +#define STM32_FDCANCLK STM32_HSE_FREQUENCY + +/* FLASH wait states + * + * ------------ ---------- ----------- + * Vcore MAX ACLK WAIT STATES + * ------------ ---------- ----------- + * 1.15-1.26 V 70 MHz 0 + * (VOS1 level) 140 MHz 1 + * 210 MHz 2 + * 1.05-1.15 V 55 MHz 0 + * (VOS2 level) 110 MHz 1 + * 165 MHz 2 + * 220 MHz 3 + * 0.95-1.05 V 45 MHz 0 + * (VOS3 level) 90 MHz 1 + * 135 MHz 2 + * 180 MHz 3 + * 225 MHz 4 + * ------------ ---------- ----------- + */ + +#define BOARD_FLASH_WAITSTATES 2 + +/* SDMMC definitions ********************************************************/ + +/* Init 480kHz, freq = PLL1Q/(2*div) div = PLL1Q/(2*freq) */ + +#define STM32_SDMMC_INIT_CLKDIV (300 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) + +/* 20 MHz Max for now - more reliable on some boards than 25 MHz + * 20 MHz = PLL1Q/(2*div), div = PLL1Q/(2*freq), div = 6 = 240 / 40 + */ + +#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) +# define STM32_SDMMC_MMCXFR_CLKDIV (6 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#else +# define STM32_SDMMC_MMCXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#endif +#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) +# define STM32_SDMMC_SDXFR_CLKDIV (6 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#else +# define STM32_SDMMC_SDXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) +#endif + +#define STM32_SDMMC_CLKCR_EDGE STM32_SDMMC_CLKCR_NEGEDGE + +/* LED definitions ******************************************************************/ +/* The board has two, LED_GREEN a Green LED and LED_BLUE a Blue LED, + * that can be controlled by software. + * + * If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any way. + * The following definitions are used to access individual LEDs. + */ + +/* LED index values for use with board_userled() */ + +#define BOARD_LED1 0 +#define BOARD_LED2 1 +#define BOARD_LED3 2 +#define BOARD_NLEDS 3 + +#define BOARD_LED_RED BOARD_LED1 +#define BOARD_LED_GREEN BOARD_LED2 +#define BOARD_LED_BLUE BOARD_LED3 + +/* LED bits for use with board_userled_all() */ + +#define BOARD_LED1_BIT (1 << BOARD_LED1) +#define BOARD_LED2_BIT (1 << BOARD_LED2) +#define BOARD_LED3_BIT (1 << BOARD_LED3) + +/* If CONFIG_ARCH_LEDS is defined, the usage by the board port is defined in + * include/board.h and src/stm32_leds.c. The LEDs are used to encode OS-related + * events as follows: + * + * + * SYMBOL Meaning LED state + * Red Green Blue + * ---------------------- -------------------------- ------ ------ ----*/ + +#define LED_STARTED 0 /* NuttX has been started OFF OFF OFF */ +#define LED_HEAPALLOCATE 1 /* Heap has been allocated OFF OFF ON */ +#define LED_IRQSENABLED 2 /* Interrupts enabled OFF ON OFF */ +#define LED_STACKCREATED 3 /* Idle stack created OFF ON ON */ +#define LED_INIRQ 4 /* In an interrupt N/C N/C GLOW */ +#define LED_SIGNAL 5 /* In a signal handler N/C GLOW N/C */ +#define LED_ASSERTION 6 /* An assertion failed GLOW N/C GLOW */ +#define LED_PANIC 7 /* The system has crashed Blink OFF N/C */ +#define LED_IDLE 8 /* MCU is is sleep mode ON OFF OFF */ + +/* Thus if the Green LED is statically on, NuttX has successfully booted and + * is, apparently, running normally. If the Red LED is flashing at + * approximately 2Hz, then a fatal error has been detected and the system + * has halted. + */ + +/* Alternate function pin selections ************************************************/ + +#define GPIO_USART1_RX GPIO_USART1_RX_2 /* PA10 */ +#define GPIO_USART1_TX GPIO_USART1_TX_2 /* PA9 */ + +#define GPIO_USART2_RX GPIO_USART2_RX_1 /* PA3 */ +#define GPIO_USART2_TX GPIO_USART2_TX_1 /* PA2 */ + +#define GPIO_USART3_RX GPIO_USART3_RX_3 /* PD9 */ +#define GPIO_USART3_TX GPIO_USART3_TX_3 /* PD8 */ + +#define GPIO_UART4_RX GPIO_UART4_RX_2 /* PA1 */ +#define GPIO_UART4_TX GPIO_UART4_TX_2 /* PA0 */ + +#define GPIO_UART5_RX GPIO_UART5_RX_2 /* PB5 */ +#define GPIO_UART5_TX GPIO_UART5_TX_2 /* PB6 */ + +#define GPIO_USART6_RX GPIO_USART6_RX_1 /* PC7 */ +#define GPIO_USART6_TX GPIO_USART6_TX_1 /* PC6 */ + +#define GPIO_UART7_RX GPIO_UART7_RX_3 /* PE7 */ +#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 */ + +#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */ +#define GPIO_UART8_TX GPIO_UART8_TX_1 /* PE1 */ + + +/* SPI + * + + */ + +#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_2MHz)) + +#define GPIO_SPI3_MISO GPIO_SPI3_MISO_1 /* PB4 */ +#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_1 /* PD6 */ +#define GPIO_SPI3_SCK ADJ_SLEW_RATE(GPIO_SPI3_SCK_1) /* PB3 */ + +/* I2C + * + + * + */ + +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_2 /* PB8 */ +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_2 /* PB9 */ + +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN9) + +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_1 /* PB10 */ +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_1 /* PB11 */ + +#define GPIO_I2C2_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN10) +#define GPIO_I2C2_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN11) + +# define PROBE_INIT(mask) +# define PROBE(n,s) +# define PROBE_MARK(n) + +#endif /*__NUTTX_CONFIG_MICOAIR743_LITE_INCLUDE_BOARD_H */ diff --git a/boards/micoair/h743-lite/nuttx-config/include/board_dma_map.h b/boards/micoair/h743-lite/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..fd6a97722a --- /dev/null +++ b/boards/micoair/h743-lite/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_SPI3_RX DMAMAP_DMA12_SPI3RX_0 +#define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_0 diff --git a/boards/micoair/h743-lite/nuttx-config/nsh/defconfig b/boards/micoair/h743-lite/nuttx-config/nsh/defconfig new file mode 100644 index 0000000000..c5f981cbd4 --- /dev/null +++ b/boards/micoair/h743-lite/nuttx-config/nsh/defconfig @@ -0,0 +1,244 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_DEV_CONSOLE is not set +# CONFIG_DISABLE_ENVIRON is not set +# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set +# CONFIG_DISABLE_PTHREAD is not set +# CONFIG_MMCSD_HAVE_CARDDETECT is not set +# CONFIG_MMCSD_HAVE_WRITEPROTECT is not set +# CONFIG_MMCSD_MMCSUPPORT is not set +# CONFIG_MMCSD_SPI is not set +# CONFIG_NSH_DISABLEBG is not set +# CONFIG_NSH_DISABLESCRIPT is not set +# CONFIG_NSH_DISABLE_CAT is not set +# CONFIG_NSH_DISABLE_CD is not set +# CONFIG_NSH_DISABLE_CP is not set +# CONFIG_NSH_DISABLE_DATE is not set +# CONFIG_NSH_DISABLE_DF is not set +# CONFIG_NSH_DISABLE_ECHO is not set +# CONFIG_NSH_DISABLE_ENV is not set +# CONFIG_NSH_DISABLE_EXEC is not set +# CONFIG_NSH_DISABLE_EXIT is not set +# CONFIG_NSH_DISABLE_EXPORT is not set +# CONFIG_NSH_DISABLE_FREE is not set +# CONFIG_NSH_DISABLE_GET is not set +# CONFIG_NSH_DISABLE_HELP is not set +# CONFIG_NSH_DISABLE_ITEF is not set +# CONFIG_NSH_DISABLE_KILL is not set +# CONFIG_NSH_DISABLE_LOOPS is not set +# CONFIG_NSH_DISABLE_LS is not set +# CONFIG_NSH_DISABLE_MKDIR is not set +# CONFIG_NSH_DISABLE_MKFATFS is not set +# CONFIG_NSH_DISABLE_MOUNT is not set +# CONFIG_NSH_DISABLE_MV is not set +# CONFIG_NSH_DISABLE_PRINTF is not set +# CONFIG_NSH_DISABLE_PS is not set +# CONFIG_NSH_DISABLE_PSSTACKUSAGE is not set +# CONFIG_NSH_DISABLE_PWD is not set +# CONFIG_NSH_DISABLE_RM is not set +# CONFIG_NSH_DISABLE_RMDIR is not set +# CONFIG_NSH_DISABLE_SEMICOLON is not set +# CONFIG_NSH_DISABLE_SET is not set +# CONFIG_NSH_DISABLE_SLEEP is not set +# CONFIG_NSH_DISABLE_SOURCE is not set +# CONFIG_NSH_DISABLE_TEST is not set +# CONFIG_NSH_DISABLE_TIME is not set +# CONFIG_NSH_DISABLE_UMOUNT is not set +# CONFIG_NSH_DISABLE_UNSET is not set +# CONFIG_NSH_DISABLE_USLEEP is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD_CUSTOM=y +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/micoair/h743-lite/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="MicoAir743-Lite" +CONFIG_CDCACM_RXBUFSIZE=6000 +CONFIG_CDCACM_TXBUFSIZE=12000 +CONFIG_CDCACM_VENDORID=0x1B8C +CONFIG_CDCACM_VENDORSTR="MicoAir" +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_HARDFAULT_ALERT=y +CONFIG_DEBUG_MEMFAULT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEFAULT_SMALL=y +CONFIG_DEV_FIFO_SIZE=0 +CONFIG_DEV_PIPE_MAXSIZE=1024 +CONFIG_DEV_PIPE_SIZE=70 +CONFIG_EXPERIMENTAL=y +CONFIG_FAT_DMAMEMORY=y +CONFIG_FAT_LCNAMES=y +CONFIG_FAT_LFN=y +CONFIG_FAT_LFN_ALIAS_HASH=y +CONFIG_FDCLONE_STDIO=y +CONFIG_FS_BINFS=y +CONFIG_FS_CROMFS=y +CONFIG_FS_FAT=y +CONFIG_FS_FATTIME=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_INCLUDE_PROGMEM=y +CONFIG_FS_PROCFS_MAX_TASKS=64 +CONFIG_FS_PROCFS_REGISTER=y +CONFIG_FS_ROMFS=y +CONFIG_GRAN=y +CONFIG_GRAN_INTR=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_I2C=y +CONFIG_I2C_RESET=y +CONFIG_IDLETHREAD_STACKSIZE=750 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=3194 +CONFIG_IOB_NBUFFERS=24 +CONFIG_IOB_NCHAINS=24 +CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_LIBC_LONG_LONG=y +CONFIG_LIBC_MAX_EXITFUNS=1 +CONFIG_LIBC_STRERROR=y +CONFIG_MEMSET_64BIT=y +CONFIG_MEMSET_OPTSPEED=y +CONFIG_MMCSD=y +CONFIG_MMCSD_SDIO=y +CONFIG_MMCSD_SDIOWAIT_WRCOMPLETE=y +CONFIG_MM_IOB=y +CONFIG_MM_REGIONS=4 +CONFIG_NAME_MAX=40 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_ARGCAT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_CMDPARMS=y +CONFIG_NSH_CROMFSETC=y +CONFIG_NSH_LINELEN=128 +CONFIG_NSH_MAXARGUMENTS=15 +CONFIG_NSH_NESTDEPTH=8 +CONFIG_NSH_QUOTE=y +CONFIG_NSH_ROMFSETC=y +CONFIG_NSH_ROMFSSECTSIZE=128 +CONFIG_NSH_STRERROR=y +CONFIG_NSH_VARS=y +CONFIG_OTG_ID_GPIO_DISABLE=y +CONFIG_PIPES=y +CONFIG_PREALLOC_TIMERS=50 +CONFIG_PRIORITY_INHERITANCE=y +CONFIG_PTHREAD_MUTEX_ROBUST=y +CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_RAM_SIZE=245760 +CONFIG_RAM_START=0x20010000 +CONFIG_RAW_BINARY=y +CONFIG_RTC_DATETIME=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_HPWORKPRIORITY=249 +CONFIG_SCHED_HPWORKSTACKSIZE=1280 +CONFIG_SCHED_INSTRUMENTATION=y +CONFIG_SCHED_INSTRUMENTATION_EXTERNAL=y +CONFIG_SCHED_INSTRUMENTATION_SWITCH=y +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_LPWORKPRIORITY=50 +CONFIG_SCHED_LPWORKSTACKSIZE=1632 +CONFIG_SCHED_WAITPID=y +CONFIG_SDMMC1_SDIO_PULLUP=y +CONFIG_SEM_PREALLOCHOLDERS=32 +CONFIG_SERIAL_TERMIOS=y +CONFIG_SIG_DEFAULT=y +CONFIG_SIG_SIGALRM_ACTION=y +CONFIG_SIG_SIGUSR1_ACTION=y +CONFIG_SIG_SIGUSR2_ACTION=y +CONFIG_SIG_SIGWORK=4 +CONFIG_STACK_COLORATION=y +CONFIG_START_DAY=30 +CONFIG_START_MONTH=11 +CONFIG_STDIO_BUFFER_SIZE=256 +CONFIG_STM32H7_ADC1=y +CONFIG_STM32H7_ADC3=y +CONFIG_STM32H7_BBSRAM=y +CONFIG_STM32H7_BBSRAM_FILES=5 +CONFIG_STM32H7_BDMA=y +CONFIG_STM32H7_BKPSRAM=y +CONFIG_STM32H7_DMA1=y +CONFIG_STM32H7_DMA2=y +CONFIG_STM32H7_DMACAPABLE=y +CONFIG_STM32H7_FLASH_OVERRIDE_I=y +CONFIG_STM32H7_I2C1=y +CONFIG_STM32H7_I2C2=y +CONFIG_STM32H7_I2C_DYNTIMEO=y +CONFIG_STM32H7_I2C_DYNTIMEO_STARTSTOP=10 +CONFIG_STM32H7_OTGFS=y +CONFIG_STM32H7_PROGMEM=y +CONFIG_STM32H7_RTC=y +CONFIG_STM32H7_RTC_HSECLOCK=y +CONFIG_STM32H7_RTC_MAGIC_REG=1 +CONFIG_STM32H7_SAVE_CRASHDUMP=y +CONFIG_STM32H7_SDMMC1=y +CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y +CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32H7_SPI3=y +CONFIG_STM32H7_SPI3_DMA=y +CONFIG_STM32H7_SPI3_DMA_BUFFER=2048 +CONFIG_STM32H7_SPI_DMATHRESHOLD=8 +CONFIG_STM32H7_TIM15=y +CONFIG_STM32H7_TIM12=y +CONFIG_STM32H7_TIM1=y +CONFIG_STM32H7_TIM3=y +CONFIG_STM32H7_TIM4=y +CONFIG_STM32H7_TIM8=y +CONFIG_STM32H7_UART4=y +CONFIG_STM32H7_UART5=y +CONFIG_STM32H7_UART7=y +CONFIG_STM32H7_UART8=y +CONFIG_STM32H7_USART1=y +CONFIG_STM32H7_USART2=y +CONFIG_STM32H7_USART3=y +CONFIG_STM32H7_USART6=y +CONFIG_STM32H7_USART_BREAKS=y +CONFIG_STM32H7_USART_INVERT=y +CONFIG_STM32H7_USART_SINGLEWIRE=y +CONFIG_STM32H7_USART_SWAP=y +CONFIG_SYSTEM_CDCACM=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=24 +CONFIG_UART4_RXBUFSIZE=600 +CONFIG_UART4_TXBUFSIZE=800 +CONFIG_UART5_RXBUFSIZE=600 +CONFIG_UART5_TXBUFSIZE=800 +CONFIG_UART7_RXBUFSIZE=600 +CONFIG_UART7_TXBUFSIZE=800 +CONFIG_UART8_RXBUFSIZE=600 +CONFIG_UART8_TXBUFSIZE=800 +CONFIG_USART1_RXBUFSIZE=1200 +CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_USART2_RXBUFSIZE=600 +CONFIG_USART2_TXBUFSIZE=800 +CONFIG_USART3_RXBUFSIZE=600 +CONFIG_USART3_TXBUFSIZE=800 +CONFIG_USART6_BAUD=57600 +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_TXBUFSIZE=800 +CONFIG_USBDEV=y +CONFIG_USBDEV_BUSPOWERED=y +CONFIG_USBDEV_MAXPOWER=500 +CONFIG_USEC_PER_TICK=1000 +CONFIG_WATCHDOG=y diff --git a/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld new file mode 100644 index 0000000000..fb877cc443 --- /dev/null +++ b/boards/micoair/h743-lite/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/micoair/h743-lite/nuttx-config/scripts/script.ld b/boards/micoair/h743-lite/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..85f4990724 --- /dev/null +++ b/boards/micoair/h743-lite/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 = 1920K + + DTCM1_RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K + DTCM2_RAM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K + AXI_SRAM (rwx) : ORIGIN = 0x24000000, LENGTH = 512K /* D1 domain AXI bus */ + SRAM1 (rwx) : ORIGIN = 0x30000000, LENGTH = 128K /* D2 domain AHB bus */ + SRAM2 (rwx) : ORIGIN = 0x30020000, LENGTH = 128K /* D2 domain AHB bus */ + SRAM3 (rwx) : ORIGIN = 0x30040000, LENGTH = 32K /* D2 domain AHB bus */ + SRAM4 (rwx) : ORIGIN = 0x38000000, LENGTH = 64K /* D3 domain */ + BKPRAM (rwx) : ORIGIN = 0x38800000, LENGTH = 4K +} + +OUTPUT_ARCH(arm) +EXTERN(_vectors) +ENTRY(_stext) + +/* + * Ensure that abort() is present in the final object. The exception handling + * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). + */ +EXTERN(abort) +EXTERN(_bootdelay_signature) + +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + . = ALIGN(32); + /* + This signature provides the bootloader with a way to delay booting + */ + _bootdelay_signature = ABSOLUTE(.); + FILL(0xffecc2925d7d05c5) + . += 8; + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + + } > FLASH + + /* + * Init functions (static constructors and the like) + */ + .init_section : { + _sinit = ABSOLUTE(.); + KEEP(*(.init_array .init_array.*)) + _einit = ABSOLUTE(.); + } > FLASH + + + .ARM.extab : { + *(.ARM.extab*) + } > FLASH + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : { + *(.ARM.exidx*) + } > FLASH + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + .data : { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + _edata = ABSOLUTE(.); + + /* Pad out last section as the STM32H7 Flash write size is 256 bits. 32 bytes */ + . = ALIGN(16); + FILL(0xffff) + . += 16; + } > AXI_SRAM AT > FLASH = 0xffff + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > AXI_SRAM + + /* Emit the the D3 power domain section for locating BDMA data */ + + .sram4_reserve (NOLOAD) : + { + *(.sram4) + . = ALIGN(4); + _sram4_heap_start = ABSOLUTE(.); + } > SRAM4 + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/boards/micoair/h743-lite/src/CMakeLists.txt b/boards/micoair/h743-lite/src/CMakeLists.txt new file mode 100644 index 0000000000..c47215375d --- /dev/null +++ b/boards/micoair/h743-lite/src/CMakeLists.txt @@ -0,0 +1,68 @@ +############################################################################ +# +# Copyright (c) 2021 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ +if("${PX4_BOARD_LABEL}" STREQUAL "bootloader") + add_library(drivers_board + bootloader_main.c + usb.c + ) + target_link_libraries(drivers_board + PRIVATE + nuttx_arch + nuttx_drivers + bootloader + ) + target_include_directories(drivers_board PRIVATE ${PX4_SOURCE_DIR}/platforms/nuttx/src/bootloader/common) + +else() + add_library(drivers_board + i2c.cpp + init.c + led.c + sdio.c + spi.cpp + timer_config.cpp + usb.c + ) + add_dependencies(drivers_board arch_board_hw_info) + + target_link_libraries(drivers_board + PRIVATE + arch_io_pins + arch_spi + arch_board_hw_info + drivers__led + nuttx_arch + nuttx_drivers + px4_layer + ) +endif() diff --git a/boards/micoair/h743-lite/src/board_config.h b/boards/micoair/h743-lite/src/board_config.h new file mode 100644 index 0000000000..2eef26d59b --- /dev/null +++ b/boards/micoair/h743-lite/src/board_config.h @@ -0,0 +1,199 @@ +/**************************************************************************** + * + * 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 + ****************************************************************************************************/ + + + +/* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ + +# define GPIO_nLED_RED /* PE3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) +# define GPIO_nLED_GREEN /* PE2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN2) +# define GPIO_nLED_BLUE /* PE4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN4) + +# define BOARD_HAS_CONTROL_STATUS_LEDS 1 +# define BOARD_OVERLOAD_LED LED_RED +# define BOARD_ARMED_STATE_LED LED_BLUE + + +/* + * ADC channels + * + * These are the channel numbers of the ADCs of the microcontroller that + * can be used by the Px4 Firmware in the adc driver + */ + +/* ADC defines to be used in sensors.cpp to read from a particular channel */ +#define SYSTEM_ADC_BASE STM32_ADC1_BASE +#define ADC1_CH(n) (n) + +/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ +#define PX4_ADC_GPIO \ + /* PC0 */ GPIO_ADC123_INP10, \ + /* PC1 */ GPIO_ADC123_INP11 + + +/* Define Channel numbers must match above GPIO pin IN(n)*/ +#define ADC_BATTERY_VOLTAGE_CHANNEL /* PC0 */ ADC1_CH(10) +#define ADC_BATTERY_CURRENT_CHANNEL /* PC1 */ ADC1_CH(11) + + +#define ADC_CHANNELS \ + ((1 << ADC_BATTERY_VOLTAGE_CHANNEL) | \ + (1 << ADC_BATTERY_CURRENT_CHANNEL)) + + +/* Define Battery 1 Voltage Divider and A per V + */ + +// #define BOARD_BATTERY1_V_DIV (11.0f) /* measured with the provided PM board */ +// #define BOARD_BATTERY1_A_PER_V (40.0f) +// #define BOARD_BATTERY2_V_DIV (11.0f) /* measured with the provided PM board */ + + +/* PWM + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 14 +#define DIRECT_INPUT_TIMER_CHANNELS 14 + +#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS + +#define GPIO_TONE_ALARM_IDLE /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN15) +#define GPIO_TONE_ALARM_GPIO /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN15) + +/* USB OTG FS + * + * PA8 OTG_FS_VBUS VBUS sensing + */ + +#define GPIO_OTGFS_VBUS /* PA8 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTA|GPIO_PIN8) + + +/* High-resolution timer */ +#define HRT_TIMER 8 /* use timer8 for the HRT */ +#define HRT_TIMER_CHANNEL 3 /* use capture/compare channel 3 */ + + +/* RC Serial port */ +#define RC_SERIAL_PORT "/dev/ttyS5" +#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT + +//#define GPIO_I2C2_DRDY1_SPA06 /* PD0 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTD|GPIO_PIN0) + + +/* SD Card */ +#define SDIO_SLOTNO 0 /* Only one slot */ +#define SDIO_MINOR 0 + +/* This board provides a DMA pool and APIs */ +#define BOARD_DMA_ALLOC_POOL_SIZE 5120 + +/* This board provides the board_on_reset interface */ +#define BOARD_HAS_ON_RESET 1 + +#define PX4_GPIO_INIT_LIST { \ + PX4_ADC_GPIO, \ + GPIO_TONE_ALARM_IDLE, \ + } + +#define BOARD_ENABLE_CONSOLE_BUFFER + + +#define BOARD_NUM_IO_TIMERS 6 + + +__BEGIN_DECLS + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************************************** + * Public Functions + ****************************************************************************************************/ + +/**************************************************************************** + * Name: stm32_sdio_initialize + * + * Description: + * Initialize SDIO-based MMC/SD card support + * + ****************************************************************************/ + +int stm32_sdio_initialize(void); + +/**************************************************************************************************** + * Name: stm32_spiinitialize + * + * Description: + * Called to configure SPI chip select GPIO pins for the board. + * + ****************************************************************************************************/ + +extern void stm32_spiinitialize(void); + +extern void stm32_usbinitialize(void); + +extern void board_peripheral_reset(int ms); + +#include + +#endif /* __ASSEMBLY__ */ + +__END_DECLS diff --git a/boards/micoair/h743-lite/src/bootloader_main.c b/boards/micoair/h743-lite/src/bootloader_main.c new file mode 100644 index 0000000000..5670308a29 --- /dev/null +++ b/boards/micoair/h743-lite/src/bootloader_main.c @@ -0,0 +1,75 @@ +/**************************************************************************** + * + * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file bootloader_main.c + * + * FMU-specific early startup code for bootloader +*/ + +#include "board_config.h" +#include "bl.h" + +#include +#include +#include +#include +#include +#include "arm_internal.h" +#include + +extern int sercon_main(int c, char **argv); + +__EXPORT void board_on_reset(int status) {} + +__EXPORT void stm32_boardinitialize(void) +{ + /* configure USB interfaces */ + stm32_usbinitialize(); +} + +__EXPORT int board_app_initialize(uintptr_t arg) +{ + return 0; +} + +void board_late_initialize(void) +{ + sercon_main(0, NULL); +} + +extern void sys_tick_handler(void); +void board_timerhook(void) +{ + sys_tick_handler(); +} diff --git a/boards/micoair/h743-lite/src/hw_config.h b/boards/micoair/h743-lite/src/hw_config.h new file mode 100644 index 0000000000..ac210d78d4 --- /dev/null +++ b/boards/micoair/h743-lite/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 1202 +#define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) +#define BOARD_FLASH_SECTORS (15) +#define BOARD_FLASH_SIZE (_FLASH_KBYTES * 1024) + +#define OSC_FREQ 8 + +#define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE +#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_GREEN // GREEN +#define BOARD_LED_ON 0 +#define BOARD_LED_OFF 1 + +#define SERIAL_BREAK_DETECT_DISABLED 1 + +#if !defined(ARCH_SN_MAX_LENGTH) +# define ARCH_SN_MAX_LENGTH 12 +#endif + +#if !defined(APP_RESERVATION_SIZE) +# define APP_RESERVATION_SIZE 0 +#endif + +#if !defined(BOARD_FIRST_FLASH_SECTOR_TO_ERASE) +# define BOARD_FIRST_FLASH_SECTOR_TO_ERASE 1 +#endif + +#if !defined(USB_DATA_ALIGN) +# define USB_DATA_ALIGN +#endif + +#ifndef BOOT_DEVICES_SELECTION +# define BOOT_DEVICES_SELECTION USB0_DEV|SERIAL0_DEV|SERIAL1_DEV +#endif + +#ifndef BOOT_DEVICES_FILTER_ONUSB +# define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV +#endif diff --git a/boards/micoair/h743-lite/src/i2c.cpp b/boards/micoair/h743-lite/src/i2c.cpp new file mode 100644 index 0000000000..bea7532cc3 --- /dev/null +++ b/boards/micoair/h743-lite/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), + initI2CBusExternal(2), +}; diff --git a/boards/micoair/h743-lite/src/init.c b/boards/micoair/h743-lite/src/init.c new file mode 100644 index 0000000000..c0e1f9776c --- /dev/null +++ b/boards/micoair/h743-lite/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/micoair/h743-lite/src/led.c b/boards/micoair/h743-lite/src/led.c new file mode 100644 index 0000000000..d7794392db --- /dev/null +++ b/boards/micoair/h743-lite/src/led.c @@ -0,0 +1,114 @@ +/**************************************************************************** + * + * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file led.c + * + * LED backend. + */ + +#include + +#include + +#include "chip.h" +#include "stm32_gpio.h" +#include "board_config.h" + +#include +#include + +/* + * Ideally we'd be able to get these from arm_internal.h, + * but since we want to be able to disable the NuttX use + * of leds for system indication at will and there is no + * separate switch, we need to build independent of the + * CONFIG_ARCH_LEDS configuration switch. + */ +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +extern void led_toggle(int led); +__END_DECLS + +# define xlat(p) (p) +static uint32_t g_ledmap[] = { + GPIO_nLED_GREEN, // Indexed by BOARD_LED_GREEN + GPIO_nLED_BLUE, // Indexed by BOARD_LED_BLUE + GPIO_nLED_RED, // Indexed by BOARD_LED_RED +}; + +__EXPORT void led_init(void) +{ + /* Configure LED GPIOs for output */ + for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { + if (g_ledmap[l] != 0) { + stm32_configgpio(g_ledmap[l]); + } + } +} + +static void phy_set_led(int led, bool state) +{ + /* Drive Low to switch on */ + if (g_ledmap[led] != 0) { + stm32_gpiowrite(g_ledmap[led], !state); + } +} + +static bool phy_get_led(int led) +{ + /* If Low it is on */ + if (g_ledmap[led] != 0) { + return !stm32_gpioread(g_ledmap[led]); + } + + return false; +} + + +__EXPORT void led_on(int led) +{ + phy_set_led(xlat(led), true); +} + +__EXPORT void led_off(int led) +{ + phy_set_led(xlat(led), false); +} + +__EXPORT void led_toggle(int led) +{ + phy_set_led(xlat(led), !phy_get_led(xlat(led))); +} diff --git a/boards/micoair/h743-lite/src/sdio.c b/boards/micoair/h743-lite/src/sdio.c new file mode 100644 index 0000000000..869d757756 --- /dev/null +++ b/boards/micoair/h743-lite/src/sdio.c @@ -0,0 +1,177 @@ +/**************************************************************************** + * + * Copyright (C) 2014, 2016 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "chip.h" +#include "board_config.h" +#include "stm32_gpio.h" +#include "stm32_sdmmc.h" + +#ifdef CONFIG_MMCSD + + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Card detections requires card support and a card detection GPIO */ + +#define HAVE_NCD 1 +#if !defined(GPIO_SDMMC1_NCD) +# undef HAVE_NCD +#endif + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static FAR struct sdio_dev_s *sdio_dev; +#ifdef HAVE_NCD +static bool g_sd_inserted = 0xff; /* Impossible value */ +#endif + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_ncd_interrupt + * + * Description: + * Card detect interrupt handler. + * + ****************************************************************************/ + +#ifdef HAVE_NCD +static int stm32_ncd_interrupt(int irq, FAR void *context) +{ + bool present; + + present = !stm32_gpioread(GPIO_SDMMC1_NCD); + + if (sdio_dev && present != g_sd_inserted) { + sdio_mediachange(sdio_dev, present); + g_sd_inserted = present; + } + + return OK; +} +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_sdio_initialize + * + * Description: + * Initialize SDIO-based MMC/SD card support + * + ****************************************************************************/ + +int stm32_sdio_initialize(void) +{ + int ret; + +#ifdef HAVE_NCD + /* Card detect */ + + bool cd_status; + + /* Configure the card detect GPIO */ + + stm32_configgpio(GPIO_SDMMC1_NCD); + + /* Register an interrupt handler for the card detect pin */ + + stm32_gpiosetevent(GPIO_SDMMC1_NCD, true, true, true, stm32_ncd_interrupt); +#endif + + /* Mount the SDIO-based MMC/SD block driver */ + /* First, get an instance of the SDIO interface */ + + finfo("Initializing SDIO slot %d\n", SDIO_SLOTNO); + + sdio_dev = sdio_initialize(SDIO_SLOTNO); + + if (!sdio_dev) { + syslog(LOG_ERR, "[boot] Failed to initialize SDIO slot %d\n", SDIO_SLOTNO); + return -ENODEV; + } + + /* Now bind the SDIO interface to the MMC/SD driver */ + + finfo("Bind SDIO to the MMC/SD driver, minor=%d\n", SDIO_MINOR); + + ret = mmcsd_slotinitialize(SDIO_MINOR, sdio_dev); + + if (ret != OK) { + syslog(LOG_ERR, "[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret); + return ret; + } + + finfo("Successfully bound SDIO to the MMC/SD driver\n"); + +#ifdef HAVE_NCD + /* Use SD card detect pin to check if a card is g_sd_inserted */ + + cd_status = !stm32_gpioread(GPIO_SDMMC1_NCD); + finfo("Card detect : %d\n", cd_status); + + sdio_mediachange(sdio_dev, cd_status); +#else + /* Assume that the SD card is inserted. What choice do we have? */ + + sdio_mediachange(sdio_dev, true); +#endif + + return OK; +} + +#endif /* CONFIG_MMCSD */ diff --git a/boards/micoair/h743-lite/src/spi.cpp b/boards/micoair/h743-lite/src/spi.cpp new file mode 100644 index 0000000000..148534ff85 --- /dev/null +++ b/boards/micoair/h743-lite/src/spi.cpp @@ -0,0 +1,45 @@ +/**************************************************************************** + * + * 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::SPI3, { + initSPIDevice(DRV_IMU_DEVTYPE_ICM45686, SPI::CS{GPIO::PortD, GPIO::Pin4}, SPI::DRDY{GPIO::PortD, GPIO::Pin5}), + }), +}; + +static constexpr bool unused = validateSPIConfig(px4_spi_buses); diff --git a/boards/micoair/h743-lite/src/timer_config.cpp b/boards/micoair/h743-lite/src/timer_config.cpp new file mode 100644 index 0000000000..050d3b0dc4 --- /dev/null +++ b/boards/micoair/h743-lite/src/timer_config.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** + * + * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include + +constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { + initIOTimer(Timer::Timer1, DMA{DMA::Index1}), + initIOTimer(Timer::Timer3, DMA{DMA::Index1}), + initIOTimer(Timer::Timer4, DMA{DMA::Index1}), + initIOTimer(Timer::Timer12), + initIOTimer(Timer::Timer15), +}; + +constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel2}, {GPIO::PortA, GPIO::Pin7}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel1}, {GPIO::PortA, GPIO::Pin6}), + initIOTimerChannel(io_timers, {Timer::Timer15, Timer::Channel1}, {GPIO::PortE, GPIO::Pin5}), + initIOTimerChannel(io_timers, {Timer::Timer15, Timer::Channel2}, {GPIO::PortE, GPIO::Pin6}), + 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::Timer12, Timer::Channel1}, {GPIO::PortB, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer12, Timer::Channel2}, {GPIO::PortB, GPIO::Pin15}), + +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/micoair/h743-lite/src/usb.c b/boards/micoair/h743-lite/src/usb.c new file mode 100644 index 0000000000..9591784866 --- /dev/null +++ b/boards/micoair/h743-lite/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); +}