如何通过软件将ESP32C3切换至第一阶段Bootloader?
软件触发ESP32C3进入原生第一阶段Bootloader方案
针对ESP-IDF v5.1中rtc_wdt_protect_off等函数不支持ESP32C3的问题,可通过直接操作芯片寄存器的方式,软件触发设备重启并进入ROM中的原生第一阶段Bootloader(即串口下载模式),无需依赖硬件引脚。
实现原理
ESP32C3的ROM Bootloader会在复位后检查RTC存储寄存器的特定标志位,若检测到预设的下载触发标志,将直接进入第一阶段Bootloader的下载模式,而非启动第二阶段Bootloader或应用程序。我们可以通过设置该标志位后触发系统复位,实现目标效果。
代码实现
#include <stdio.h> #include <driver/rtc_cntl.h> #include <esp_rom_sys.h> #include <esp_intr_alloc.h> void enter_rom_bootloader(void) { // 关闭所有中断,避免复位过程被干扰 esp_intr_noniram_disable(); // 设置RTC_STORE0寄存器的标志位,告知ROM Bootloader进入下载模式 REG_WRITE(RTC_CNTL_STORE0_REG, 0x00000001); // 触发系统复位,重启后ROM会检测标志并进入第一阶段Bootloader esp_rom_sys_reset(); }
关键说明
- 该方法直接操作ESP32C3的底层寄存器,无需依赖ESP-IDF中仅支持ESP32/S3的WDT相关函数。
- 复位后,ROM Bootloader读取
RTC_CNTL_STORE0_REG的值,若为0x00000001则进入第一阶段下载模式,完全符合原生第一阶段Bootloader的触发逻辑。 - 执行此函数后设备会立即重启,应用程序后续代码不会继续执行,需提前做好状态保存。
内容的提问来源于stack exchange,提问作者mejha
相关产品推荐
相关产品推荐

