esp32启动流程

esp32启动流程

过程:
从flash加载二级程序到app_main所经历的步骤

步骤:
1 - 固化在ESP32 ROM 中的 boot1 从 flash 0x1000地址处 加载boot2 至RAM(IRAM & DRAM) 中。
2 - boot2从 Flash 中加载partitions.csv 和 image.bin 至内存中,image.bin 中包含了 RAM 段和通过 Flash 高速缓存映射的只读段。
3 - image.bin 运行,这时第二个 CPU 和 RTOS 的调度器可以开始运行。

在这里插入图片描述启动流程图

细节分析:
一级启动程序:
SoC 复位后,PRO CPU 开始 运行 复位向量代码(复位向量代码()位于 ESP32 芯片掩膜 ROM(只能写一次的rom) 的 0x40000400 地址处),并执行所有的初始化操作;

根据不同的复位原因(),程序会执行不同的操作:

1-从深度睡眠模式复位
若 检测到 RTC_CNTL_STORE7_REG 寄存器中 RTC 的RCR 有效
且 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 地址处加载。Flash 的第一个 4kB 扇区用于存储安全引导程序和应用程序镜像的签名。有关详细信息,请查看安全启动文档

二级启动程序:
二级程序 存放在 Flash 的 0x1000 偏移地址处,源码可以在 ESP-IDF 的 components/bootloader 目录下找到。
ESP-IDF 使用二级引导程序可以增加 Flash 分区的灵活性(使用分区表),并且方便实现 Flash 加密,安全引导和空中升级(OTA)等功能。
二级引导程序从 Flash 的 0x8000 偏移地址处读取分区表

二级引导程序会寻找出厂分区和 OTA 分区,然后根据 OTA 信息 分区的数据决引导哪个分区。

对于选定的分区,二级引导程序将映射到 IRAM 和 DRAM 的数据和代码段复制到它们的加载地址处。对于一些加载地址位于 DROM 和 IROM 区域的段,会通过配置 Flash MMU 为其提供正确的映射。请注意,二级引导程序会为 PRO CPU 和 APP CPU 都配置 Flash MMU,但它只使能了 PRO CPU 的 Flash MMU。这么做的原因在于二级引导程序的代码被加载到了 APP CPU 的高速缓存使用的内存区域,因此使能 APP CPU 高速缓存的任务就交给了应用程序。一旦代码加载完毕并且设置好 Flash MMU,二级引导程序会从应用程序二进制镜像文件的头部寻找入口地址,然后跳转到该地址处运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值