ESP32-S3:VScode+PlatformIOで生成したバイナリをesptoolで量産書き込み

カテゴリー: ESP32  タグ: /

VScode+PlatformIOで開発したコードは、PlatformIO→UpLoadで書き込めますがBuildも含まれるので複数枚書き込みには適しません。

そこで、VScodeが吐き出したコードを単体のFlashプログラマとして「esptool」で量産書き込みする覚書です。私の環境はESP32-S3ですが、ESP32全般でたぶん使えると思います。

Espressifの標準ツール「esptool」を用意する

インストールや使い方については、「Lang-ship」の「ESP32でesptool.pyの使い方」を参考にさせていただきました。いつもお世話になってます。

esptoolは、すでにpythonをインストールしてあるので、windowsのターミナルでpipインストールですぐに動作します。

VScodeの吐き出すファイルは

upload時のメッセージを確認してみました。前半は冗長分です。

Processing esp32s3 (board: esp32-s3-devkitc-1; platform: espressif32@5.1.1; framework: espidf)
-------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html
PLATFORM: Espressif 32 (5.1.1) > Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
DEBUG: Current (esp-builtin) On-board (esp-builtin) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-espidf @ 3.40401.0 (4.4.1)
 - tool-cmake @ 3.16.4
 - tool-esptoolpy @ 1.30300.0 (3.3.0)
 - tool-idf @ 1.0.1
 - tool-mconf @ 1.4060000.20190628 (406.0.0)
 - tool-mkfatfs @ 2.0.1
 - tool-mklittlefs @ 1.203.210628 (2.3)
 - tool-mkspiffs @ 2.230.0 (2.30)
 - tool-ninja @ 1.9.0
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch3
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch3
Reading CMake configuration...
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 0 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Retrieving maximum program size .pio\build\esp32s3\firmware.elf
Checking size .pio\build\esp32s3\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   4.3% (used 14220 bytes from 327680 bytes)
Flash: [==        ]  23.0% (used 240745 bytes from 1048576 bytes)
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-builtin, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Using manually specified: COM3
Uploading .pio\build\esp32s3\firmware.bin
esptool.py v3.3
Serial port COM3
Connecting....
Chip is ESP32-S3
Features: WiFi, BLE
Crystal is 40MHz
MAC: 7c:df:a1:e7:a3:88
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 2000000
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x00010000 to 0x0004afff...
Flash params set to 0x023f
Compressed 20880 bytes to 13045...
Writing at 0x00000000... (100 %)
Wrote 20880 bytes (13045 compressed) at 0x00000000 in 0.4 seconds (effective 454.0 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 511.4 kbit/s)...
Hash of data verified.
Compressed 241136 bytes to 127527...
Writing at 0x00010000... (12 %)
Writing at 0x0001d19e... (25 %)
Writing at 0x000231e1... (37 %)
Writing at 0x00029841... (50 %)
Writing at 0x0002f4c2... (62 %)
Writing at 0x00037ed2... (75 %)
Writing at 0x00040034... (87 %)
Writing at 0x00045b56... (100 %)
Wrote 241136 bytes (127527 compressed) at 0x00010000 in 2.7 seconds (effective 716.7 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

三種類のバイナリファイルを書き込んでるようですが・・・

3ファイルを順番に書き込んでも動かない。

VScodeでは順番に書き込んでいるようですが、esptoolで手動で書き込んでみるも、うまくいかない。

おそらく、「Configuring flash size…」でFlashのサイズ設定をなにかしているのでしょう。私には解明できませんでした。

そこで・・・

VScodeで書き込んだバイナリを読みだして、書き込みバイナリとする

そこで、ファームがFIXしたら、一旦VScodeのuploadで書き込んで、esptoolで読みだして「書き込み用バイナリ」として保存して使うことにします。

上の例では、0x10000から241136バイトがMAX。サイズは0x50000とします。

バイナリ上限は0x4adf0なので、サイズ0x50000のファイルとして読みだします。

esptool.py --port COM45 -b 2000000 read_flash 0x00000 0x050000 image.bin

私の環境では2MbpsでもOKでした。

新しいESP32-S3に交換したら、読みだした「image.bin」を書き込みます。

esptool.py --port COM45 -b 2000000 write_flash 0x00000 image.bin

このサイズなら6秒で書き込み完了!

これで、量産書き込みの準備ができました。

お気軽にコメントをどうぞ。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)