[ESP8266] ESP8266(ESP-01・ESP-12・ESP-WROOM-02)のファームウェアのバックアップとレストア

治具を作成し、ESP8266をUSBシリアル変換(FT232)経由で接続するところまで行った。

次からは、ソフトウエア的なアプローチです。まずは工場出荷時に書き込まれているブートファームウェアのバックアップをします。この過程は必ずしも必須ではないものの、工場出荷時に戻してATコマンドでハードウエアのチェックを行う為に行っておいたほうが良いと思う。もし、これを忘れてファームを戻すこともできるけど結構めんどくさいので、また別の記事に書きたい。


Pythonとesptoolのインストール

まず、今回は、windowsで行っていくのでesptool.pyを実行できる環境を整える。Linuxはもっと簡単と思う。参考サイトは以下

pythonのプログラムの為、まずは最初にPythonをインストールする。現時点で最新の3.8.1の「Windows x86-64 executable installer」をDLして、セットアップ起動し「Add Python to PATH」にチェックを入れてインストール。pythonのパスを通しておいたほうがやりやすいと思う。

esptoolもダウンロードする。現在の最新は2.8なのでダウンロードして、解凍しておく。7-zipで解凍した。コマンドプロンプトを起動して、esptoolを展開したフォルダに移動して

 

pip install esptool

を実行すればインストールされる。このときほかもアップデートしろといか言われた(忘れたw)ので、言われるままにコマンド入れてアップデートした。

python esptool.py

を実行して、下のように通れば問題ないと思う

次にesptool.pyを実行してESP8266の情報を読み取る。前回の治具でプログラムスイッチをプログラムモードにして接続し。念のためリセットスイッチを押しておく。そして、コマンドプロンプトから

python esptool.py flash_id

を実行する。ポートは自動で検索してくれるみたい。

スクショはESP-01(前)とESP-12F(後)。決定的な違いはフラッシュサイズの違いでESP-01は1MB、ESP-12Fは4MB。これはファームのバックアップを取るのに必要な情報なので覚えておく。Connecting…で先に進まないときはリセットボタンをもう一度押してみよう。ちなみにesptoolの使い方は以下のサイトが参考になるかも


ESP8266のファームウェアのバックアップとレストア

esptoolをつかってバックアップをとる

python esptool.py -b 115200 read_flash 0x00000 0x7FFFF esp_512K.bak

python esptool.py -b 115200 read_flash 0x00000 0x100000 esp_1M.bak

python esptool.py -b 115200 read_flash 0x00000 0x200000 esp_2M.bak

python esptool.py -b 115200 read_flash 0x00000 0x400000 esp_4M.bak

flash_idで確認したフラッシュサイズに合ったのを上のコマンドから選んで実行する。

ESP-01でやってみると、1MBのフラッシュサイズなので下を実行する

バックアップが終わると esp_1M.bakができる

python esptool.py -b 115200 write_flash –flash_mode=dout 0x00000 esp_1M.bak

で書き戻す。

ATコマンドも通り、書き戻し完了。

この書き戻しの作業は、うまくいく場合もあれば、いかない場合もあるらしい。flash_mode=にdoutを指定しているが、基本はqioを指定する。しかし、qioで書き込むとチェックサムエラーが起こってしまった。このことは下のサイトでも報告されている。

(抜粋)

結構、情報がいろいろあり、何が正解かはっきりわからないが、バックアップをとるのは一緒なので、書き戻し時に色々試してみるといいのかな。参考にしたサイトを以下に挙げておきます。

ここまでで今回は終了。釈然としない部分もあるけど・・・まぁ、わかったら追記していく。