烧录

  • flashing
  • OTA
  • flash_project_args
  • flasher_args.json
  • esptool.py
  • 32MB
  • WSL

通过测试发现,esptool 在波特率超过 1152000 后,烧录速度趋于饱和。这是否是因为底层驱动或协议层为了维持通信稳定性,强制实施了速率上限?

这是因为上位机和芯片的处理时间已成为主要瓶颈,单纯提升波特率对下载速度的改善作用已十分有限。目前 esptool 并未对此做出限制,但在现有条件下,已无更多手段可进一步提升下载速度。

ESP32-S3 使用 32MB SPI Flash 时,OTA 固件分区位于 16MB 以上地址,启动时报错 OTA app partition slot 0 is not bootable / invalid segment length 0xffff7fff,原因是什么?如何解决?

ESP-IDF 支持 32MB SPI Flash,16MB 以上地址也可以用于 OTA 固件分区,前提是分区表和 Bootloader 配置正确。

如果使用四线 QSPI Flash,Bootloader 默认只对前 16MB 地址空间启用 32 位地址缓存映射。当 OTA 应用分区位于 16MB 以上地址且未开启对应配置时,Bootloader 无法正确解析镜像,可能出现 OTA app partition slot 0 is not bootableinvalid segment length 0xffff7fff

解决方法是在 sdkconfig 中启用以下配置:

  • CONFIG_IDF_EXPERIMENTAL_FEATURES
  • CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH

配置说明可参考:

在未安装 ESP-IDF 的环境下单独烧录固件,如何获取各 .bin 文件的烧录路径与烧录地址?

工程编译完成后,ESP-IDF 构建系统会在 build/ 目录下生成 flash_project_args 文件。

该文件包含完整的烧录参数,包括各 .bin 文件的相对路径和对应烧录地址。需要在未安装 ESP-IDF 的环境下单独烧录固件时,可以直接参考这个文件,将参数填入 esptool.py、乐鑫 Flash 下载工具或其他离线烧录工具。

在 WSL 的 ESP-IDF 环境中执行 idf.py flash 后,会生成哪些烧录文件?如何将烧录内容提供给他人使用?

执行 idf.py flash 前,ESP-IDF 会先完成 idf.py build 编译流程,并生成一组用于烧录的二进制文件,而不是单一固件文件。通常包括应用程序固件、Bootloader、分区表等文件,每个文件都有固定的 Flash 烧录地址。

可以通过以下方式获取 BIN 文件及其地址:

  • 查看 idf.py buildidf.py flash 末尾输出的完整烧录命令。
  • 查看 build/flash_project_args 文件。
  • 查看 build/flasher_args.json 文件。

对外提供烧录内容时,需要同时提供这些 .bin 文件和对应 Flash 地址。对方即可使用乐鑫 Flash Download Tool、esptool.py 或其他烧录工具按地址烧录。