boot_app0.bin和bootloader_dio_80m.bin文件的用途是什么?(ESP32-Arduino IDE)
由Arduino IDE执行的ESP32闪存命令似乎在闪存两个引导加载程序文件:boot_app0.bin和bootloader_dio_80m.bin文件的用途是什么?(ESP32-Arduino IDE),arduino,microcontroller,esp32,firmware,arduino-esp32,Arduino,Microcontroller,Esp32,Firmware,Arduino Esp32,由Arduino IDE执行的ESP32闪存命令似乎在闪存两个引导加载程序文件:boot\u app0.bin偏移量0xe000和bootloader\u dio\u 80m.bin偏移量0x1000。我想知道这两个引导程序文件实际上是做什么的,为什么有两个。下面我将提供更多信息 1.上下文 我是为微控制器开发新的免费IDE的团队的一员:Embeetle IDE。我们计划在不久的将来支持ESP32微控制器系列。因此,我现在正在研究ESP32构建系统-ESP-IDF工具和ESP32项目的Ardui
boot\u app0.bin
偏移量0xe000和bootloader\u dio\u 80m.bin
偏移量0x1000。我想知道这两个引导程序文件实际上是做什么的,为什么有两个。下面我将提供更多信息
1.上下文
我是为微控制器开发新的免费IDE的团队的一员:Embeetle IDE。我们计划在不久的将来支持ESP32微控制器系列。因此,我现在正在研究ESP32构建系统-ESP-IDF工具和ESP32项目的Arduino IDE方法
2.ESP32项目的Arduino IDE闪存程序
构建.elf
文件后,Arduino IDE启动一个命令将其转换为二进制文件:
python esptool.py——芯片esp32 elf2image
--闪光模式dio
--闪光频率80m
--闪光灯尺寸4MB
-o/tmp/arduino_build_852524/WiFiScan.ino.bin
/tmp/arduino_build_852524/WiFiScan.ino.elf
最后,这个WiFiScan.ino.bin
文件与两个引导加载程序文件和分区表一起被闪存到电路板上:
python esptool.py——芯片esp32
--端口/dev/ttyUSB0
--波特率921600
--在默认值重置之前
--硬复位后写入闪存
-z
--闪光模式dio
--闪光频率80m
--闪光大小检测
0xe000~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin
0x1000~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader\u dio\u 80m.bin
0x10000/tmp/arduino\u build\u 852524/WiFiScan.ino.bin
0x8000/tmp/arduino\u build\u 852524/WiFiScan.ino.partitions.bin
Arduino IDE使用的默认分区表如下所示(csv格式):
此csv文件的二进制等效文件被闪存到地址0x8000
。还有两个引导加载程序文件分别被闪存到地址0xe000
和0x1000
(见下一段)
3.引导加载程序文件
正在闪存的两个引导加载程序文件是:
# flashed at 0xe000
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin
以及:
问题1:这两个引导加载程序文件的作用是什么
观察它们的位置也很有趣。第一个boot\u app0.bin
位于名为'partitions'
的文件夹中。它位于几个分区.csv
文件旁边。为什么?但当问题1得到回答时,这一点可能就清楚了
另一个文件,bootloader\u dio\u 80m.bin
位于名为'sdk/bin/'
的文件夹中,与其他文件并排放置,这些文件的名称都以'bootloader\u80m.bin
前缀开头:
问题2:至于在地址0x1000
处闪烁的引导加载程序文件,我认为“u40m”和“u80m”后缀代表以MHz为单位的闪烁速度。但是我不知道“u dio”
,“dout”
和“u qout”
后缀代表什么
请开导我^_^
答复
多亏了@Juraj,我现在对ESP32芯片的启动过程有了更好的了解。我相信是这样的:
第一阶段引导加载程序:
硬连线的ROM引导加载程序首先运行。此第一阶段引导加载程序位于闪存之外,无法编程。它加载第二阶段引导加载程序(参见下一步)
第二阶段引导加载程序:
第一阶段ROM引导加载程序在闪存中的地址0x1000
处加载第二阶段ESP-IDF软件引导加载程序。这里的代码是bootloader_dio_80m.bin
可执行文件,可在ESP-IDF框架的components/bootloader
目录中找到。
此第二阶段引导加载程序读取默认情况下在偏移量0x8000
处找到的分区表。如果在分区表中找到OTA应用程序分区,则引导加载程序将参考OTA\u数据
分区,以确定应引导哪个分区
启动开关
可将ota_数据
部分仅视为一个开关,位于闪存中的0xe000
。它决定是启动app0
还是启动app1
。开关本身是boot_app0.bin
二进制文件。正如Juraj所说,2kB大小也用于在OTA闪烁时记笔记
应用程序
在app0
或app1
执行应用程序
还感谢您向我指出这些资源:
0x1000处的二进制文件是引导加载程序。Arduino ESP32具有与Arduino IDE(从boards.txt构建)中工具菜单中的boards选项相对应的引导加载程序二进制文件
引导加载程序函数已记录在案
ESP-IDF软件引导加载程序执行以下功能:
- 内部模块的最小初始配置李>
- 初始化闪存加密和/或安全功能(如果配置)李>
- 根据分区表和ota_数据(如果有),选择要引导的应用程序分区李>
- 将此映像加载到RAM(IRAM和DRAM)并向其传输管理
boot_app0.bin是OTA数据分区的初始内容。这是有案可查的
OTA数据分区的大小为两个闪存扇区(0x2000字节),以防止写入时出现电源故障。扇区被独立地擦除并使用匹配的数据写入,如果它们不一致,则使用计数器字段确定最近写入的扇区
迪奥,秋,杜,秋
# flashed at 0xe000
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/partitions/boot_app0.bin
# flashed at 0x1000
~/.arduino15/packages/esp32/hardware/esp32/1.0.6/tools/sdk/bin/bootloader_dio_80m.bin