固件更新

[English]


Host MCU 如何通过串口对 ESP32 进行烧录升级?


如何使用 USB 转串口工具对乐鑫模组进行自动烧录?

USB 转串口对乐鑫模组进行自动烧录接线方式如下:

乐鑫模组

3V3

GND

TXD

RXD

IO0

EN

串口工具

3V3

GND

RXD

TXD

DTR

RTS

注解

ESP8266 模组需要额外将 IO15 接地。


macOS 与 Linux 如何烧录固件?

  • 苹果系统 (macOS) 可以通过 brew 安装或 git 下载 esptool 工具烧录固件。

  • Linux 系统(如 ubuntu)可以通过 apt-get 安装或 git 下载 esptool 工具烧录固件。


ESP32 是否支持使用 JTAG 管脚直接烧写程序?

ESP32 支持使用 JTAG 管脚直接烧写程序,参考文档:JTAG 调试


ESP_Flash_Downloader_Tool 是否可以自定义编程控制?

  • ESP_Flash_Downloader_Tool GUI 工具不开源,且不支持嵌入执行脚本。

  • ESP_Flash_Downloader_Tool 底层组件 ESPtool 工具开源,可以完成烧录加密等等所有功能,建议基于该组件二次开发。


ESP32 能否通过 OTA 开启 Security Boot 功能?

  • 不推荐这样开启,因为这样操作存在风险,并且需要多次 OTA 固件。

  • 因为 Security Boot 功能存在于 Bootloader 中,所以需要更新 Bootloader 才可以开启该功能。

    1. 首先检测目前设备的分区表是否可以存放开启 Security Boot 后的 Bootloader。

    2. 然后更新一个支持写入 Bootloader 分区的中间固件。默认配置中无法擦写 Bootloader 分区,需要 make menuconfig 单独开启。

    3. 再将中间固件签名后 OTA 到目标设备,运行中间固件,中间固件先进行 OTA Bootloader, 再 OTA 被签名的新固件。

    4. 如果在 OTA Bootloader 时出现中途断电或者断网失败重启,设备将无法启动,需要重新烧录。


ESP32-S2 固件烧录时出现错误 “A fatal error occurred: Invalid head of packet (0x50)” 如何解决?

问题背景:

基于 ESP-IDF v4.1 编译固件烧录到 ESP32-S2 设备的过程中遇到如下错误:

esptool.py v2.9-dev
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32S2 Beta
Features: Engineering Sample
Crystal is 40MHz
MAC: 7c:df:a1:01:b7:64
Uploading stub...
Running stub...

A fatal error occurred: Invalid head of packet (0x50)
esptool.py failed with exit code 2

解决方法:

如果当前使用的是 ESP32-S2 芯片而不是 ESP32-S2 Beta 芯片,需要将 ESP-IDF 升级到 v4.2 或 以上。

补充说明:

  • ESP-IDF v4.1 只支持 ESP32-S2 Beta,该芯片和 ESP32-S2 是不同的芯片,无法兼容。

  • ESP-IDF v4.1 自带的 esptool 的版本是 v2.9-dev,也只支持 ESP32-S2 Beta。

  • ESP-IDF v4.2 支持 ESP32-S2 芯片,该版本自带的 esptool 的版本是 v3.0-dev,支持 ESP32-S2。


如何使用 flash_download_tool 下载基于 esp-idf 编译的固件?

  • 以 hello-world 例程为例,初次编译 esp-idf 工程请参考 get-started-guide

  • 执行 idf.py build``(esp-idf v4.0 及以后版本,v4.0 之前请使用 ``make)。编译工程后,会生成如下的 bin 文件的烧录指令提示:

#Project build complete. To flash, run this command:
../../../components/esptool_py/esptool/esptool.py -p (PORT) -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 build/hello-world.bin  build 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin
or run 'idf.py -p PORT flash'

可以按照该指令提示的 bin 文件及烧录地址使用 flash_download_tool 进行烧录。


ESP 芯片烧录通讯协议是什么?


如何对 ESP32-C3 进行离线程序烧录?

  • 可以在官网下载最新的 Flash Download Tools, v3.8.8 之后的版本已经支持 ESP32-C3 系列的烧录。


ESP32 如何设置 Flash SPI 为 QIO 模式?

  • 可通过 menuconfig -> Serial flasher config -> Flash SPI mode 配置端进行设置,对应 API 为 esp_image_spi_mode_t()。


使用 ESP8266 开发板,下载程序后,上电启动串口打印如下 log,是什么原因?

ets Jan  8 2013,rst cause:1, boot mode:(7,7)
waiting for host
  • 打印 waiting for host 说明 Boot 模式是 SDIO 模式,表明 GPIO15(MTDO)被拉高,请参见 ESP8266 Boot 模式说明


ESP32 使用 UART 升级固件,如何设置两个 app_main 的空间?

  • 通过 UART 升级固件,不支持设置两个 app_main 的空间。

  • UART 升级固件的机制与 Flash download tool 下载工具的是一样的。升级后的固件直接替换当前的固件,不支持保留旧的固件。