固件更新

[English]


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


如何使用 USB 转串口工具对 ESP32 系列的模组下载固件?

USB 转串口对 ESP32 系列的模组下载固件的接线方式如下:

乐鑫模组

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 管脚 直接烧写程序,请参考文档:上传待调试的应用程序


ESP_Flash_Downloader_Tool 是否支持自定义编程控制?

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

  • ESP_Flash_Downloader_Tool 底层组件 esptool 开源,支持完成烧录加密等所有功能,建议基于该组件二次开发。


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

  • 不推荐通过 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 时出现中途断电或者断网失败重启,设备将无法启动,需要重新烧录。


基于 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 进行固件离线烧录?

  • 目前没有任何工具支持 ESP32-C3 固件离线烧录。但官方发布的 Flash 下载工具 可以直接烧录二进制固件,且支持量产烧录模式,最多支持 8 个 ESP32-C3 设备同时下载固件。

  • 另外,官方也提供了用于量产生产的 治具 ,最多支持 4 个 ESP32-C3 模组同时下载固件。


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

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


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

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


乐鑫模组烧录工具有哪些?

  • 请前往 Flash 下载工具 下载乐鑫烧录工具。免安装 GUI 工具,仅适用于 Windows 环境。

  • 乐鑫烧录工具 esptool 基于 python 编写,开放源代码,并且支持用户二次开发。


Flash 下载工具 的工厂模式和开发者模式有什么区别?

  • 工厂模式支持多通道下载,开发者模式仅支持单通道。

  • 工厂模式下 bin 文件的路径是相对路径,开发者模式下的路径是绝对路径。


ESP32-C3 芯片可以使用 USB 进行固件下载,但在 ESP-IDF v4.3 下使用并不支持,如何使用 USB 进行固件下载?


一拖四治具工厂模式烧写失败原因?

:CHIP: ESP32 | ESP8266 :

  • 乐鑫产品启动时会通过一些发包来完成校准操作,此操作需要 3.3 V 电压并保证有 500 mA 的峰值电流。所以,在一拖多的情况下,通过连接电脑 USB 的方式来烧录时,会出现由于电脑 USB 供电不足而引起无法烧录或者烧录中断的情况,建议使用 hub 进行烧录并给 hub 供电。


使用 ESP32-WROVER-B 模组通过 Flash 下载工具 下载 AT 固件,当完成写 Flash 后,结果显示 ERROR。但使用 ESP32-WEOVER-E 的模组下载相同的 AT 固件结果却显示正常,是什么原因?

  • ESP32-WROVER-B 模组引出了 FLASH SPI 的管脚,但 ESP32-WROVER-E 模组没有引出 FLASH SPI 的管脚,请先检查 ESP32-WROVER-B 模组的 FLASH SPI 引脚是否被外部其他应用电路复用。

  • ESP32-WROVER-B 的 FLASH SPI 的 CMD 引脚接 GND 会导致 Flash 无法启动,报错将打印如下日志:

rst:0x10 (RTCWDT_RTC_RESET),boot:0x1b (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371
ets Jun  8 2016 00:22:57

为什么使用 Flash 下载工具 无法重新烧录已加密设备?

CHIP: ESP32 | ESP32-S2

  • 当前 Flash 下载工具 不支持对已加密的设备重复加密,仅支持明文一次性加密操作。


基于 esptool 串口协议 通过 UART 接口对 ESP32 进行刷新固件,是否可以新增一个 app 分区?

  • Flash 实际的分区情况主要取决于 partition_table.bin 的数据。若可以更新 partition_table.bin,则可以重新划分 bootloader.bin、app.bin 等其他数据的存储空间,从而新增一个 app 分区。


使用 ESP8266 通过 Flash 下载工具 下载程序固件后无程序运行日志输出,串口打印如下,是什么原因?

ets Jan  8
2013,rst cause:1, boot mode:(3,7)
ets_main.c
  • 请先检查硬件接线是否正确。参见 Boot mode 接线说明

  • 请检查 bootloader.bin 的下载偏移地址是否正确,ESP8266 的 bootloader.bin 下载的偏移地址为 0x0,若此偏移地址错误将会导致 Flash 无法启动。


Windows7 系统 USB 驱动无法识别是什么原因?


使用 ESP32-WROVER-E 模组下载程序后,上电打印日志如下,是什么原因?

  rst:0x10 (RTCWDT_RTC_RESET),boot:0x37(SPI_FLASH_BOOT)
【2020-12-11 15:51:42 049】invalrd header:0xffffffff
  invalrd header:0xffffffff
  invalrd header:0xffffffff
  • 出现如上报错日志一般情况为 GPIO12 拉高导致,ESP32-WROVER-E 模组 GPIO12 不能拉高,建议将 GPIO12 拉低测试一下。可参见 ESP32 boot log 指南