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

記事公開日:2017年10月24日
最終修正日:2018年9月26日
2018/07から、Arduino core for the ESP32 の Stable版が発表になりました。
ボードマネージャからインストールするようになり、ライブラリ群やパーティションテーブルの default.csvファイルは、ESP8266 と同じく、Arduino15フォルダ内に集約されています。
その場合のWindows 10 の default.csv ファイルパスは

C:\Users\User-Name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\tools\partitions

となりますのでご注意ください。
(2018/08/07)

 

こんばんは。

今回は、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 ですね。

※2018/01/30時点で、Amazon.co.jp では Espressif system純正の 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 について

2018/07から、Arduino core for the ESP32 の Stable版が発表になりました。
ボードマネージャからインストールするようになり、ライブラリ群やパーティションテーブルの default.csvファイルは、ESP8266 と同じく、Arduino15フォルダに集約されています。
その場合のWindows 10 のファイルパスは

C:\Users\User-Name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\tools\partitions

となります。
User-Name はご自分のユーザー名で、1.0.0 は Stable 版のバージョンです。

これより以下は、従来の ZIPファイルから get.exe でインストールした場合の方法です。
将来的に使えなくなるかもしれませんのでご注意ください。
(2018/08/07)

 

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 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしていて、介護にドップリ浸かりそうな年配者です。 少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持っています。

「ESP-WROOM-32 ( ESP32 ) SPIFFS メモリサイズを大きくする方法」への4件のフィードバック

  1. mgo-tec 様

    新年明けましておめでとうございます。
    新年早々の新作発表に大変感激致しております。
    今回は SPIFFS 領域のサイズアップが必要とのことで本ページに取り組んでいますが、shnm8x16.bdf と shnmk16.bdf (いずれも SDcard_sample_filses より取り込み) のアップロードができません。
    SPIFFS のサイズアップは、シリアルモニタで確認済みです。
    4×8.FNT 、Utf8Sjis.tbl、mgotec48.FNT、MSKG13KU.FNT のアップロードは、シリアルモニタで確認できます。
    エラー表示:
    UnicodeDecodeError: ‘ascil’ code can’t decode byte 0xef in position 0: ordinalnot in range(128)
    Web で調べると、「 str 型と unicode 型を混ぜるな!」との事のようですが、初心者の私にはどこをどう直せばよいのか見当もつきません。
    新年早々で恐縮です、何かお知恵がありましたらアドバイスの程お願いいたします。

    1. juchangさん

      あけましておめでとうございます。
      こちらこそ、本年も当ブログをご覧いただき、ありがとうございます。
      m(_ _)m

      エラーメッセージの件ですが、以前と同じメッセージですね。
      私も再現しようとしたのですが、どうしてもそういうエラーが出ません。
      謎ですね。
      パーティションテーブルも含めたソースコードをテキストエディタで編集した場合、Unicodeで保存してしまった可能性があるかもしれませんね。
      UTF-8形式で保存すれば直るかもしれません。
      また、ブラウザからソースコードをコピペする場合、ブラウザの設定画面で、文字コードをUTF-8に統一すると良いかもしれません。

      でも、そのエラーメッセージはSPIFFSファイルをプラグインアップローダーでアップロードした時に出るメッセージですよね。
      そうなると謎です。
      Arduino IDE の「ツール」メニューの「Flash Size」を2MB にしてしまっているかと思ってやってみたのですが、それでもそういうエラーメッセージは出ませんでした。

      あと考えられるのは、パーティションテーブルをテキストエディタで編集する時に、ブログ記事の文章中から数値をコピペしてしまうと出てしまうかもしれませんね。
      パーティションテーブルのコピペ用テキストはこのブログ記事には載せていないので大丈夫だとは思ったのですが・・・。
      あれは、テキストエディタでご自分で半角数値を入力しなければいけません。
      あと、その中に全角が混じっている可能性がありますのでご注意ください。
      特に、エラーメッセージにある、「0xEF」というのは、半角文字では読み取れないということを意味しています。
      半角英数値は ASCIIコードの表現できる文字コードです。
      パーティションテーブルなどは半角英数値で読み取るので、0xEF という値はASCIIコードにありません。
      恐らく、全角カンマ「,」などは、UTF-8コードで、0xEFBC8C なので、最初のビット 0xEF を読み取ってしまって、エラーが出ている可能性があります。
      文字列意外のプログラムは全て半角英数値で入力しなければなりません。

      以上、それくらいでしょうか・・・。
      いずれにしても、そのエラーメッセージは文字が何らかの不明な文字コードになってしまっている可能性が大きいです。
      そのエラーメッセージの前に他のメッセージはありませんでしたか?

  2. mgo-tec 様

    いつも初歩的なミスでご迷惑をお掛けし申し訳ありません。
    パーティションテーブルの編集で、Windows メモ帳を使っていたのが原因でした。
    テキストに忠実に実行しようと、Adobe Brackets をインストールし、編集を行ったところ、error 表示が無くなり、「フルカラー有機 EL に倍角日本語フォントを縦横でスクロールさせてみた」を完成することができました。
    ありがとうございました。
    今後ともご指導の程よろしくお願い致します。

    1. 動いて良かったですね。
      メモ帳でも、全角、半角と改行を注意すれば問題無いと思います。
      ただ、やっぱり使いにくいので、ちゃんとしたテキストエディタが正解ですね。

コメントを残す

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

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください