ESP-WROOM-32 ( ESP32 ) SPIFFS メモリサイズを大きくする方法

記事公開日:2017年10月24日

スポンサーリンク

こんばんは。

今回は、ESP-WROOM-32 ( ESP32 ) の内蔵Flash メモリ内の SPIFFS ( SPI Flash File System ) 領域をサイズアップする方法を紹介したいと思います。
Arduino core for ESP32 で使用する場合の方法です。

これは、以下の記事のコメント投稿欄で、Tomさんが英語で投稿して下さいました。

ESP-WROOM-32 ( ESP32 ) SPIFFS アップローダープラグインの使い方

とぉ~っても有益な情報でした。
ホントにありがとぅございます。
感謝感謝です。
m(_ _)m

最近、Arduino – ESP32 で SPIFFS が使えるようになっても、1.1MB くらいしかアップロードできなく、16×16 pixel の日本語東雲フォントは無理でした。
Arduino – ESP32 のFlashメモリパーティションテーブル ( Partition Table )ファイルを編集してもイマイチ上手くいかなくて、半分諦めていました。

しかし、Tomさんがパーティションテーブルの編集方法を教えて下さったおかげで、なんと SPIFFS領域のサイズアップができたんです!!
よって、東雲フォントのアップロードができました!!

何度も言わせていただきますが、改めて、Tomさん、ありがとうございます!!
m(_ _)m

これは、恐らく今後の Arduino core for ESP32 のアップデートによって、Arduino IDE のツールメニューでパーティションテーブルの変更が簡単にできるようになると思われます。
でも、自分自身でこれを編集すると、Flashメモリの構造が何となく分かってきた気がして、とても勉強になりました。
内蔵SPI Flash メモリ内に eeprom の領域もあったりして、
「なるほど・・・、そういう構造だったのか・・・」
と納得してしまいました。
データシートを眺めていただけではいまいちピンとこなかったので、これは収穫です。

ということで、Arduno core for ESP32 の Flash パーティションテーブルの変更方法を以下に紹介します。

ただ、これによって起きたトラブルは一切責任を負いません
十分ご了承していただいた上でご覧いただければと思います。

お勧め ESP-WROOM-32 ボード

まず、USB Host機器や ESP32 チップを保護する機能が付いた、スイッチサイエンス製の ESPr Developer 32 をお勧めします。

次に、保護機能はあまりありませんが、Espressif Systems社純正の ESP32-DevKitC ですね。

Arduino core for ESP32 の設定

Arduino IDE は ver 1.8.5 で動作確認しております。

Arduino core for ESP32 は最新版をインストールしてください
最新版は WiFi WPA2 の脆弱性対策パッチが適用されているそうです。
インストール方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

「BLEに無効なライブラリ」というコンパイラメッセージが出る場合は、BLEライブラリを別途ダウンロードする必要があります。
BLE Bluetooth BLE を使わなければ、そのままでも特に問題有りません。

内蔵 Flash メモリ Partition Table について

Arduino core for ESP32 の パーティションテーブル ( Partition Table )は、Windows 10 の場合、以下のパスにあります。
User-Name のところは各自のユーザーネームです。

C:\Users\User-Name\Documents\Arduino\hardware\espressif\esp32\tools\partitions

この中にある、default.csv というCSV形式ファイルをまず Excel で開くと、こうなります。
(※実際の編集はテキストエディタで行います。詳細は後で述べます)

ESP32_SPIFFS_PatitionTable01

(基本的に私はアマチュアなので、以下、誤っていることを言っていたらスミマセン。
その場合、コメント投稿欄とかでご連絡いただけると助かります。)

さて、2017/10/24現在で流通しているESP-WROOM-32 の場合、内蔵 SPI Flash メモリは 4MB になります。

Type欄で、data の場合はデータが格納されていて、app はスケッチ(プログラム)をコンパイルしたバイナリデータが格納されていると思われます。
app 領域が2つあるのは恐らく Dual Core だからではないかと思われ、別々の Task を実行できるようにしているものと思われます。

app領域が2つあるのは、OTA を使う場合、片方の領域がOTAで使われるという情報がありました。
Twitter の かでんさんからの情報です。
【参照】
https://github.com/espressif/arduino-esp32/blob/master/tools/sdk/include/app_trace/esp_ota_ops.h

nvs については、私は正直よく分かりません。
おそらく、いろいろなシステム系のデータ(例えば MAC アドレスなど)が格納されているものと思われますので、いじらない方が無難です。
「東京お気楽カメラ」というブログサイトに nvs のことが書いてある記事がありましたので、そちらが参考になると思います。

esp32のnvsをちょっと見てみた

ota は Over The Air の略で、スケッチをWi-Fi無線アップデートできるようにするためのデータが格納されているものと思われます。

SubType は良く分かりません。

Offset は、そのデータやアプリが格納されている先頭アドレスを示しています。
例えば、nvs ならば、16進数の 0x9000 という値で設定されています。
これは、ESP-WROOM-32 に搭載されている 4MB ( 4,000,000 byte ) の中の、
0x9000 ( 20,480 byte )
の位置から nvs データが始まっていることになります。

nvs の 0x9000までは、ESP-WROOM-32 を起動するためのブートローダーが格納されているらしいです。

eeprom は、スケッチプログラム中で progmem を使うと格納される領域です。

そして、spiffs が今回の目的の SPIFFS メモリ領域になります。

ただ単にSPIFFS サイズだけを変更して大きくしても正常に動作しないのでご注意ください
ここを大きくするためには、他のサイズを小さくする必要があります。

では、その方法を次で紹介します。

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。
電子回路やプログラミングの専門家ではありません。
畑違いの仕事をしてます。
でも、少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持ってます。

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)