一、应用程序的启动流程

宏观上,该启动流程可以分为如下 3 个步骤:

  1. 一级引导程序 被固化在了 ESP32-C3 内部的 ROM 中,它会从 flash 的 0x0 偏移地址处加载二级引导程序至 RAM (IRAM & DRAM) 中。

  2. 二级引导程序 从 flash 中加载分区表和主程序镜像至内存中,主程序中包含了 RAM 段和通过 flash 高速缓存映射的只读段。

  3. 应用程序启动阶段 运行,这时第二个 CPU 和 RTOS 的调度器启动。

(摘自:应用程序的启动流程 - ESP32-C3 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

二、烧录内容

共需要烧录三部分内容:

1. bootloader.bin

ESP-IDF 软件引导加载程序 (Bootloader) 主要执行以下任务:

  1. 内部模块的最小化初始配置;
  2. 如果配置了 Flash 加密 和/或 Secure,则对其进行初始化。
  3. 根据分区表和 ota_data(如果存在)选择需要引导的应用程序 (app) 分区;
  4. 将此应用程序镜像加载到 RAM(IRAM 和 DRAM)中,最后把控制权转交给此应用程序。

引导加载程序位于 flash 的 0x0 偏移地址处。

(摘自:引导加载程序 (Bootloader) - ESP32-C3 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

2. partition-table.bin

​ 分区表(partition table )是 ESP-IDF 框架中实现的一种分配 flash 的方式 ,对 spiflash{read|write|erase} 等接口进行了封装,增加了越界检查,同时尽量避免了直接操作 flash 地址,所以更加简单安全,但分区表擦写操作本身不具备擦写均衡,如果希望使用分区表存储用户数据,只建议存储不会频繁更改的数据。

3. 应用程序.bin

应用程序对应bin文件。

三、烧录对于地址与指令

内容 起始地址
bootloader.bin 0x0000_0000
partition-table.bin 0x0000_8000
应用程序.bin 0x0001_0000

其中COM3为对应的COM口,要根据实际进行修改

1
python -m esptool --chip esp32c3 --port COM3 --baud 460800 write_flash -z 0x0 bootloader.bin
1
python -m esptool --chip esp32c3 --port COM3 --baud 460800 write_flash -z 0x8000 partition-table.bin
1
python -m esptool --chip esp32c3 --port COM3 --baud 460800 write_flash -z 0x10000 应用程序.bin

四、总结

这样的烧录结果与调用idf.py -p COM3 flash的效果一致。

五、附件

bootloader.bin

partition-table.bin