ESP32-S2-Saola-1 开发板完全指南:硬件规格、引脚映射与 Arduino 环境配置详解
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
ESP32-S2-Saola-1 是乐鑫官方推出的 ESP32-S2 开发板,基于 ESP32-S2-WROVER 模组,集成了 4 MB 闪存与 2 MB PSRAM,并原生支持 USB OTG。本篇技术指南以仓库 docs/en/boards/ESP32-S2-Saola-1.rst 为核心,结合 Arduino-ESP32 core 的板级定义源码与构建配置,完整讲解该板卡的硬件规格、双排针引脚定义、启动(strapping)引脚、受限 GPIO,以及在 Arduino IDE 中使用该板卡时对应的引脚常量、菜单选项与分区方案。阅读本文后,你将能准确接线、避开启动陷阱与受限引脚,并正确配置编译上传参数。
板卡概述:基于 ESP32-S2-WROVER 模组的官方开发板
ESP32-S2-Saola-1 属于乐鑫官方开发板家族,核心是 ESP32-S2 SoC,由 ESP32-S2-WROVER 模组承载。在 Arduino-ESP32 生态中,它对应 boards.txt 中esp32s2(ESP32S2 Dev Module)这一板型条目(boards.txt),板卡型号被统一收录于 docs/en/boards/boards.rst 的板卡索引中。
从构建配置看,该板型默认参数为:
| 配置项 | 默认值 | 说明 |
|---|---|---|
build.mcu/build.target | esp32s2 | 目标芯片为 ESP32-S2(Xtensa 单核) |
build.f_cpu | 240000000L | 默认 CPU 主频 240 MHz |
build.flash_size | 4MB | 模组集成 4 MB SPI 闪存 |
build.flash_freq | 80m | 闪存时钟 80 MHz |
build.flash_mode | dio | 闪存 DIO 模式 |
build.boot | qio | 启动模式 QIO |
upload.maximum_size | 1310720 | 默认分区下 APP 最大约 1.25 MB |
upload.maximum_data_size | 327680 | 可用数据内存上限约 320 KB |
| USB VID / PID | 0x303a/0x0002 | ESP32-S2 原生 USB 标识 |
这些默认值可在 Arduino IDE 的"开发板菜单"中进一步调整,详见后文"Arduino 环境下的板级配置"一节。
硬件规格一览
ESP32-S2-Saola-1 的主要硬件能力如下(取自 ESP32-S2-Saola-1.rst 的 Specifications 章节):
- 无线:Wi-Fi 802.11b/g/n(802.11n 最高 150 Mbps)
- 处理器:ESP32-S2 系列 SoC,Xtensa® 单核
- 存储:集成 4 MB SPI 闪存、2 MB PSRAM
- 外设资源:
- 43 个可编程 GPIO
- 2 个 13 位 SAR ADC,最高 20 通道
- 2 个 8 位 DAC
- 14 个触摸感应 IO
- 4 个 SPI、1 个 I2S、2 个 I2C、2 个 UART
- RMT(TX/RX)
- LED PWM 控制器,最高 8 通道
- 1 个全速 USB OTG
- 1 个温度传感器
- 1 个 DVP 8/16 位摄像头接口(复用 I2S 硬件资源)
- 1 个 LCD 接口(8 位串行 RGB/8080/6800,复用 SPI2 硬件资源)
- 1 个 LCD 接口(8/16/24 位并行,复用 I2S 硬件资源)
- 1 个 TWAI® 控制器(兼容 ISO 11898-1)
- 天线:PCB 天线或外部天线连接器
需要注意,ESP32-S2 系列没有内置蓝牙(区别于 ESP32/ESP32-S3),其网络能力集中在 Wi-Fi 与 USB OTG 上;摄像头与 LCD 并行接口属于复用型外设,具体配置见官方 ESP-IDF 驱动文档。
排针引脚定义(J2 / J3)
ESP32-S2-Saola-1 通过两块排针 J2、J3 引出引脚。并非所有芯片引脚都被引出到排针上,使用前务必核对下表。
表中 Type 含义:P 电源、I 输入、O 输出、T 高阻态。
J2 排针(21 引脚)
| No. | 名称 | 类型 | 功能 |
|---|---|---|---|
| 1 | 3V3 | P | 3.3 V 电源 |
| 2 | IO0 | I/O | GPIO0、Boot |
| 3 | IO1 | I/O | GPIO1、ADC1_CH0、TOUCH_CH1 |
| 4 | IO2 | I/O | GPIO2、ADC1_CH1、TOUCH_CH2 |
| 5 | IO3 | I/O | GPIO3、ADC1_CH2、TOUCH_CH3 |
| 6 | IO4 | I/O | GPIO4、ADC1_CH3、TOUCH_CH4 |
| 7 | IO5 | I/O | GPIO5、ADC1_CH4、TOUCH_CH5 |
| 8 | IO6 | I/O | GPIO6、ADC1_CH5、TOUCH_CH6 |
| 9 | IO7 | I/O | GPIO7、ADC1_CH6、TOUCH_CH7 |
| 10 | IO8 | I/O | GPIO8、ADC1_CH7、TOUCH_CH8 |
| 11 | IO9 | I/O | GPIO9、ADC1_CH8、TOUCH_CH9 |
| 12 | IO10 | I/O | GPIO10、ADC1_CH9、TOUCH_CH10 |
| 13 | IO11 | I/O | GPIO11、ADC2_CH0、TOUCH_CH11 |
| 14 | IO12 | I/O | GPIO12、ADC2_CH1、TOUCH_CH12 |
| 15 | IO13 | I/O | GPIO13、ADC2_CH2、TOUCH_CH13 |
| 16 | IO14 | I/O | GPIO14、ADC2_CH3、TOUCH_CH14 |
| 17 | IO15 | I/O | GPIO15、ADC2_CH4、XTAL_32K_P |
| 18 | IO16 | I/O | GPIO16、ADC2_CH5、XTAL_32K_N |
| 19 | IO17 | I/O | GPIO17、ADC2_CH6、DAC_1 |
| 20 | 5V0 | P | 5 V 电源 |
| 21 | GND | G | 地 |
J3 排针(20 引脚)
| No. | 名称 | 类型 | 功能 |
|---|---|---|---|
| 1 | GND | G | 地 |
| 2 | RST | I | CHIP_PU、复位 |
| 3 | IO46 | I | GPIO46 |
| 4 | IO45 | I/O | GPIO45 |
| 5 | IO44 | I/O | GPIO44、U0RXD |
| 6 | IO43 | I/O | GPIO43、U0TXD |
| 7 | IO42 | I/O | GPIO42、MTMS |
| 8 | IO41 | I/O | GPIO41、MTDI |
| 9 | IO40 | I/O | GPIO40、MTDO |
| 10 | IO39 | I/O | GPIO39、MTCK |
| 11 | IO38 | I/O | GPIO38 |
| 12 | IO37 | I/O | GPIO37 |
| 13 | IO36 | I/O | GPIO36 |
| 14 | IO35 | I/O | GPIO35 |
| 16 | IO34 | I/O | GPIO34 |
| 17 | IO33 | I/O | GPIO33 |
| 17 | IO26 | I/O | GPIO26 |
| 18 | IO21 | I/O | GPIO21 |
| 19 | IO20 | I/O | GPIO20、ADC2_CH3、USB_D+ |
| 20 | IO19 | I/O | GPIO19、ADC2_CH3、USB_D- |
| 21 | IO18 | I/O | GPIO18、ADC2_CH3、DAC_2 |
注:J3 表格中序号 15 缺失、17 出现两次,为原文档 ESP32-S2-Saola-1.rst 自带的编号笔误,此处按原文逐行转录,实际引脚顺序以板卡丝印与原理图为准。
将排针定义与 Arduino 板级映射对照可见关键规律:IO19/IO20 承载原生 USB D-/D+,即使用板载 USB 口时这两个引脚被 USB 占用;IO43/IO44 为 UART0(TX/RX),默认串口打印与烧录均走该组引脚。
引脚布局图
ESP32-S2-Saola-1 的完整引脚布局(可点击放大查看排针与板载元件的对应关系)如下:
启动(Strapping)引脚:上电时序的关键约束
部分 GPIO 在上电/启动阶段承担特殊角色,其电平状态决定了芯片的启动模式、内部 LDO 电压与日志打印行为。改动这些引脚的电平时需格外谨慎:
| GPIO | 默认 | 功能 | 拉高(Pull-up) | 拉低(Pull-down) |
|---|---|---|---|---|
| IO45 | 下拉 | 内部 LDO 电压(VDD_SDIO) | 1.8 V | 3.3 V |
| IO0 | 上拉 | 启动模式 | SPI Boot | Download Boot |
| IO46 | 下拉 | 启动模式 | 不关心 | Download Boot |
| IO46 | 上拉 | 启动期间日志打印开关与 SDIO Slave 时序 | U0TXD 有效 | U0TXD 静默 |
实操要点:
- IO0 是进入下载模式的开关:复位瞬间若 IO0 被拉低(配合 RST 触发),芯片进入 Download Boot,可烧录固件;正常运行时保持其默认上拉即可。这与 boards.txt 中
UploadMode的 UART0(默认)与 Internal USB(1200 bps touch 复位)两种上传模式共同构成完整的烧录路径。 - IO45 决定 VDD_SDIO 电压(1.8 V 或 3.3 V),直接影响外部 SPI 器件电平,改动前务必确认外围电路兼容性。
- IO46 同时参与启动模式判定与启动日志打印开关,且为仅输入引脚(见下文),一般不应作为普通输出使用。
受限 GPIO:不可随意使用与仅输入的引脚
与 PSRAM 共享、不可使用的引脚:
| GPIO | 共享功能 |
|---|---|
| IO26 | 连接到 PSRAM |
由于 ESP32-S2-WROVER 模组的 2 MB PSRAM 已占用 IO26,该引脚无法作为普通 GPIO 使用。这正是"集成 2 MB PSRAM"带来的硬件代价,选型时需计入可用引脚数。
仅输入(INPUT ONLY)引脚:
| GPIO | 功能 |
|---|---|
| IO46 | GPIO46 |
IO46 只能作为输入读取,不能配置为输出。从 pins_arduino.h 可见,Arduino 板级映射中也没有为 IO46 提供任何默认别名常量,进一步印证了其受限地位。
Arduino 环境下的板级映射与常用常量
仓库中的 variants/esp32s2/pins_arduino.h 定义了 ESP32-S2-Saola-1 等 ESP32-S2 板卡在 Arduino 中的默认引脚常量,与上文排针表一一对应:
| 常量 | 引脚 | 对应排针/功能 |
|---|---|---|
LED_BUILTIN/RGB_BUILTIN | 18(PIN_RGB_LED) | 板载 RGB LED(RGB_BRIGHTNESS=64) |
TX/RX | 43 / 44 | UART0(J3: IO43/IO44) |
SDA/SCL | 8 / 9 | 默认 I2C(J2: IO8/IO9) |
SS/MOSI/MISO/SCK | 34 / 35 / 37 / 36 | 默认 SPI(J3: IO34/35/37/36) |
A0~A19 | 1 ~ 20 | 模拟输入通道(对应 ADC1/ADC2) |
T1~T14 | 1 ~ 14 | 触摸通道 TOUCH_CH1 ~ CH14 |
DAC1/DAC2 | 17 / 18 | 8 位 DAC 输出(J2: IO17、J3: IO18) |
对应到代码中的用法示例:
// 板载 RGB LED 呼吸灯效果(Arduino-ESP32 新 API) #include <Arduino.h> void setup() { rgbLedWrite(RGB_BUILTIN, 255, 0, 0); // 红色 delay(500); rgbLedWrite(RGB_BUILTIN, 0, 255, 0); // 绿色 } void loop() {} // 触摸引脚读取(T1 = IO1 = TOUCH_CH1) void touchExample() { int t = touchRead(T1); Serial.printf("touch value: %d\n", t); }在 Arduino IDE 中烧录到该板卡,应选择开发板ESP32S2 Dev Module(对应 boards.txt 中esp32s2条目),其build.variant=esp32s2正是加载上述 pins_arduino.h 的开关。
Arduino 板级菜单:CPU 频率、PSRAM、USB 与分区方案
针对esp32s2板型,boards.txt 提供了完整的 IDE 菜单选项,可按需调整默认配置:
USB / 上传模式
- CDC On Boot(
CDCOnBoot):默认 Disabled;启用后开机即枚举为 USB 串口(CDC),可替代 UART0 作为Serial输出。 - MSC On Boot(
MSCOnBoot):默认 Disabled;启用后板载 USB 以 U 盘(Mass Storage)形式出现,配合FirmwareMSC可实现在线拖拽升级。 - DFU On Boot(
DFUOnBoot):默认 Disabled;启用后进入 USB DFU 模式。 - Upload Mode(
UploadMode):默认UART0(走 IO43/IO44 串口 + IO0 下载模式);可选Internal USB,此时使用use_1200bps_touch=true,即通过 USB 的 1200 bps touch 复位信号自动进入烧录模式,无需手动拉低 IO0。
存储与外设
- PSRAM:默认 Disabled;选 Enabled 时追加
-DBOARD_HAS_PSRAM编译宏,从而启用ps_malloc()等 PSRAM 分配接口(模组本身已集成 2 MB PSRAM,只是默认不在 Arduino 运行时启用)。 - Partition Scheme:提供大量分区方案,例如默认
Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)、No OTA (2MB APP/2MB SPIFFS)、Huge APP (3MB No OTA/1MB SPIFFS)、16M Flash (2MB APP/12.5MB FATFS)、RainMaker、Zigbee ZCZR等。不同方案会联动调整upload.maximum_size(APP 可用体积),例如huge_app将上限提升到 3145728 字节(boards.txt)。 - CPU Frequency:提供 240 MHz / 160 MHz / 80 MHz(WiFi)档位,对应
build.f_cpu调整,低主频可降低功耗。
仓库中的验证与测试覆盖
在仓库的 CI 测试体系中,ESP32-S2 是持续验证的目标平台之一:
- tests/validation/wifi/ci.yml 针对
esp32s2同时覆盖PSRAM=enabled与PSRAM=disabled两种组合(均搭配huge_app分区),验证 Wi-Fi 功能在 PSRAM 开关下的稳定性。 - tests/validation/nvs/ci.yml 在
esp32s2上以dio/qio两种 FlashMode 运行 NVS 读写测试。 - tests/performance/ramspeed/ci.yml 与 tests/performance/psramspeed/ci.yml 将
esp32s2列为内存性能基准测试平台。 - tests/validation/democfg/README.md 明确说明自定义 FQBN 覆盖
esp32s2 (PSRAM)场景。
这些测试配置从侧面印证了该板卡在 Arduino-ESP32 生态中的主流地位,也为开发者排查"是否板级配置导致的问题"提供了对照:若遇到与 PSRAM、FlashMode 相关的异常,可先按 CI 中的 FQBN 组合复现验证。
关键使用建议与排查清单
综合排针表、strapping 引脚与受限 GPIO,使用 ESP32-S2-Saola-1 时可遵循以下清单:
- 上电前检查 IO0 / IO45 / IO46 电平,避免意外进入下载模式或改动 LDO 电压域;
- 不要使用 IO26(PSRAM 占用),不要将 IO46 配置为输出;
- 使用 USB 功能时避开 IO19/IO20(USB_D-/D+)作为普通 IO;
- 默认串口输出走 IO43(TX)/ IO44(RX),如需 USB 串口请在 IDE 中启用
CDC On Boot; - 需要大内存缓冲时,在 IDE 菜单启用
PSRAM并在代码中用ps_malloc()/heap_caps_malloc(..., MALLOC_CAP_SPIRAM); - 大固件工程改用
Huge APP或No OTA分区方案以扩大 APP 可用体积。
延伸阅读
- 板卡文档原始出处:docs/en/boards/ESP32-S2-Saola-1.rst
- 板卡索引:docs/en/boards/boards.rst
- 板型构建配置(
esp32s2条目):boards.txt - Arduino 引脚映射:variants/esp32s2/pins_arduino.h
- 板卡示例:
libraries/ESP32/examples/下的AnalogReadContinuous、TouchWakeUp、RMT等示例均兼容 ESP32-S2 平台
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考