ESP32 基础篇: 启动时 rst cause 和 boot mode

本文参考 ESP32 技术参考手册ESP32-WROOM-32 datasheet

简介

ESP32 启动时, ROM CODE 会读取 GPIO 状态和 rst cause 状态, 进而决定 ESP32 工作模式。
通过了解和掌握 rst causeboot 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_CPUPRO_CPU 将被立刻复位,有些复位源只能复位其中一个。
APP_CPUPRO_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。

猜你喜欢

转载自blog.csdn.net/espressif/article/details/107977962