ESP32-S2原生USB 燒錄 TinyUF2 bootloader 加 CircuitPython

stormger發表於2021-08-18

概述

ESP32-S2最令我心儀的改進是原生支援USB,即帶有一個整合了收發器的全速 USB OTG 外設,符合 USB 1.1 規範,理論速度1.5m/s,利用得當將會是一個非常巨大的進步。

目前ESP32-S2已經得到CircuitPython的支援,本文內容是我經過一番資料查詢和整理後做出的關於僅使用原生USB介面來燒錄 TinyUF2 bootloaderCircuitPython 的方法總結。

本文列舉的操作是在一款搭載 ESP32-S2-WROVER 模組的小型開發板ESP32-S2-Saola-1上進行的,作業系統為Windows10,其他不同型號的模組及開發板則需進行對應適配,在下就不另作描述了。

在開發板上接一個直連晶片的USB母口

  1. ESP32-S2-Saola-1開發板上並沒有提供直連ESP32-S2的USB介面,需要參考 ESP32-S2-WROVER模組技術規格書(PDF)中的管腳定義確定 USB OTG 從哪些管腳引出的,也可以直接看看外圍設計原理圖

image

image

  1. 整一個四線的USB Type-C母口對應介面焊接上去,當然別的USB介面型號也類似。

image

將ESP32-S2設為 bootloader 引導模式

參考ESP32-S2官方API指南中的通過USB升級裝置韌體章節,通過原生USB介面與PC連線上後,按住 Boot 鍵的同時按一下 Reset 鍵,再鬆開 Boot 鍵,使ESP32-S2晶片處於 bootloader 引導模式,此時在windows裝置管理器裡即可以檢視到新的USB序列裝置。

image

通過esptool將TinyUF2燒錄進ESP32-S2的flash中

  1. 確保已經安裝了python3.4或更高版本,進入cmd命令提示符視窗,輸入:
pip install esptool
  1. 安裝上esptool後,再輸入以下命令擦除flash:
esptool -p com9 --after no_reset erase_flash

--after no_reset在此處比較關鍵,指定在esptool.py操作完成後,不重置晶片,而將晶片留在 bootloader 引導模式中,執行結果如下:

>esptool -p com9 --after no_reset erase_flash
esptool.py v3.1-dev
Serial port com9
Connecting...
Detecting chip type... ESP32-S2
Chip is ESP32-S2
Features: WiFi, ADC and temperature sensor calibration in BLK2 of efuse
Crystal is 40MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 16.3s
Staying in bootloader.
>
  1. 在此連線:github TinyUF2 下載對應開發板型號的 tinyuf2-espressif_saola_1_wrover-0.5.1.zip 檔案到本地然後解壓。
    image

  2. 在cmd中輸入指令進入此檔案路徑中,例如:

請在cd /d 後正確輸入你所解壓到的資料夾的路徑

cd /d D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1
  1. 參考TinyUF2的ESP32S2說明文件在cmd中輸入如下指令將其燒錄進flash中:
esptool --chip esp32s2 -p com9  -b 460800 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x1000 bootloader.bin 0x2d0000 tinyuf2.bin

正確燒錄完成的話執行結果如下:

D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1>esptool --chip esp32s2 -p com9  -b 460800 --before=default_reset --after=no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x1000 bootloader.bin 0x2d0000 tinyuf2.bin
esptool.py v3.1
Serial port com9
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.

Chip is ESP32-S2
Features: WiFi, ADC and temperature sensor calibration in BLK2 of efuse
Crystal is 40MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00001000 to 0x00006fff...
Flash will be erased from 0x002d0000 to 0x002effff...
Compressed 3072 bytes to 136...
Wrote 3072 bytes (136 compressed) at 0x00008000 in 0.1 seconds (effective 446.1 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 31...
Wrote 8192 bytes (31 compressed) at 0x0000e000 in 0.1 seconds (effective 645.0 kbit/s)...
Hash of data verified.
Compressed 20832 bytes to 13005...
Wrote 20832 bytes (13005 compressed) at 0x00001000 in 0.4 seconds (effective 464.5 kbit/s)...
Hash of data verified.
Compressed 130736 bytes to 82339...
Wrote 130736 bytes (82339 compressed) at 0x002d0000 in 1.5 seconds (effective 677.7 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

D:\Users\Wind\esp\tinyuf2-espressif_saola_1_wrover-0.5.1>
  1. 按一下開發板上的RESET復位鍵,可以在本地裝置管理器列表中檢視到一個名為 SAOLA1RBOOT 的便攜儲存器,及一個名為 Adafruit UF2 Bootloader USB Device的磁碟驅動器
    image
    image

燒錄CircuitPython韌體

1.前往CircuitPython官網ESP32相關下載頁面,所有CircuitPython支援的ESP32開發板都在這裡了。此處沒有我使用的ESP32-S2-Saola-1,但找到一個相似度極高的使用同一個ESP32-S2-WROVER模組的,即 NanoESP32 S2 w/WROVER

2.點選CircuitPython 7.0.0-alpha.6中的DOWNLOAD .UF2 NOW下載到本地

image

3.最後一步很簡單,複製到 SAOLA1RBOOT 移動儲存器中。

image

4.待開發板自動復位後,可以在本地裝置管理器列表中檢視到與之前不同的便攜儲存器及磁碟驅動器,且新增了一個USB序列裝置com埠。

image
image

5.通過支援CircuitPython的IDE例如Thonny即可在此開發板上進行程式設計。

image

各模式之間的切換方法

  1. 在燒錄好CircuitPython韌體後,開發板重新上電或按一下Reset鍵,將進入CircuitPython模式。

  2. 按住 Boot 鍵的同時按一下 Reset 鍵,再鬆開 Boot 鍵,將進入 ESP32-S2 bootloader 模式,esptool在此模式下可對flash進行操作。

  3. 在0.5秒內快速按一下 Reset 鍵再按一下 Boot 鍵,將進入TinyUF2 bootloader 模式,支援UF2的韌體可以由此燒錄進flash。

相關文章