ESP8266のファームのバックアップとレストアは前回記事にしたけど、
バックアップをとっていない!!
って場合はどのように書き戻しするのか。その情報はESP8266 AT Instruction Setに書かれている。
ザクっと説明すると、ESP8266にはメモリサイズは4Mbit(512KB)、8Mbit(1MB)、16Mbit(2MB)、32Mbit(4MB)がある。
16MBitと32MBitにはフラッシュマップにより「512KB+512KB」と「1024KB+1024KB」があり、「1024KB+1024KB」のほうは16MBit-C1、32MBit-C2となる。上の抜粋にもあるが、SDK_V3.0.0からは標準で「1024KB+1024KB」のみしかサポートしていないと書いてあるので、V2もダウンロードしてたほうがよい。
flash_download_toolsとESP8266_NONOS_SDKのダウンロード
まずは、書き戻しのツールをDLする。現在のバージョンはv3.6.8なのでそれをDL
次にSDKのダウンロード
ここから、V3の最新とV2.2.1をダウンロードして適当な場所に展開しておく。これでまずは準備完了。
ファームウェアの書き出しの情報収集
手持ちのESP12Fに書き出してみる。
書き出しに必要な情報は
- フラッシュメモリのサイズ : 4Mbit(512KB)、8Mbit(1MB)、16Mbit(2MB)、32Mbit(4MB)
- フラッシュマップ : 512KB+512KB、1024KB+1024KB
- フラッシュモード(SPIモード) : QIO、DIO、QOUT、DOUT
SPIモードの詳細は上のリファレンスに書いてあって
上になればなるけど早いのはわかる。でも見分け方がわからない。FAQをみてみると
「QIO、QOUTで動かないときの原因は?」ってとこだけど「フラッシュチップがquadサポートモードをサポートしてない。データシートか、esptool.py flash_idで確認しろ」って書いてあるんだけど・・・
うーん。
どこをみればいいんでしょうか?よくわかないっす・・・
フラッシュサイズが4MBってのはわかるんですが・・・。このESP-12Fはスケッチを転送していない処女状態なので、起動時のログをみれば一応は確認できます
ここでは、SPIモード(QIO、32MBit、512KB+512KB)の記載がありますが・・・。スケッチで書き込みしてしまうと表示されなくなるので、調べる術は購入元に確認ぐらいでしょうか・・・。まぁ、サイズさえわかれば、フラッシュマップ2種類×フラッシュモード4種類=8パターンやってみろってことですかねw。
追記(2020-02-16)
フラッシュモードを調べる方法が分かったので追記しておきます。ESP8266ライブラリのサンプルスケッチにあるCheckFlashConfigを書き込んでコンソールみるとフラッシュモードが確認できます。
とりあえず、QIO、32MBit、512KB+512KBがわかったので、実際書き込みをしてみます
ファームウェアの書き出し
ESP8266 AT Instruction Setの「Downloading AT firmware into Flash」(6/73Page)から、書き込み例が(9/73page)に渡り記載してある。該当する箇所を見てみると
「512KB+512KB」なのでSDKはV2.2.1を使っていく。flash_download_toolsを起動して
順番は特に気にしなくていい。ちょっと気持ち悪いことがあって「esp_init_data_default.bin」が「esp_init_data_default_v08.bin」になっています。実はSDKには「esp_init_data_default_v05.bin」ってのも入っていて・・・
何が違うんですか?説明もないけど・・・
「Espressifから説明ないし、勘で新しいと思うesp_init_data_default_v08.binを使えよ」って書いてあるのでw勘で入れてみただけでした。
前の記事で作った治具にセットして、プログラムモードにしてリセットを押し、flash_download_toolsのスタートを押して上の画面のFINISHが出ればOK。通常起動モードにして、リセットボタンを押し、起動ログを確認。
無事起動。ブートバージョンが1.7に新しくなってます(1.7を指定したから当然だけど・・・)
ここで、チェックサムエラーやら、ブートをくり返すとか、ATコマンドが返ってこない(ボーレート変更を忘れずに)なら、DIOやDOUTに変えてみるとか試行錯誤が必要と思う。