ESP-WROOM-02を使ってみる2 -外付けSPIフラッシュの書き換え-

ESP-WROOM-02はモジュール内にプログラム/データ格納用のSPIフラッシュを
持ち、UARTブートモードで書き換え可能です。前回技適なしのハズレモジュール
殻わりをして16MBitのSPI-ROMの存在を確認しましたが実際の
技適版ESP-WROOM-02は32MBitのものが搭載されているそうなので書き換えの
ついでに確かめてみましょう。

20161108追:
SDKのバージョンは時々刻々と変化していき、詳しい手順をせっせと作っても
あっというまに使えないものとなってしまいます。しかしなるべく最新の
手順を紹介していくよう努めさせていただきます。
20161108追:




前回初めて通電した時の「AT+GMR」コマンドで表示されたバージョンストリングです。
現在はSDKのバージョンもV2.0.0まで進んでいます。さらにATコマンドの
バージョンも進んでいて今はV1.3.0.0となっています。
今回はESP-WROOM-02をUARTブートモードで起動させ、最新のATコマンドファーム
ウエアに書き換えます。

注:本ぶろぐエントリで紹介しているのはEspressifが配布している公式のATファームの
 書き換え方法です。SDKを利用しコンパイルしたカスタムファームの際は書き込む
 アドレスが異なるケースがありますのでご注意ください。



公式BBSのこちらのエントリからESP8266_NONOS_SDK_V2.0.0_16_08_10.zip
をダウンロードしておきます。
展開して出てくる"ESP8266_NONOS_SDK/bin/at/1024+1024"以下のファイル群が
書き込むメインのプログラムとなります。つぎにこちらのエントリからFlash書き込み
ツールFlash Download Tools V3.4.2 (ESP8266 & ESP32)をダウンロードし、
適当な場所に展開し起動します。エクスプローラから解凍するとなぜか失敗しやがる
ので、7Zipを使って確実に解凍してくださいF**K!ちくしょうマカーめ!!11!1


起動したらこんなダイヤログが出ますがESP8266 DownloadTool
選択してください。

ESP-WROOM-02はねむいさん謹製のピン配置表を参考にして
UARTブートモードで起動させておきましょう。UARTブートモードでは115200bpsが
安定して書き込める速度ですが230400bpsで上手くいくならばその値でもかまいません。


さて、先に結果を言ってしまいますがESP-WROOM-02は実際に32MBit(=4Mbyte)の
SPI-ROMを持っています。それにしたがってこちらのエントリのにある
2B-ESP8266__Non-OS_SDK__IOT_Demo_Guide__CN.pdfの23ページ目の
4096kByteFlashを参考に各バイナリを書き込むアドレスを指定していきます。

SPIフラッシュに書き込むバイナリのアドレスの構成は上記にならいます。





20161108改変:
"boot_v1.6.bin"は0x0000
"user1.2048.new.5.bin"は0x1000
"blank.bin"は0xFE000
"esp_init_data_default.bin"は0x3FC000
もう一ちょ"blank.bin"は0x3FE000
上記構成はブート領域を書き込むがFOTAを行わない場合の構成です(後述)。
書き込む予定のバイナリにはチェックフォームにチェック(緑に反転する)を忘れずに。

ツールの下段の項目は
CrystalFreqは"26M"
SPI SPEEDは"40MHz"
SPI MODEは"QIO"
FLASH SIZEは"32MBit-C1"を選択してください。


SDKで提供されているデフォルトのATファームのバイナリは20151203現在SPI-ROMの
サイズが1024kByte(8Mbit)と2048kByte(16MBit)版、そしてブートローダー無し版
の3つです。当記事ではブートローダー無し版は対象外ですので無視してください。

ESP-WROOM-02では32MBit(4096kbyte)のSPI-ROMを持ちますが2048kByte版でも
使用可能です。従ってuser1.2048.new.5.binを書きこむATファームのバイナリと
します。また、SDKに同梱しているesp_init_data_default.binについて、これを
ESP-WROOM-02に書き込むとSTAモードとAPモードのMACアドレスやSSID、そして
RFの出力設定のデフォルト値が書き換えられます。書き換えの際はSTAとAPの
それぞれのMACアドレスとSSIDを事前にATコマンドで読み出しておいて
"必ず"控えてください。
AT+CIPSTAMAC_DEF? 」と「AT+CIPAPMAC_DEF?」が読み出しコマンドです。


それはさておきv0.23以前のファームのモジュールをお持ちの方はATコマンドの
ファームウェアのアップデートの際はesp_init_data_default.binとblank.binも
同時に書き換えておかないと変な値が設定されて送信出力が極端に低い値になって
しまうことがありますのでご注意ください。過去にこのぶろぐエントリで書いた書き
変え手順では省略しても可と述べていましたが現在は上記二つのファイルは必ず
適切なアドレスに書き込んで下さい!



これらの設定をストアするデータ領域のアドレス構成だけこちらから抜き出して
みました。ESP-WROOM-02の外付けSPI-ROMはブロック消去単位が4kByteセクタ
区切りでコンフィグデータも上記のように4kByte区切りでストアされます。
FOTA(ネットワーク書き込み)する場合は0xFE000にblank.binの代わりにEspressif
からダウンロードしてくるmaster_device_key.binを書き込みます。


