From 9a39c8832796babae2dd67f479cb16d8f2a9eed8 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Wed, 26 Oct 2022 15:04:25 +0200 Subject: [PATCH] boards/esp32s2-mini: add definition for ESP32 S2 Mini --- boards/esp32s2-wemos-mini/Kconfig | 24 +++ boards/esp32s2-wemos-mini/Makefile | 5 + boards/esp32s2-wemos-mini/Makefile.dep | 2 + boards/esp32s2-wemos-mini/Makefile.features | 15 ++ boards/esp32s2-wemos-mini/Makefile.include | 9 ++ boards/esp32s2-wemos-mini/doc.txt | 44 ++++++ .../esp32s2-wemos-mini.config | 2 + boards/esp32s2-wemos-mini/include/board.h | 80 ++++++++++ .../esp32s2-wemos-mini/include/gpio_params.h | 50 ++++++ .../esp32s2-wemos-mini/include/periph_conf.h | 148 ++++++++++++++++++ 10 files changed, 379 insertions(+) create mode 100644 boards/esp32s2-wemos-mini/Kconfig create mode 100644 boards/esp32s2-wemos-mini/Makefile create mode 100644 boards/esp32s2-wemos-mini/Makefile.dep create mode 100644 boards/esp32s2-wemos-mini/Makefile.features create mode 100644 boards/esp32s2-wemos-mini/Makefile.include create mode 100644 boards/esp32s2-wemos-mini/doc.txt create mode 100644 boards/esp32s2-wemos-mini/esp32s2-wemos-mini.config create mode 100644 boards/esp32s2-wemos-mini/include/board.h create mode 100644 boards/esp32s2-wemos-mini/include/gpio_params.h create mode 100644 boards/esp32s2-wemos-mini/include/periph_conf.h diff --git a/boards/esp32s2-wemos-mini/Kconfig b/boards/esp32s2-wemos-mini/Kconfig new file mode 100644 index 0000000000..c9ed4f88ce --- /dev/null +++ b/boards/esp32s2-wemos-mini/Kconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2022 Benjamin Valentin +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. + +config BOARD + default "esp32s2-wemos-mini" if BOARD_ESP32S2_WEMOS_MINI + +config BOARD_ESP32S2_WEMOS_MINI + bool + default y + select BOARD_COMMON_ESP32S2 + select CPU_MODEL_ESP32S2_FN4R2 + select HAS_PERIPH_ADC + select HAS_PERIPH_DAC + select HAS_PERIPH_I2C + select HAS_PERIPH_PWM + select HAS_PERIPH_SPI + select HAS_PERIPH_USBDEV + select HAS_TINYUSB_DEVICE + select HAS_HIGHLEVEL_STDIO + +source "$(RIOTBOARD)/common/esp32s2/Kconfig" diff --git a/boards/esp32s2-wemos-mini/Makefile b/boards/esp32s2-wemos-mini/Makefile new file mode 100644 index 0000000000..c71e835d77 --- /dev/null +++ b/boards/esp32s2-wemos-mini/Makefile @@ -0,0 +1,5 @@ +MODULE = board + +DIRS = $(RIOTBOARD)/common/esp32s2 + +include $(RIOTBASE)/Makefile.base diff --git a/boards/esp32s2-wemos-mini/Makefile.dep b/boards/esp32s2-wemos-mini/Makefile.dep new file mode 100644 index 0000000000..d6656ade1c --- /dev/null +++ b/boards/esp32s2-wemos-mini/Makefile.dep @@ -0,0 +1,2 @@ +include $(RIOTBOARD)/common/makefiles/stdio_tinyusb_cdc_acm.dep.mk +include $(RIOTBOARD)/common/esp32s2/Makefile.dep diff --git a/boards/esp32s2-wemos-mini/Makefile.features b/boards/esp32s2-wemos-mini/Makefile.features new file mode 100644 index 0000000000..47424ec433 --- /dev/null +++ b/boards/esp32s2-wemos-mini/Makefile.features @@ -0,0 +1,15 @@ +CPU_MODEL = esp32s2_fn4r2 + +# common board and CPU features +include $(RIOTBOARD)/common/esp32s2/Makefile.features + +# additional features provided by the board +FEATURES_PROVIDED += periph_adc +FEATURES_PROVIDED += periph_dac +FEATURES_PROVIDED += periph_i2c +FEATURES_PROVIDED += periph_pwm +FEATURES_PROVIDED += periph_spi +FEATURES_PROVIDED += periph_usbdev + +FEATURES_PROVIDED += highlevel_stdio +FEATURES_PROVIDED += tinyusb_device diff --git a/boards/esp32s2-wemos-mini/Makefile.include b/boards/esp32s2-wemos-mini/Makefile.include new file mode 100644 index 0000000000..4f38951c63 --- /dev/null +++ b/boards/esp32s2-wemos-mini/Makefile.include @@ -0,0 +1,9 @@ +PORT_LINUX ?= /dev/ttyACM0 + +USB_VID ?= $(USB_VID_TESTING) +USB_PID ?= $(USB_PID_TESTING) + +CFLAGS += -DCONFIG_CONSOLE_UART_TX=39 +CFLAGS += -DCONFIG_CONSOLE_UART_RX=37 + +include $(RIOTBOARD)/common/esp32s2/Makefile.include diff --git a/boards/esp32s2-wemos-mini/doc.txt b/boards/esp32s2-wemos-mini/doc.txt new file mode 100644 index 0000000000..808db48c27 --- /dev/null +++ b/boards/esp32s2-wemos-mini/doc.txt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2022 Benjamin Valentin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @defgroup boards_esp32s2-wemos-mini Wemos S2 mini Board + * @ingroup boards_esp32s2 + * @brief Support for Wemos S2 mini Board + * @author Benjamin Valentin + +\section esp32s2-wemos-mini Wemos S2 mini + +## Overview {#esp32s2-wemos-mini_overview} + +\image html "https://www.wemos.cc/en/latest/_images/s2_mini_v1.0.0_4_16x9.jpg" "Wemos S2 mini" width=600px + +Documentation for the board can be found on the vendor page: + +- [Wemos S2 mini](https://www.wemos.cc/en/latest/s2/s2_mini.html) +- [Schematic](https://www.wemos.cc/en/latest/_static/files/sch_s2_mini_v1.0.0.pdf) + +## Flashing the Device {#esp32s2-wemos-mini_flashing} + +Flashing RIOT is quite easy. The board has a Micro-USB connector with +reset/boot/flash logic. Just connect the board to your host computer +and type using the programming port: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +BOARD=esp32s2-wemos-mini make flash +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If RIOT is already on the device, it should automatically enter bootloader mode. +If this does not work or the device is stuck in some other mode, you can force +it into bootloader mode by pressing the Reset (RST) button while holding the BOOT (0) +button. + +For detailed information about ESP32-S2 as well as configuring and compiling +RIOT for ESP32-S2 boards, see \ref esp32_riot. + +[Back to table of contents](#esp32s2-wemos-mini_toc) + */ diff --git a/boards/esp32s2-wemos-mini/esp32s2-wemos-mini.config b/boards/esp32s2-wemos-mini/esp32s2-wemos-mini.config new file mode 100644 index 0000000000..9c22162241 --- /dev/null +++ b/boards/esp32s2-wemos-mini/esp32s2-wemos-mini.config @@ -0,0 +1,2 @@ +CONFIG_PACKAGE_TINYUSB=y +CONFIG_MODULE_STDIO_TINYUSB_CDC_ACM=y diff --git a/boards/esp32s2-wemos-mini/include/board.h b/boards/esp32s2-wemos-mini/include/board.h new file mode 100644 index 0000000000..4f40d008d5 --- /dev/null +++ b/boards/esp32s2-wemos-mini/include/board.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2022 Benjamin Valentin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_esp32s2-wemos-mini + * @brief Board definitions for Wemos S2 mini board + * @{ + * + * The board definitions in this file is valid for the Wemos S2 mini board. + * + * @file + * @author Benjamin Valentin + */ + +#ifndef BOARD_H +#define BOARD_H + +#include + +/** + * @name Button pin definitions + * @{ + */ + +/** + * @brief Default button GPIO pin definition + * + * Wemos S2 mini boards have a BOOT button connected to GPIO0, which can be + * used as button during normal operation. Since the GPIO0 pin is pulled up, + * the button signal is inverted, i.e., pressing the button will give a + * low signal. + */ +#define BTN0_PIN GPIO0 + +/** + * @brief Default button GPIO mode definition + */ +#define BTN0_MODE GPIO_IN_PU + +/** + * @brief Default interrupt flank definition for the button GPIO + */ +#ifndef BTN0_INT_FLANK +#define BTN0_INT_FLANK GPIO_FALLING +#endif + +/** + * @brief Definition for compatibility with previous versions + */ +#define BUTTON0_PIN BTN0_PIN + +/** @} */ + +/** + * @name LED (on-board) configuration + * + * @{ + */ +#define LED0_PIN GPIO15 /**< LED is connected to GPIO15 */ +#define LED0_ACTIVE 1 /**< LED is high active */ +/** @} */ + +/* include common board definitions as last step */ +#include "board_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* end extern "C" */ +#endif + +#endif /* BOARD_H */ +/** @} */ diff --git a/boards/esp32s2-wemos-mini/include/gpio_params.h b/boards/esp32s2-wemos-mini/include/gpio_params.h new file mode 100644 index 0000000000..2cfe747ea8 --- /dev/null +++ b/boards/esp32s2-wemos-mini/include/gpio_params.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2022 Benjamin Valentin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +#ifndef GPIO_PARAMS_H +#define GPIO_PARAMS_H + +/** + * @ingroup boards_esp32s2-wemos-mini + * @brief Board specific configuration of direct mapped GPIOs + * @file + * @author Benjamin Valentin + * @{ + */ + +#include "board.h" +#include "saul/periph.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief LED and Button configuration + */ +static const saul_gpio_params_t saul_gpio_params[] = +{ + { + .name = "LED", + .pin = LED0_PIN, + .mode = GPIO_OUT, + }, + { + .name = "BOOT", + .pin = BTN0_PIN, + .mode = BTN0_MODE, + .flags = SAUL_GPIO_INVERTED + }, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* GPIO_PARAMS_H */ +/** @} */ diff --git a/boards/esp32s2-wemos-mini/include/periph_conf.h b/boards/esp32s2-wemos-mini/include/periph_conf.h new file mode 100644 index 0000000000..5e5a5e2009 --- /dev/null +++ b/boards/esp32s2-wemos-mini/include/periph_conf.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2022 Benjamin Valentin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_esp32s2-wemos-mini + * @brief Peripheral configurations for Wemos S2 mini boards + * @{ + * + * The peripheral configurations in this file can be used for Espressif + * Wemos S2 mini boards. + * + * @file + * @author Benjamin Valentin + */ + +#ifndef PERIPH_CONF_H +#define PERIPH_CONF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @name ADC and DAC channel configuration + * @{ + */ +/** + * @brief Declaration of GPIOs that can be used as ADC channels + * + * @note As long as the GPIOs listed in ADC_GPIOS are not initialized as ADC + * channels with the `adc_init` function, they can be used for other + * purposes. + */ +#ifndef ADC_GPIOS +#define ADC_GPIOS { GPIO3, GPIO1, GPIO2, GPIO4, GPIO5, GPIO6, GPIO8, GPIO10 } +#endif + +/** + * @brief Declaration of GPIOs that can be used as DAC channels + * + * @note As long as the GPIOs listed in DAC_GPIOS are not initialized as DAC + * channels with the `dac_init` function, they can be used for other + * purposes. + */ +#ifndef DAC_GPIOS +#define DAC_GPIOS { GPIO17, GPIO18 } +#endif +/** @} */ + +/** + * @name I2C configuration + * + * Only I2C interface I2C_DEV(0) is used. + * + * @note The GPIOs listed in the configuration are only initialized as I2C + * signals when module `periph_i2c` is used. Otherwise they are not + * allocated and can be used for other purposes. + * + * @{ + */ +#ifndef I2C0_SPEED +#define I2C0_SPEED I2C_SPEED_FAST /**< I2C bus speed of I2C_DEV(0) */ +#endif +#ifndef I2C0_SCL +#define I2C0_SCL GPIO35 /**< SCL signal of I2C_DEV(0) */ +#endif +#ifndef I2C0_SDA +#define I2C0_SDA GPIO33 /**< SDA signal of I2C_DEV(0) */ +#endif +/** @} */ + +/** + * @name PWM channel configuration + * + * @note As long as the according PWM device is not initialized with + * the `pwm_init`, the GPIOs declared for this device can be used + * for other purposes. + * + * @{ + */ + +/** + * @brief Declaration of the channels for device PWM_DEV(0), + * at maximum PWM_CHANNEL_NUM_DEV_MAX. + */ +#ifndef PWM0_GPIOS +#define PWM0_GPIOS { GPIO13, GPIO14, GPIO15 } +#endif +/** @} */ + +/** + * @name SPI configuration + * + * @note The GPIOs listed in the configuration are first initialized as SPI + * signals when the corresponding SPI interface is used for the first time + * by either calling the `spi_init_cs` function or the `spi_acquire` + * function. That is, they are not allocated as SPI signals before and can + * be used for other purposes as long as the SPI interface is not used. + * @{ + */ +#ifndef SPI0_CTRL +#define SPI0_CTRL FSPI /**< FSPI is used as SPI_DEV(0) */ +#endif +#ifndef SPI0_SCK +#define SPI0_SCK GPIO7 /**< FSPI SCK (pin FSPICLK) */ +#endif +#ifndef SPI0_MISO +#define SPI0_MISO GPIO9 /**< FSPI MISO (pin FSPIQ) */ +#endif +#ifndef SPI0_MOSI +#define SPI0_MOSI GPIO11 /**< FSPI MOSI (pin FSPID) */ +#endif +#ifndef SPI0_CS0 +#define SPI0_CS0 GPIO12 /**< FSPI CS0 (pin FSPICS0) */ +#endif +/** @} */ + +/** + * @name UART configuration + * + * ESP32-S2 provides 2 UART interfaces at maximum: + * + * UART_DEV(0) uses Wemos standard pinout.
+ * UART_DEV(1) is not used.
+ * + * @{ + */ +#define UART0_TXD GPIO39 /**< direct I/O pin for UART_DEV(0) TxD */ +#define UART0_RXD GPIO37 /**< direct I/O pin for UART_DEV(0) RxD */ + +/** @} */ + +#ifdef __cplusplus +} /* end extern "C" */ +#endif + +/* include common peripheral definitions as last step */ +#include "periph_conf_common.h" + +#endif /* PERIPH_CONF_H */ +/** @} */