ESP8266 ESP-WROOM-02のフラッシュメモリが4MBか2MBかを確認する方法

esptool のバージョン v2.2-devを使えば、ESP-WROOM-02やESP-WROOM-32のフラッシュメモリのサイズを簡単に確認することが出来ます。
これまで国内では4MB品が主流でしたが、2MB品が出回り始めてきたようです。「ESP FLASH サイズ確認」などのキーワードで検索しても、方法を記載しているページが見当たらなかったので、容量変更の履歴とともにまとめておきました。
ESP8266を搭載したWi-FiモジュールESP-WROOM-02。一見しただけではフラッシュ容量が2MBであるか4MBであるかが分からない。4MB品はアンテナ部にマーキングが入っていることが多い。上の写真は中国から個人輸入したマーキングの無い4MB品。

4MBと2MB

ESP-WROOM-02には、プログラムやファイルを保存することが可能なフラッシュメモリが内蔵されています。フラッシュメモリのサイズは、4MBでしたが、2016年12月頃から2MBに置き換わり始めています。
データシートを確認してみましょう。以下の通り、2015年6月の古いデータシートには4MBと書いてありました。


ところが、2016年に入ると、「can be mounted with 2MB or 4MB」という曖昧な表現に変わります。

その後、2016年末には4MBの表示がなくなり、「currently integrates 2MB」という表現に変わりました。

トランジスタ技術2017年3月号(P.132)にも、ちゃんと、2Mバイトと表示されていました。実際には、校正段階で修正してもらい、なんとか出版に間に合いました。

esptoolをインストールする

esptoolをインストールしていない場合は以下のコマンドでインストールしてください。Windowsであれば、Cygwinと

Git、Python 2.7などが必要です。Raspberry Piであれば、以下を、そのまま実行してください。

$ cd esptool/

$ ./esptool.py version
esptool.py v2.2-dev
2.2-dev
esptool 原作者: Fredrik Ahlberg (themadinventor), GPLv2 license

esptoolでフラッシュメモリのサイズを確認する

それでは、ESP-WROOM-02のフラッシュメモリの容量を確認してみましょう。以下は、Cygwin上で動かしたときの例です。「ttyS2」の部分はパソコンやOSの違いで変化します。CygwinではWindows のCOMポート番号nから1を引いて「Sn-1」を使用します。Linuxでは ttyUSBn のように指定することが多いでしょう。

$ ./esptool.py –port /dev/ttyS2 flash_id
esptool.py v2.2-dev
Connecting….
Detecting chip type… ESP8266
Chip is ESP8266EX
Uploading stub…
Running stub…
Stub running…
Manufacturer: e0
Device: 4016
Detected flash size: 4MB
Hard resetting…

esptoolの実行時に「flash_id」を付与すると、SPIフラッシュの製造元コード(Manufacturer)と型番コード(Device)を表示することが出来ます。また、最新版のesptoolを使えば、最後の方に「Detected flash size: 4MB」と表示され、4MB品であることが分かります。
ただし、実際のメモリサイズを確認しているわけではなく、型番コードから得ているだけのようです。このため、適切に検出できない場合があるかもしれません

DETECTED_FLASH_SIZES = {0x12: '256KB', 0x13: '512KB', 0x14: '1MB',
                        0x15: '2MB', 0x16: '4MB', 0x17: '8MB', 0x18: '16MB'}

def detect_flash_size(esp, args):
    if args.flash_size == 'detect':
        flash_id = esp.flash_id()
        size_id = flash_id >> 16
        args.flash_size = DETECTED_FLASH_SIZES.get(size_id)

もちろん、ESP-WROOM-32 でも、同様に表示することが出来ます。

$ ./esptool.py –port /dev/ttyS3 flash_id
esptool.py v2.2-dev
Connecting…….._
Detecting chip type… ESP32
Chip is ESP32D0WDQ6 (revision 1)
Uploading stub…
Running stub…
Stub running…
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting…

参考文献
スイッチサイエンス: