ESP32 官方文档(一)关于 ESP-IDF 编程的一些说明

本文档详细介绍了ESP32在使用ESP-IDF编程时的启动流程,包括第一阶段和第二阶段引导程序,以及应用启动、内存布局等。启动过程中涉及了ROM中的引导代码、Flash加载、分区表解析,以及各种内存区域的使用,如IRAM、IROM、RTC高速存储器等。
摘要由CSDN通过智能技术生成

关于 ESP-IDF 编程的一些说明

应用启动流程

本文档说明了在调用 ESP-IDF 应用程序的 app_main 函数之前发生的一些步骤.

启动过程如下:
1. 位于 ROM 中的第一阶段引导程序将第二阶段引导程序映像从 flash 0x1000 地址加载到 RAM( IRAM 和 DRAM ).
2. 第二阶段引导程序从 flash 中加载分区表和主应用程序映像.主应用程序包含 RAM 段和通过 flash cache 映射的只读段.
3. 主应用程序映像执行.此时,可以启动第二个 CPU 和 RTOS 调度器.

以下各节将详细介绍此过程.

第一阶段引导程序

SoC 复位后,PRO CPU 会立即开始运行,执行复位向量代码,而 APP CPU 将保持复位状态. 在启动过程中, PRO CPU 会进行所有有关的初始化.APP CPU 复位状态在应用程序启动代码的 call_start_cpu0 函数中被取消.复位向量代码位于 ESP32 芯片掩模 ROM 中的 0x40000400 地址,并且无法修改.
复位向量调用的启动代码通过检查 GPIO_STRAP_REG 寄存器的引导引脚状态来确定引导模式.根据复位原因,有以下情况:

  1. 从深度睡眠(deep sleep)模式复位:如果 RTC_CNTL_STORE6_REG 中的值非零,并且 RTC_CNTL_STORE7_REG 中的 RTC 存储器的 CRC 值有效,则使用 RTC_CNTL_STORE6_REG 作为入口地址并立即跳转到该地址.如果 RTC_CNTL_STORE6_REG 为零,或者 RTC_CNTL_STORE7_REG 包含无效的 CRC 值,或者通过 RTC_CNTL_STORE6_REG 调用的代码执行完毕,则继续启动,就像上电复位一样.注意:此时若要运行自定义的代码,需要提供深度睡眠存根机制.请参阅深度睡眠文档.
  2. 对于上电复位,软件 SOC 复位和看门狗 SOC 复位:检查 GPIO_STRAP_REG 寄存器,是否要求 UART 或 SDIO 下载模式.如果是这种情况,配置 UART 或 SDIO,并等待下载代码.否则,继续启动,就好像是由于软件 CPU 复位.
  3. 对于软件 CPU 复位和看门狗 CPU 复位:根据 EFUSE 值配置 SPI flash,并尝试从 flash 中加载代码.在下面的段落中会更详细地描述了该步骤.如果从 flash 中加载代码失败,解压 BASIC 解释器到 RAM 中并启动它.请注意,发生这种情况时 RTC 看门狗仍然是开启的,因此除非解释器接收到任何输入,否则看门狗将在几百毫秒内复位 SOC,重复整个过程.如果解释器收到来自 UART 的任何输入,它将禁用看门狗.

应用程序二进制映像从 flash 的 0x1000 地址开始加载. 闪存的第一个 4kB 扇区用于存储安全引导IV和应用程序映像的签名.有关详细信息,请查看安全启动文档.

第二阶段引导程序

在 ESP-IDF 中,位于 flash 0x1000 地址的二进制映像是第二阶段引导程序. 第二阶段引导程序源代码可在 ESP-IDF 的 components/bootloader 目录中找到

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值