ところでなんで何も書き込んでない領域が存在する中途半端な歯抜け状態と
なっているかというと公式の"2a-Esp8266 Iot Sdk User Manual.pdf"内でそういう
指示があるからです。




Download Panel1のSTARTボタンを押すと書き込みが始まります。
このときDETECTED INFOの項目にSPI-FLASHのデバイスIDが表示されて実際に
32MBitの品種が搭載されているのが分かります。



無事書き換えが完了したところです。一旦電源を落としてSPI-FLASHブート
モードに戻してからESP-WROOM-02に電源を再投入します。


「AT+GMR」でバージョンを確認します。無事アップデートできたのが分かります。

いろいろ試していると変なバイナリをうっかり書き込んでしまい上手く起動
できなくなる・・・!なんてことがよく出てきます。
そうなったらとにかく上記の方法でデフォルトのバイナリに書き換えてしまえば
復帰可能ですので参考にしてください。





























●今となってはどうでもいい脱線
※技適について※

現在のATコマンド(v0.24以降)のファームウエアは上記のRF出力設定もコマンドで
変更可能になっています。モジュール出荷の時点でデフォルトでフルパワーの82
(=尖頭値電力20.5dBm(112.2mW))が設定されています。その最大設定で技適が
(FCCの試験レポートを見ると上限いっぱいの23dBmで通してるようでtelecのお墨付きに
書いてある8.09mW/MHzをもって電波法上限の帯域幅26MHz使ってると想定して
逆算すると23dBm弱になりだいたい計算が合うのでやっぱりフルパワーで通ってます)
通っていて(yuna_digickさんのヒのURL先参照)ESP8266のチップ単体の性能上
これ以上の空中線電力は実質出せず、つまりモジュール上のアンテナを違法に改造
しない限りは好きに書き換えても技適に違反しないはず


…ですがそうは問屋がおろさずこのモジュールの外付けSPIフラッシュに書き込む
バイナリはRF部をコントロールするコアの部分が必ず含まれさらにファーム変更後の
技適の保証を示す資料が現時点ではどこにも見当たらないため、誰にも干渉されず
正々堂々と使うならば書き換えるなら個人で再申請して技適を再取得するのが筋です。
(↑"書き換たことで工事認証を失効し、それを使うと電波法に抵触する"と断定していない点に注意!)
BluegigaやInventekのモジュール等はその辺きっちりクリアしていてRFをコントロール
するブロックはユーザーが絶対に触ることができないように分離されているものがあります。

20151021さらに追:
少し前ですがtiger22様のブログ記事のコメント欄のやり取りにてESP-WROOM-02と
非常に似たケースの見解がありました。

>メーカー製のファームウェアアップデートはこちらに申請が無いかぎり、
>技適認証にかかわる部分の変更をやっていないと判断している。

>それ以外のファームウェアは把握していないのでわからない(DD-WRTとか聞き返しても同じ回答)。

>ファームウェアアップデートにおいて、日本の法律を越える出力が可能になることが、
技適を無効にさせる条件にはならない。個別の総合的な判断である。

↑ファームの書き換えでオーバーパワー・スプリアス増大・オフバンドの3アウト
 となるのならばさすがに電監が動いてパーペキにゲームセットだと思います。(※上級国民除く)


ESP-WROOM-02においては"メーカー製ファーム"とはSDKに付属しているデフォのAT
ファームを意味します。私のようにEspressifが提供しているATファームだけを使い
続けるだけならば、電波法に反すると絡まれ指摘された時、「Espressifから提供された
ファームウェアだけを信用して使っている。そんなこと私に言わずにEspressifに
直接言え!もちろん英語でな!
」…と反論しノイズをシャットアウトできます。

むしろEspressifと関係ない一個人が勝手な解釈で法律的判断を下すこと自体大きな
ミステイク
です。ちゃんと技適マークは取れてお上のお墨付きももらってるん
ですからEspressifさんを信用して(←このアピール重要)バンバン書き換えまくって
使い倒しましょう!!!

Espressif提供のスタティックライブラリを含むSDK使ってコンパイルしたファームでも
同じ理屈でなんだか反論出来そうなので技適を名目に難癖付けるのだけが趣味の人
たちには「私に聞くのはお門違い。Espressifに直接言え!」のお題目で
突っぱねちゃいましょう。

繰り返しますが現時点で確実に工事設計認証が無効になり電波法違反になる行為は、
技適マークが刻印されているESP-WROOM-02の金属ケースを外したりもしくは
基板上のパタンアンテナを傷つけたり削ったりアンテナにリード線を半田付けしたり
新たに外付けアンテナを取り付けたモジュールをシールドルームの外で動作させる

ことです。

20160129さらに追:ついに白黒が付いた!!
スイッチサイエンスさんから公式に問い合わせた結果が公表されております。
以下引用
ユーザーによるファームウェアの書き換えが、ESP-WROOM-02の工事設計認証を無効にする可能性について、メーカーのEspressif Systemsに確認をしました。同社は登録証明機関に確認した上で、Arduino core for ESP8266 WiFi chipとSDKを使っている限りにおいては、認証には影響を与えないという回答を下さいました。他の開発環境など、ファームを書き換える部分によっては、認証に影響を及ぼし得るとのことですので、ご注意ください。

引用終わり
SDKを使用してビルドしたファームウェアなら書き換えても最早なんの問題も
心配もありません!!みんな遠慮せずどんどんやりまくれ!!!!!!!!!!!!

Go to top of page