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に書き出してみる。

書き出しに必要な情報は

  1. フラッシュメモリのサイズ  : 4Mbit(512KB)、8Mbit(1MB)、16Mbit(2MB)、32Mbit(4MB)
  2. フラッシュマップ : 512KB+512KB、1024KB+1024KB
  3. フラッシュモード(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に変えてみるとか試行錯誤が必要と思う。

投稿者 まる

Twitter : @dinagon Instagram : @d_dinagon フォロバします!!最近、ESP/Arduinoいじりすぎでアプリ開発が進んでない。歯医者なのに歯のことはあまり触れませんw