Specific properties of ESP32-S2 variant (family)
Specific properties of ESP32-S2 variant (family)
There are many different versions of the ESP32-S2 chip and ESP32-S2 modules used on ESP32-S2 boards. They differ in the size of embedded Flash and SPI RAM as well as used SPI mode for Flash and SPI RAM. These differences allow dozens of different versions of a board. For example, there are 8 versions of the ESP32-S2 DevKitC-1 board with different flash and SPI RAM sizes.
| Chip | Flash (Mode) | SPI RAM (Mode) |
|---|---|---|
| ESP32-S2 | - | - |
| ESP32-S2FH2 | 2 MB (Quad SPI) | - |
| ESP32-S2FH4 | 4 MB (Quad SPI) | - |
| ESP32-S2FN4R2 | 4 MB (Quad SPI) | 2 MB (Quad SPI) |
| ESP32-S2R2 | - | 2 MB (Quad SPI) |
| Module | Chip | Flash (Mode) | SPI RAM (Mode) |
|---|---|---|---|
| ESP32-S2-MINI-1x-H4 | ESP32-S2FH4 | 4 MB (Quad SPI) | - |
| ESP32-S2-MINI-1x-N4 | ESP32-S2FH4 | 4 MB (Quad SPI) | - |
| ESP32-S2-MINI-1x-N4R2 | ESP32-S2N4R2 | 4 MB (Quad SPI) | 2 MB (Quad SPI) |
| ESP32-S2-SOLO-H4 | ESP32-S2 | 4 MB (Quad SPI) | - |
| ESP32-S2-SOLO-N4 | ESP32-S2 | 4 MB (Quad SPI) | - |
| ESP32-S2-SOLO-N4R2 | ESP32-S2R2 | 4 MB (Quad SPI) | 2 MB (Quad SPI) |
| ESP32-S2-WROOM | ESP32-S2 | 4 MB (Quad SPI) | - |
| ESP32-S2-WROVER | ESP32-S2 | 4 MB (Quad SPI) | 2 MB (Quad SPI) |
x Stands for the module versions with and without U (external antenna connector).
Depending on the chip or module used, it has to be specified as a feature in the board definition whether SPI RAM is available (feature esp_spi_ram).
If the feature esp_spi_ram is given, the SPI RAM can be used as heap by using the pseudo module esp_spi_ram.
If Quad SPI mode is used, GPIO26 ... GPIO32 are occupied and cannot be used for other purposes. In case of Octal SPI mode, the pseudomodule esp_spi_oct is additionally enabled and GPIO33 ... GPIO37 are occupied if the SPI RAM is enabled by using the pseudomodule esp_spi_ram. GPIO33 ... GPIO37 are then not available for other purposes. Conflicts may occur when using these GPIOs.
ESP32-S2 has 45 GPIO pins, where a subset can be used as ADC channel and as low-power digital input/output in deep-sleep mode, the so-called RTC GPIOs. Some of them are used by special SoC components and are not broken out on all ESP32-S2 modules. The following table gives a short overview.
| Pin | Type | ADC | RTC | PU / PD | Special function | Remarks |
|---|---|---|---|---|---|---|
| GPIO0 | In/Out | - | X | X | - | Bootstrapping |
| GPIO1 | In/Out | X | X | X | - | - |
| GPIO2 | In/Out | X | X | X | - | - |
| GPIO3 | In/Out | X | X | X | - | Bootstrapping |
| GPIO4 | In/Out | X | X | X | - | - |
| GPIO5 | In/Out | X | X | X | - | - |
| GPIO6 | In/Out | X | X | X | - | - |
| GPIO7 | In/Out | X | X | X | - | - |
| GPIO8 | In/Out | X | X | X | - | - |
| GPIO9 | In/Out | X | X | X | - | - |
| GPIO10 | In/Out | X | X | X | - | - |
| GPIO11 | In/Out | X | X | X | - | - |
| GPIO12 | In/Out | X | X | X | - | - |
| GPIO13 | In/Out | X | X | X | - | - |
| GPIO14 | In/Out | X | X | X | - | - |
| GPIO15 | In/Out | X | X | X | XTAL_32K_P | External 32k crystal |
| GPIO16 | In/Out | X | X | X | XTAL_32K_N | External 32k crystal |
| GPIO17 | In/Out | X | X | X | DAC1 | - |
| GPIO18 | In/Out | X | X | X | DAC2 | - |
| GPIO19 | In/Out | X | X | X | USB D- | USB 2.0 OTG / USB-JTAG bridge |
| GPIO20 | In/Out | X | X | X | USB D+ | USB 2.0 OTG / USB-JTAG bridge |
| GPIO21 | In/Out | - | X | X | - | - |
| GPIO26 | In/Out | - | - | X | Flash/PSRAM SPICS1 | not available if SPI RAM is used |
| GPIO27 | In/Out | - | - | X | Flash/PSRAM SPIHD | not available |
| GPIO28 | In/Out | - | - | X | Flash/PSRAM SPIWP | not available |
| GPIO29 | In/Out | - | - | X | Flash/PSRAM SPICS0 | not available |
| GPIO30 | In/Out | - | - | X | Flash/PSRAM SPICLK | not available |
| GPIO31 | In/Out | - | - | X | Flash/PSRAM SPIQ | not available |
| GPIO32 | In/Out | - | - | X | Flash/PSRAM SPID | not available |
| GPIO33 | In/Out | - | - | X | Flash/PSRAM SPIQ4 | not available if octal Flash or SPI RAM is used |
| GPIO34 | In/Out | - | - | X | Flash/PSRAM SPIQ5 | not available if octal Flash or SPI RAM is used |
| GPIO35 | In/Out | - | - | X | Flash/PSRAM SPIQ6 | not available if octal Flash or SPI RAM is used |
| GPIO36 | In/Out | - | - | X | Flash/PSRAM SPIQ7 | not available if octal Flash or SPI RAM is used |
| GPIO37 | In/Out | - | - | X | Flash/PSRAM SPIQ8 | not available if octal Flash or SPI RAM is used |
| GPIO38 | In/Out | - | - | X | Flash/PSRAM SPIDQS | not available if octal Flash or SPI RAM is used |
| GPIO39 | In/Out | - | - | X | MTCK | JTAG interface |
| GPIO40 | In/Out | - | - | X | MTDO | JTAG interface |
| GPIO41 | In/Out | - | - | X | MTDI | JTAG interface |
| GPIO42 | In/Out | - | - | X | MTMS | JTAG interface |
| GPIO43 | In/Out | - | - | X | UART0 TX | Console |
| GPIO44 | In/Out | - | - | X | UART0 RX | Console |
| GPIO45 | In/Out | - | - | X | - | Bootstrapping (0 - 3.3V, 1 - 1.8V) |
| GPIO46 | In/Out | - | - | X | - | Bootstrapping |
| GPIO47 | In/Out | - | - | X | SPICLK_P | - |
| GPIO48 | In/Out | - | - | X | SPICLK_N | - |
PSRAM - Stands for pseudo-static RAM and refers to the SPI RAM.
ADC: Pins that can be used as ADC channels.
RTC: Pins that are RTC GPIOs and can be used in deep-sleep mode.
PU/PD: Pins that have software configurable pull-up/pull-down functionality.
GPIO0, GPIO3, GPIO45 and GPIO46 are bootstrapping. GPIO0 and GPIO46 pins are used to boot ESP32-S2 in different modes:
| GPIO0 | GPIO46 | Mode |
|---|---|---|
| 1 | X | SPI Boot mode to boot the firmware from flash (default mode) |
| 0 | 1 | Download Boot mode for flashing the firmware |
If EFUSE_STRAP_JTAG_SEL is set, GPIO3 is used to select the interface that is used as JTAG interface.
| GPIO3 | Mode |
|---|---|
| 1 | USB-JTAG bridge at GPIO19 and GPIO20 is used as JTAG interface |
| 0 | GPIO39 to GPIO42 are used as JTAG interface |
If EFUSE_DIS_USB_JTAG or EFUSE_DIS_PAD_JTAG are set, the interface selection is fixed and GPIO3 is not used as bootstrapping pin.GPIO45 is used to select the voltage VDD_SPI for the Flash/PSRAM interfaces SPI0 and SPI1.
ESP32-S2 integrates two 12-bit ADCs (ADC1 and ADC2) with 20 channels in total:
esp_wifi or esp_now are used.ESP32 SoC supports 2 DAC lines at GPIO17 and GPIO18.
ESP32-S2 has two built-in I2C interfaces.
The following table shows the default configuration of I2C interfaces used for ESP32-S2 boards. It can be overridden by application-specific configurations.
| Device | Signal | Pin | Symbol | Remarks |
|---|---|---|---|---|
| I2C_DEV(0) | #I2C0_SPEED | default is I2C_SPEED_FAST | ||
| I2C_DEV(0) | SCL | GPIO9 | #I2C0_SCL | - |
| I2C_DEV(0) | SDA | GPIO8 | #I2C0_SDA | - |
The ESP32-S2 LEDC module has 1 channel group with 8 channels. Each of these channels can be clocked by one of the 4 timers.
ESP32-S2 has four SPI controllers where SPI0 and SPI1 share the same bus and can only operate in memory mode while SPI2 and SPI3 can be used as general purpose SPI:
Thus, SPI2 (FSPI) and SPI3 can be used as general purpose SPI in RIOT as SPI_DEV(0) and SPI_DEV(1) by defining the symbols SPI0_* and SPI1_*.
The following table shows the pin configuration used by default, even though it can vary from board to board.
| Device | Signal | Pin | Symbol | Remarks |
|---|---|---|---|---|
SPI0_HOST/SPI1_HOST | SPICS0 | GPIO29 | - | reserved for flash and PSRAM |
SPI0_HOST/SPI1_HOST | SPICS1 | GPIO26 | - | reserved for flash and PSRAM |
SPI0_HOST/SPI1_HOST | SPICLK | GPIO30 | - | reserved for flash and PSRAM |
SPI0_HOST/SPI1_HOST | SPID | GPIO32 | - | reserved for flash and PSRAM |
SPI0_HOST/SPI1_HOST | SPIQ | GPIO31 | - | reserved for flash and PSRAM |
SPI0_HOST/SPI1_HOST | SPIHD | GPIO27 | - | reserved for flash and PSRAM (only in qio or qout mode) |
SPI0_HOST/SPI1_HOST | SPIWP | GPIO28 | - | reserved for flash and PSRAM (only in qio or qout mode) |
SPI0_HOST/SPI1_HOST | SPIIO4 | GPIO33 | - | reserved for Flash and PSRAM (only in octal mode) |
SPI0_HOST/SPI1_HOST | SPIIO5 | GPIO34 | - | reserved for Flash and PSRAM (only in octal mode) |
SPI0_HOST/SPI1_HOST | SPIIO6 | GPIO35 | - | reserved for Flash and PSRAM (only in octal mode) |
SPI0_HOST/SPI1_HOST | SPIIO7 | GPIO36 | - | reserved for Flash and PSRAM (only in octal mode) |
SPI0_HOST/SPI1_HOST | SPIDQA | GPIO37 | - | reserved for Flash and PSRAM (only in octal mode) |
SPI2_HOST (FSPI) | SCK | GPIO12 | #SPI0_SCK | can be used |
SPI2_HOST (FSPI) | MOSI | GPIO11 | #SPI0_MOSI | can be used |
SPI2_HOST (FSPI) | MISO | GPIO13 | #SPI0_MISO | can be used |
SPI2_HOST (FSPI) | CS0 | GPIO10 | #SPI0_CS0 | can be used |
ESP32-S2 has two timer groups with two timers each, resulting in a total of four timers. Since one timer is used as system timer, up to three timers with one channel each can be used in RIOT as timer devices TIMER_DEV(0) ... TIMER_DEV(2).
Additionally ESP32-S2 has three CCOMPARE registers which can be used alternatively as timer devices TIMER_DEV(0) ... TIMER_DEV(2) can be used in RIOT if the module esp_hw_counter is enabled.
ESP32 integrates three UART interfaces. The following default pin configuration of UART interfaces as used by a most boards can be overridden by the application, see section Application-Specific Configurations.
| Device | Signal | Pin | Symbol | Remarks |
|---|---|---|---|---|
| UART_DEV(0) | TxD | GPIO43 | #UART0_TXD | cannot be changed |
| UART_DEV(0) | RxD | GPIO44 | #UART0_RXD | cannot be changed |
| UART_DEV(1) | TxD | GPIO17 | #UART1_TXD | optional, can be overridden |
| UART_DEV(1) | RxD | GPIO18 | #UART1_RXD | optional, can be overridden |
| UART_DEV(2) | TxD | - | UART2_TXD | optional, can be overridden |
| UART_DEV(2) | RxD | - | UART2_RXD | optional, can be overridden |
There are two options on how to use the JTAG interface on ESP32-S2:
| USB Signal | ESP32-S2 Pin |
|---|---|
| D- (white) | GPIO19 |
| D+ (green) | GPIO20 |
| V_Bus (red) | 5V |
| Ground (black) | GND |
| JTAG Signal | ESP32S2 Pin |
|---|---|
| TRST_N | CHIP_PU |
| TDO | GPIO40 (MTDO) |
| TDI | GPIO41 (MTDI) |
| TCK | GPIO39 (MTCK) |
| TMS | GPIO42 (MTMS) |
| GND | GND |
Using the built-in USB-to-JTAG is the default option, i.e. the JTAG interface of the ESP32-S2 is connected to the built-in USB-to-JTAG bridge. To use an external JTAG adapter, the JTAG interface of the ESP32-S2 has to be connected to the GPIOs as shown above. For this purpose eFuses have to be burned with the following command:
Once the eFuses are burned with this command and option JTAG_SEL_ENABLE, GPIO3 is used as a bootstrapping pin to choose between the two options. If GPIO3 is HIGH when ESP32-S2 is reset, the JTAG interface is connected to the built-in USB to JTAG bridge and the USB cable can be used for on-chip debugging. Otherwise, the JTAG interface is exposed to GPIO39 ... GPIO42 and an external JTAG adapter has to be used.
Alternatively, the integrated USB-to-JTAG bridge can be permanently disabled with the following command:
Once the eFuses are burned with this command and option DIS_USB_JTAG, the JTAG interface is always exposed to GPIO4 ... GPIO7 and an external JTAG adapter has to be used.
For more information about JTAG configuration for ESP32-S2, refer to the section Configure Other JTAG Interface in the ESP-IDF documentation.