# 固件升级
[English]
------------------------------------------------------------------------
## 1. Host MCU 如何通过串口对 ESP32 进行烧录升级?
* 相关协议应用请参考:[ESP32 串口协议](https://github.com/espressif/esptool);对应文档说明参见 [串口协议](https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/serial-protocol.html#serial-protocol)。
* 示例实现代码参考:[esp-serial-flasher](https://github.com/espressif/esp-serial-flasher)。
更新时间:2022.4.22
------------------------------------------------------------------------
## 2. 如何使用 USB 转串口工具对 ESP32 系列的模组下载固件?
USB 转串口对 ESP32 系列的模组下载固件的接线方式如下:
| 乐鑫模组 | 3V3 | GND | TXD | RXD | IO0 | EN |
|:-------:|:---:|:---:|:---:|:---:|:---:|:---:|
| 串口工具 | 3V3 | GND | RXD | TXD | DTR | RTS |
**注:** ESP8266 模组需要额外将 IO15 接地。
更新时间:2022.4.22
------------------------------------------
## 3. ESP32 是否支持使用 JTAG 管脚直接烧写程序?
ESP32 支持使用 [JTAG 管脚](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/jtag-debugging/configure-other-jtag.html#id1) 直接烧写程序,参考文档:[上传待调试的应用程序](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/jtag-debugging/index.html#jtag-upload-app-debug)。
更新时间:2022.4.22
--------------------------------------------
## 4. 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
时出现中途断电或者断网失败重启,设备将无法启动,需要重新烧录。
更新时间:2022.4.22
--------------------------------------
## 5. ESP32 如何设置 Flash SPI 为 QIO 模式?
* 可通过 menuconfig -\ Serial flasher config -\ Flash SPI mode
配置端进行设置,对应 API 为
[esp\_image\_spi\_mode\_t()](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32/api-reference/system/app_image_format.html?highlight=esp_image_spi_mode_t#_CPPv420esp_image_spi_mode_t)。
更新时间:2022.4.22
-------------------------------------------
## 6.使用 ESP32-WROVER-B 模组通过 [Flash 下载工具](https://www.espressif.com/zh-hans/support/download/other-tools) 下载 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 无法启动,报错将打印如下日志:
```bash
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
```
更新时间:2022.4.22
------------------------------------------------------------------
## 7. 使用 ESP32-WROVER-E 模组下载程序后,上电打印日志如下,是什么原因?
```bash
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 指南](https://docs.espressif.com/projects/esptool/zh_CN/latest/esp32/advanced-topics/boot-mode-selection.html?highlight=boot#boot-mode-message)。
更新时间:2022.4.22