From 79d103459a0f0f85d53b464f13a1aecd9ea42ce2 Mon Sep 17 00:00:00 2001 From: Nicholas Kruzan Date: Mon, 15 May 2023 16:50:33 +0000 Subject: [PATCH] AP_HAL_ESP32: new board: esp32s3devkit --- libraries/AP_HAL_ESP32/boards/esp32s3devkit.h | 190 ++++++++++++++++++ .../hwdef/esp32s3devkit/README.MD | 1 + .../hwdef/esp32s3devkit/hwdef.dat | 0 3 files changed, 191 insertions(+) create mode 100644 libraries/AP_HAL_ESP32/boards/esp32s3devkit.h create mode 100644 libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/README.MD create mode 100644 libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/hwdef.dat diff --git a/libraries/AP_HAL_ESP32/boards/esp32s3devkit.h b/libraries/AP_HAL_ESP32/boards/esp32s3devkit.h new file mode 100644 index 0000000000..07b6e8055c --- /dev/null +++ b/libraries/AP_HAL_ESP32/boards/esp32s3devkit.h @@ -0,0 +1,190 @@ +/* + * This file is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +#pragma once + +#define CONFIG_HAL_BOARD_SUBTYPE HAL_BOARD_SUBTYPE_ESP32_S3DEVKIT +// make sensor selection clearer +#define PROBE_IMU_I2C(driver, bus, addr, args ...) ADD_BACKEND(AP_InertialSensor_ ## driver::probe(*this,GET_I2C_DEVICE(bus, addr),##args)) +#define PROBE_IMU_SPI(driver, devname, args ...) ADD_BACKEND(AP_InertialSensor_ ## driver::probe(*this,hal.spi->get_device(devname),##args)) +#define PROBE_IMU_SPI2(driver, devname1, devname2, args ...) ADD_BACKEND(AP_InertialSensor_ ## driver::probe(*this,hal.spi->get_device(devname1),hal.spi->get_device(devname2),##args)) + +#define PROBE_BARO_I2C(driver, bus, addr, args ...) ADD_BACKEND(AP_Baro_ ## driver::probe(*this,std::move(GET_I2C_DEVICE(bus, addr)),##args)) +#define PROBE_BARO_SPI(driver, devname, args ...) ADD_BACKEND(AP_Baro_ ## driver::probe(*this,std::move(hal.spi->get_device(devname)),##args)) + +#define PROBE_MAG_I2C(driver, bus, addr, args ...) ADD_BACKEND(DRIVER_ ##driver, AP_Compass_ ## driver::probe(GET_I2C_DEVICE(bus, addr),##args)) +#define PROBE_MAG_SPI(driver, devname, args ...) ADD_BACKEND(DRIVER_ ##driver, AP_Compass_ ## driver::probe(hal.spi->get_device(devname),##args)) +#define PROBE_MAG_IMU(driver, imudev, imu_instance, args ...) ADD_BACKEND(DRIVER_ ##driver, AP_Compass_ ## driver::probe_ ## imudev(imu_instance,##args)) +#define PROBE_MAG_IMU_I2C(driver, imudev, bus, addr, args ...) ADD_BACKEND(DRIVER_ ##driver, AP_Compass_ ## driver::probe_ ## imudev(GET_I2C_DEVICE(bus,addr),##args)) + +//- these are missing from esp-idf......will not be needed later +#define RTC_WDT_STG_SEL_OFF 0 +#define RTC_WDT_STG_SEL_INT 1 +#define RTC_WDT_STG_SEL_RESET_CPU 2 +#define RTC_WDT_STG_SEL_RESET_SYSTEM 3 +#define RTC_WDT_STG_SEL_RESET_RTC 4 + +#define HAL_ESP32_BOARD_NAME "esp32s3devkit" + +#define HAL_ESP32_RMT_RX_PIN_NUMBER GPIO_NUM_14 + +//#define CONFIG_HAL_BOARD 12 +//#define HAL_BOARD_ESP32 12 +#define AP_INERTIALSENSOR_ENABLED 1 +//INS choices: +#define HAL_INS_DEFAULT HAL_INS_MPU9250_SPI +//#define HAL_INS_MPU9250_NAME "MPU9250" + +// or this: +//#define HAL_INS_DEFAULT HAL_INS_ICM20XXX_I2C +//#define HAL_INS_ICM20XXX_I2C_BUS 0 +//#define HAL_INS_ICM20XXX_I2C_ADDR (0x68) + +// BARO choices: +#define HAL_BARO_DEFAULT HAL_BARO_BMP280_I2C +#define HAL_BARO_BMP280_NAME "BMP280" +// or one of these: +//#define HAL_BARO_DEFAULT HAL_BARO_MS5837_I2C +// or: GPIO 34 +//#define HAL_BARO_ANALOG_PIN (6) + +// MAG/COMPASS choices: +#define HAL_COMPASS_DEFAULT HAL_COMPASS_AK8963_MPU9250 +// or others: +//#define HAL_COMPASS_ICM20948_I2C_ADDR (0x68) +//#define HAL_COMPASS_AK09916_I2C_BUS 0 +//#define HAL_COMPASS_AK09916_I2C_ADDR (0x0C) +//#define HAL_COMPASS_MAX_SENSORS 3 + +// IMU probing: +//#define HAL_INS_PROBE_LIST PROBE_IMU_I2C(Invensensev2, 0, 0x68, ROTATION_YAW_270) +// MAG/COMPASS probing: +//#define HAL_MAG_PROBE_LIST ADD_BACKEND(DRIVER_ICM20948, AP_Compass_AK09916::probe_ICM20948_I2C(0, ROTATION_NONE)); +//#define HAL_MAG_PROBE_LIST PROBE_MAG_SPI(Invensense, "mpu9250") +// BARO probing: +#define HAL_BARO_PROBE_LIST PROBE_BARO_I2C(BMP280, 0, 0x77) + +// allow boot without a baro +#define HAL_BARO_ALLOW_INIT_NO_BARO 1 + + +// ADC is available on lots of pints on the esp32, but adc2 cant co-exist with wifi we choose to allow ADC on : +//#define HAL_DISABLE_ADC_DRIVER 1 +#define TRUE 1 +#define HAL_USE_ADC TRUE + +// the pin number, the gain/multiplier associated with it, the ardupilot name for the pin in parameter/s. +// +// two different pin numbering schemes, both are ok, but only one at a time: +#define HAL_ESP32_ADC_PINS_OPTION1 {\ + {ADC1_CHANNEL_4, 11, 1},\ + {ADC1_CHANNEL_3, 11, 2},\ + {ADC1_CHANNEL_1, 11, 3},\ + {ADC1_CHANNEL_0, 11, 4}\ +} +#define HAL_ESP32_ADC_PINS_OPTION2 {\ + {ADC1_GPIO35_CHANNEL, 11, 35},\ + {ADC1_GPIO34_CHANNEL, 11, 34},\ + {ADC1_GPIO39_CHANNEL, 11, 39},\ + {ADC1_GPIO36_CHANNEL, 11, 36}\ +} +// pick one: +//#define HAL_ESP32_ADC_PINS HAL_ESP32_ADC_PINS_OPTION1 +#define HAL_ESP32_ADC_PINS HAL_ESP32_ADC_PINS_OPTION1 + +#define HAL_INS_MPU9250_NAME "mpu9250" + +// uncommenting one or more of these will give more console debug in certain areas.. +//#define INSEDEBUG 1 +//#define STORAGEDEBUG 1 +//#define SCHEDDEBUG 1 +//#define FSDEBUG 1 +//#define BUSDEBUG 1 + +#define HAL_INS_PROBE_LIST PROBE_IMU_SPI( Invensense, HAL_INS_MPU9250_NAME, ROTATION_NONE) +//#define HAL_INS_PROBE_LIST PROBE_IMU_SPI( Invensense, HAL_INS_MPU9250_NAME, ROTATION_ROLL_180) +// MAG/COMPASS probing: +#define AP_COMPASS_AK8963_ENABLED TRUE +#define HAL_MAG_PROBE_LIST ADD_BACKEND(DRIVER_AK8963, AP_Compass_AK8963::probe_mpu9250(0, ROTATION_NONE)) +#define HAL_PROBE_EXTERNAL_I2C_COMPASSES 1 + +//#define HAL_BARO_PROBE_LIST PROBE_BARO_SPI(BMP280, "bmp280") + +// 2 use udp, 1 use tcp... for udp,client needs to connect as UDPCL in missionplanner etc to 192.168.4.1 port 14550 +#define HAL_ESP32_WIFI 1 + +// tip: if u are ok getting mavlink-over-tcp or mavlink-over-udp and want to disable mavlink-over-serial-usb +//then set ardupilot parameter SERIAL0_PROTOCOL = 0 and reboot. +// u also will/may want.. +//LOG_BACKEND_TYPE 1 +//LOG_DISARMED 1 +//SERIAL0_PROTOCOL 0 + + +// see boards.py +#ifndef ENABLE_HEAP +#define ENABLE_HEAP 1 +#endif + +#define WIFI_SSID "ardupilot123" +#define WIFI_PWD "ardupilot123" + +//RCOUT which pins are used? + +#define HAL_ESP32_RCOUT { GPIO_NUM_11,GPIO_NUM_10, GPIO_NUM_9, GPIO_NUM_8, GPIO_NUM_7, GPIO_NUM_6 } + +// SPI BUS setup, including gpio, dma, etc +// note... we use 'vspi' for the bmp280 and mpu9250 +#define HAL_ESP32_SPI_BUSES \ + {.host=SPI3_HOST, .dma_ch=SPI_DMA_CH_AUTO, .mosi=GPIO_NUM_36, .miso=GPIO_NUM_37, .sclk=GPIO_NUM_35} +// tip: VSPI_HOST is an alternative name for esp's SPI3 +//#define HAL_ESP32_SPI_BUSES {} + +// SPI per-device setup, including speeds, etc. +#define HAL_ESP32_SPI_DEVICES \ + {.name="mpu9250", .bus=0, .device=0, .cs=GPIO_NUM_34, .mode = 0, .lspeed=2*MHZ, .hspeed=8*MHZ} +//#define HAL_ESP32_SPI_DEVICES {} + +//I2C bus list +#define HAL_ESP32_I2C_BUSES \ + {.port=I2C_NUM_0, .sda=GPIO_NUM_16, .scl=GPIO_NUM_15, .speed=400*KHZ, .internal=true} +//#define HAL_ESP32_I2C_BUSES {} // using this embty block appears to cause crashes? + + +// rcin on what pin? +#define HAL_ESP32_RCIN GPIO_NUM_14 + + +//HARDWARE UARTS +#define HAL_ESP32_UART_DEVICES \ + {.port=UART_NUM_0, .rx=GPIO_NUM_44, .tx=GPIO_NUM_43 },{.port=UART_NUM_1, .rx=GPIO_NUM_17, .tx=GPIO_NUM_18 } + +#define HAVE_FILESYSTEM_SUPPORT 1 + +// Do u want to use mmc or spi mode for the sd card, this is board specific , +// as mmc uses specific pins but is quicker, +#define HAL_ESP32_SDMMC 1 +// and spi is more flexible pinouts.... dont forget vspi/hspi should be selected to NOT conflict with SPI_BUSES above +//#define HAL_ESP32_SDSPI {.host=VSPI_HOST, .dma_ch=2, .mosi=GPIO_NUM_2, .miso=GPIO_NUM_15, .sclk=GPIO_NUM_14, .cs=GPIO_NUM_21} + +#define HAL_ESP32_SDCARD 1 +#define LOGGER_MAVLINK_SUPPORT 1 +#define HAL_BOARD_LOG_DIRECTORY "/SDCARD/APM/LOGS" +#define HAL_BOARD_TERRAIN_DIRECTORY "/SDCARD/APM/TERRAIN" +#define HAL_BOARD_STORAGE_DIRECTORY "/SDCARD/APM/STORAGE" +#define HAL_OS_POSIX_IO 1 + +// this becomes the default value for the ardupilot param LOG_BACKEND_TYPE, which most ppl want to be 1, for log-to-flash +// setting to 2 means log-over-mavlink to a companion computer etc. +#define HAL_LOGGING_BACKENDS_DEFAULT 1 diff --git a/libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/README.MD b/libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/README.MD new file mode 100644 index 0000000000..4750cd0626 --- /dev/null +++ b/libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/README.MD @@ -0,0 +1 @@ +to be added later diff --git a/libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/hwdef.dat b/libraries/AP_HAL_ESP32/hwdef/esp32s3devkit/hwdef.dat new file mode 100644 index 0000000000..e69de29bb2