本文参考 ESP32 技术参考手册 和 ESP32-WROOM-32 datasheet
简介
在 ESP32 启动时, ROM CODE 会读取 GPIO 状态和 rst cause 状态, 进而决定 ESP32 工作模式。
通过了解和掌握 rst cause
和 boot mode
, 有助于定位某些系统问题。
例如:
ESP32
启动时会有如下打印:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ROM CODE
波特率为115200
系统复位介绍和 ESP32 启动时 rst cause
系统复位介绍
系统提供三种级别的复位方式,分别是 CPU 复位,内核复位,系统复位。
所有的复位都不会影响 MEM 中的数据。如图展示了整个子系统的结构以及每种复位方式:
- CPU 复位:只复位 CPU 的所有寄存器。
- 内核复位:除了 RTC,会把整个 digital 的寄存器全部复位,包括 CPU、所有外设和数字 GPIO。
- 系统复位:会复位整个芯片所有的寄存器,包括 RTC。
大多数情况下, APP_CPU 和 PRO_CPU 将被立刻复位,有些复位源只能复位其中一个。
APP_CPU 和 PRO_CPU 的复位原因也各自不同:
当系统复位起来之后,
PRO_CPU 可以通过读取寄存器 RTC_CNTL_RESET_CAUSE_PROCPU 来获取复位源;
APP_CPU 则可以通过读取寄存器 RTC_CNTL_RESET_CAUSE_APPCPU 来获取复位源。
ESP32 启动时 rst cause
例如 ESP32
启动时会有如下打印:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
其中 rst
简单说明如下:
PRO | APP | 源 | 复位方式 | 注释 |
---|---|---|---|---|
0x01 | 0x01 | 芯片上电复位 | 系统复位 | - |
0x10 | 0x10 | RWDT 系统复位 | 系统复位 | 详见 ESP32 技术参考手册 WDT 章节 |
0x0F | 0x0F | 欠压复位 | 系统复位 | 详见 ESP32 技术参考手册 Power Management 章节 |
0x03 | 0x03 | 软件系统复位 | 内核复位 | 配置 RTC_CNTL_SW_SYS_RST 寄存器 |
0x05 | 0x05 | Deep Sleep Reset | 内核复位 | 详见 ESP32 技术参考手册 Power Management 章节 |
0x07 | 0x07 | MWDT0 全局复位 | 内核复位 | 详见 ESP32 技术参考手册 WDT 章节 |
0x08 | 0x08 | MWDT1 全局复位 | 内核复位 | 详见 ESP32 技术参考手册 WDT 章节 |
0x09 | 0x09 | RWDT 内核复位 | 内核复位 | 详见 ESP32 技术参考手册 WDT 章节 |
0x0B | - | MWDT0 CPU 复位 | CPU 复位 | 详见 ESP32 技术参考手册 WDT 章节 |
0x0C | - | 软件 CPU 复位 | CPU 复位 | 配置 RTC_CNTL_SW_APPCPU_RST 寄存器 |
- | 0x0B | MWDT1 CPU 复位 | CPU 复位 | 详见 ESP32 技术参考手册 WDT 章节 |
- | 0x0C | 软件 CPU 复位 | CPU 复位 | 配置 RTC_CNTL_SW_APPCPU_RST 寄存器 |
0x0D | 0x0D | RWDT CPU 复位 | CPU 复位 | 详见 ESP32 技术参考手册 WDT 章节 |
- | 0xE | PRO CPU 复位 | CPU 复位 | 表明 PRO CPU 能够通过配置 DPORT_APPCPU_RESETTING 寄存器单独复位 APP CPU |
ESP32 上电 boot mode
ESP32
上电时会判断 strapping
管脚的状态, 并决定 boot mode
.
例如常见的两种上电打印:
下载固件模式:
rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
芯片运行模式:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
以 ESP32-WROOM-32
为例说明。
boot
值由 strapping 管脚 的 6 位值 [MTDI, GPIO0, GPIO2, GPIO4, MTDO, GPIO5]
共同决定。
下面是关于 Stripping 管脚 相关说明:
说明:
- 固件可以通过配置一些寄存器比特位, 在启动后改变“内置 LDO (VDD_SDIO) 电压”和“SDIO 从机信号输入输出时序”的设定。
- 因为模组内置了 3.3 V SPI flash, 所以上电时不能将 MTDI 置 1。