Arduinoに書き込んであるスケッチを抜き出す(抜き出したい)~その2~

[2022.03.14 追記]

 

前回からしばらくあいてしまいましたが、やっと実践する時が来ました。

 

warabi315.hatenablog.com


コマンドプロンプトでesptool.pyがあるディレクトリをワーキングディレクトリにしておく)[2022.03.14 追記]

このコマンドを叩く。

esptool.py --port COM3 --baud 921600 read_flash 0 0x400000 original_contents.bin

 

すると、

 

C:\Users\me\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.1\tools>esptool.py --port COM3 --baud 921600 read_flash 0 0x400000 original_contents.bin
esptool.py v3.2-dev
Serial port COM3
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting.....
Detecting chip type... ESP32
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 3c:71:bf:9d:0b:7c
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 53.0 seconds (632.6 kbit/s)...
Hard resetting via RTS pin...

C:\Users\me\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.1\tools>

 

とできた。
(さいしょ、Pythonにpyserialが入っていなかったので、Anacondaから追加した)


記事作成時はコンデンサを付けた基板で試していました。後日、コンデンサを付けていない基板から吸い出そうとしたところ、上記コマンドを叩くと下記のエラーが出て吸い出せませんでした。そこで、コマンドを叩く前からBOOTスイッチを押しっぱなしにしてコマンドを叩くと吸出すことができました。スイッチは途中で離してもいいみたいでした。[2022.03.14 追記]
===== エラーここから ====
esptool.py v3.2-dev
Serial port COM3
Connecting......................................

A fatal error occurred: Failed to connect to Espressif device: Wrong boot mode detected (0x13)! The chip needs to be in download mode.
For troubleshooting steps visit: https://github.com/espressif/esptool#troubleshooting
===== エラーここまで =====

 

吸い出したバイナリがちゃんと使えるか確かめよう。

一度Arduinoに別のスケッチを書き込んで、、、吸い出したバイナリと違う動作をすることを確認。

では吸い出したバイナリを次のコマンドで書き込む。

 

esptool.py --chip esp32 --port COM3 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x0000 original_contents.bin

 

ちなみにこのコマンドは、Arduino IDE の ファイル > 環境設定 と進み、「設定」タブにある「より詳細な情報を表示する」の「書き込み」にチェックを入れて、なんらかのスケッチを書き込んでやると、出力ウィンドウに表示されるので、それを参考にするといいです。なお、吸い出したバイナリを書き込むときは0x0000から書き込むように指定する必要があります。

 

 

吸い出しや書き込み時にスイッチを押す必要があるらしいですが、コンデンサ付けているせいか押さなくてもできました。

Arduinoに書き込んであるスケッチを抜き出す(抜き出したい)

2022年3月2日追記:後日抜き出しに成功したのでその記事へのリンクを追加しました。

 

ひょんなことからArduinoをゲットしました。

このArduinoに自作のプログラムを書き込んで動作させて色々とやってみたいです。

(プログラム?バイナリ?イメージ?のことをArduinoでは"スケッチ"というのですね!)

 

さて、このゲットしたArduinoにはすでにスケッチが書き込まれていました。しかも実用的なやつ。これを上書きするなんてとんでもないので、まずスケッチを抜き出してバックアップしておきたい。ということでググってみると、、、

 

ふむふむ、、

 

[Arduino]Arduinoから書き込んだバイナリを吸い出す - Qiita

 

ふむ、、

 

麺肴ひづき@松本市大手 de 鶏豚煮干しラーメン&納豆ごはん | ラジオ、ときどきラーメン2 - 楽天ブログ

 

ふむ、

 

ねむいさんのぶろぐ | ESP-WROOM-32を使ってみる4 -SPI-ROMの吸出し・最初にそれやれとか言われそう-

 

ふむ。

 

ゲットしたArduinoは ESP-WROOM-32 だったので、まずはこの方法を試してみようと思います。

時間切れでいったん終了。

 

 

抜き出しに成功した後日談はこちら。

warabi315.hatenablog.com