El ESP32-S3 es una máquina compleja, con una gran cantidad de pines y funciones, y muchas opciones de configuración. Para ello, cada pin comparte más de una funcionalidades.
En consecuencia, igual que ocurre en el ESP8266 y en el ESP32 (sin versión), no todos los pines son usables en nuestros proyectos.
Por tanto, es muy útil tener una tabla de resumen con los pines y sus funciones, indicando que pines son seguros para usar en nuestro proyecto.
Si estáis usando un ESP32, tenéis un resumen similar en esta entrada Qué pines puedo usar en un ESP32
Strapping Pins
El chip ESP32 cuenta con los siguientes pines de strapping.
- ⚠️ GPIO 0 - Chip boot mode
- ⚠️ GPIO 46 - Chip boot mode y ROM messages printing
Boot Mode | GPIO0 Pulled-up | GPIO46 Pulled-down |
---|---|---|
SPI Boot | 1 | x |
Download | 0 | 0 |
- ⚠️ GPIO 3 - JTAG signal source
- ⚠️ GPIO 45 - VDD_SPI voltage, selecciona entre 1.8V y 3.3V
Estos pines afectan a la configuración durante el arranque, por lo que lo mejor es que evitemos usarlos en nuestro proyecto.
Otros pines que debemos evitar usar
Estos son los otros pines que son conflictivos, y debemos evitar usar.
- ❌SPI0/1: Los pines GPIO26-32 generalmente se usan para la memoria flash SPI y PSRAM, y no se recomienda su uso para otras funciones.
- ⚠️ USB_D: Los pines GPIO19-20 están conectados con el USB_D.
- 🟢 PSRAM: Los pines GPIO33-37 no podrán usarse si forman también están conectados a las SPI o PSRAM (lo normal es que no)
- 🟢 JTAG: Los pines GPIO39-42 no podrás usarlos si empelas la depuración JTAG en línea para la depuración en línea.
Los que vienen marcados con 🟢 depende de la configuración de nuestra placa. En general, lo normal es que sí podamos usarlos.
Resumen de los pines
Aquí tenéis la tabla final de resumen de los pines, y si podemos usarlos o no de forma segura en nuestro proyecto.
GPIO | FUNCIONES | PUEDES USARLO |
---|---|---|
0 | RTC_GPIO0, GPIO0 | ⚠️ STRAPPING Pulled-up |
1 | RTC_GPIO1, GPIO1, TOUCH1, ADC1_CH0 | ✔️ |
2 | RTC_GPIO2, GPIO2, TOUCH2, ADC1_CH1 | ✔️ |
3 | RTC_GPIO3, GPIO3, TOUCH3, ADC1_CH2 | ⚠️ STRAPPING Floating |
4 | RTC_GPIO4, GPIO4, TOUCH4, ADC1_CH3 | ✔️ |
5 | RTC_GPIO5, GPIO5, TOUCH5, ADC1_CH4 | ✔️ |
6 | RTC_GPIO6, GPIO6, TOUCH6, ADC1_CH5 | ✔️ |
7 | RTC_GPIO7, GPIO7, TOUCH7, ADC1_CH6 | ✔️ |
8 | RTC_GPIO8, GPIO8, TOUCH8, ADC1_CH7 | ✔️ |
9 | RTC_GPIO9, GPIO9, TOUCH9, ADC1_CH8, FSPIHD | ✔️ |
10 | RTC_GPIO10, GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4 | ✔️ |
11 | RTC_GPIO11, GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5 | ✔️ |
12 | RTC_GPIO12, GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6 | ✔️ |
13 | RTC_GPIO13, GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7 | ✔️ |
14 | RTC_GPIO14, GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS | ✔️ |
15 | RTC_GPIO15, GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P | ✔️ |
16 | RTC_GPIO16, GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N | ✔️ |
17 | RTC_GPIO17, GPIO17, U1TXD, ADC2_CH6, DAC_1 | ✔️ |
18 | RTC_GPIO18, GPIO18, U1RXD, ADC2_CH7, DAC_2, CLK_OUT3 | ✔️ |
19 | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- | ⚠️ USB_D- |
20 | RTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ | ⚠️ USB_D+ |
21 | RTC_GPIO21, GPIO21 | ✔️ |
22 | GPIO22 | ✔️ |
23 | GPIO23 | ✔️ |
24 | GPIO24 | ✔️ |
25 | GPIO25 | ✔️ |
26 | SPICS1, GPIO26 | ❌ FLASH SPI |
27 | SPIHD, GPIO27 | ❌ FLASH SPI |
28 | SPIWP, GPIO28 | ❌ FLASH SPI |
29 | SPICS0, GPIO29 | ❌ FLASH SPI |
30 | SPICLK, GPIO30 | ❌ FLASH SPI |
31 | SPIQ, GPIO31 | ❌ FLASH SPI |
32 | SPID, GPIO32 | ❌ FLASH SPI |
33 | SPIIO4, GPIO33, FSPIHD | 🟢 PSRAM |
34 | SPIIO5, GPIO34, FSPICS0 | 🟢 PSRAM |
35 | SPIIO6, GPIO35, FSPID | 🟢 PSRAM |
36 | SPIIO7, GPIO36, FSPICLK | 🟢 PSRAM |
37 | SPIDQS, GPIO37, FSPIQ | 🟢 PSRAM |
38 | GPIO38, FSPIWP | ✔️ |
39 | MTCK, GPIO39, CLK_OUT3 | 🟢 DEBUG JTAG |
40 | MTDO, GPIO40, CLK_OUT2 | 🟢 DEBUG JTAG |
41 | MTDI, GPIO41, CLK_OUT1 | 🟢 DEBUG JTAG |
42 | MTMS, GPIO42 | 🟢 DEBUG JTAG |
43 | U0TXD, GPIO43, CLK_OUT1 | ⚠️ U0TX |
44 | U0RXD, GPIO44, CLK_OUT2 | ⚠️ U0RX |
45 | GPIO45 | ❌ STRAPPING Pulled-down |
46 | GPIO46 | ❌ STRAPPING Pulled-down |
EN | CHIP_PU, Reset | ❌ |