ESP32-WROVERシリーズには、16MBのフラッシュを搭載したモデルがあります。
このフラッシュにSPIFFSで、大きなファイルやたくさんのファイルを保存ようとしたのですが、Arduino IDE環境では、16MB仕様のESP32-WROVERでSPIFFSを使用する設定がありません。
最大でも3MBとなってしまいます。そのため、せっかく広大なフラッシュメモリがあるのに、標準で用意されている設定は、SPIFFSで数MBしか利用することができません。
そこで、既存の設定ファイルを流用して、プログラムは2MB、OTA用が2MB、残り12MBを全てSPIFFSに利用できる設定を追加してみました。
Partitionファイルを作る
フラッシュメモリにどのようにデータやプログラムを配置するかを設定するファイルです。
Macの場合、/Users/ユーザー名/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/partitions/
に入っています。1.0.4はバージョンによって変わると思います。
ここに入っているファイルを参考に、APP:2MB OTA:2MB SPIFSS:12MBの設定ファイルを作ります。
no_ota.csvをコピーしてlarge_spiffs12MB_16MB.csvを作ります。中のパラメータを、以下のように修正します(赤字の部分を修正)。
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x200000,
app1, app, ota_1, 0x210000,0x200000,
spiffs, data, spiffs, 0x410000,0xBF0000,
ここで作ったファイルは、こちらよりダウンロードもできます。
プログラムは2MB、OTA用が2MB、残りを全てSPIFFSにしています。
このファイルを先ほどの、
/Users/ユーザー名/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/partitions/
に保存します。
Boards.txtに追記する
ESP32WroverボードのPartition Schemeに先ほどの設定が表示されるように、設定を追記します。
Macの場合
/Users/ユーザー名/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/boards.txt
にあります。
「esp32wrover.menu.PartitionScheme....」という行の終わりの次の行(1.0.4の場合、204行目)に以下を追加します。
esp32wrover.menu.PartitionScheme.large_spiffs=16MB Flash (2MB APP/12MB SPIFFS) esp32wrover.menu.PartitionScheme.large_spiffs.build.partitions=large_spiffs12MB_16MB esp32wrover.menu.PartitionScheme.large_spiffs.upload.maximum_size=2097152
これで、先ほどのパーテション設定がメニューに表示されるようになります。
Arduino IDEを再起動
設定を有効にするために、いったんArduinoを終了させてから、起動し直します。
[ツール]→[Partition Scheme]の最後に先ほど追加した設定が表示されるようになりました。
試しに3.4MB分のファイルをESP32 Sketch Data Uploadでアップロードしてみました。
上の図のメッセージのように12MBのデータが正常に書き込まれていることがわかりました。
SPIFFSが12MB利用できるようになった
以上の設定で、SPIFFSが12MB利用できるようになりました。APPやOTAの領域を削減することで、もっと広いSPIFFSが利用できるようにもなります。
ESP32-WROVERシリーズの16MB仕様で、SPIFFSを最大限利用するための設定方法でした。
コメント