ESP32 フラッシュメモリーの使用領域を増やす(Arduino)

ESP32 フラッシュメモリーの使用領域を増やす(Arduino)

今回はフラッシュメモリーの使用領域を増やしてみます。
今回も Arduino フレームワークを使います。

この記事は JTAG でデバッグすることを前提にして書いています。
環境構築については こちら をご覧になってください。

投稿時の開発環境を記しておきます。

PC:
Windows10 OS

開発ボード :
ESP32-DevKitCーVE
(Soc : ESP32-D0WD-V3)

デバッガー(H/W):
FT2232D

デバッガー (S/W) :
Visual Studio Code + PlatformIO + Arduino Framework

プロジェクトをつくる

VSCodeで、もし使っていたプロジェクトを開いていたら、File – Close Folder して閉じておきます。

その後にVSCodeからPlatformIOをOpenします。

以下の内容でプロジェクトを新規に作成します。

Name : ESP32A-Flash
Board : Espressif ESP32 Dev Module
Framework : Arduino Framework

Name : ESP32A の “A” は Framework (Arduino Framework)の頭文字を示しています。

(後から見てわかるように、Arduinoを使うことを明示しています)

platformio.ini に以下の4行を追加して、 Ctrl + s で保存しておきます。

COM[8]の8の部分はデバイスマネージャーのポート(COMとLPT)で Silicon Labs CP210x から始まるCOMの番号を記述します。

upload_port はプログラムをアップロードする時に使うCOMポートを指定します。
monitor_port は printf()出力をモニターするCOMポートを指定します。

debug_tool = minimodule
upload_port = COM[8]
monitor_port = COM[8]
monitor_speed = 115200

アクティビティバー

左側の赤枠の部分をアクティビティバーと言います。
デバッグで良く使うのは、一番上と一番下のアイコンです。

一番上のアイコンををポチポチ クリックするとその右側にエクスプローラー(EXPLORER)のツリーが見え隠れします。
一番上のアイコンををポチポチ クリックするとその右側にPlatformIOのツリーが見え隠れします。

ビルドする

アクティビティバーの一番下のアイコンを押してPlatformIOのツリーを表示させて、esp32dev > General > Build を選択してビルドします。

画面下部の TERMINAL に RAM と Flash の使用状況が表示されます。

RAM:   [          ]   4.9% (used 16100 bytes from 327680 bytes)
Flash: [==        ]  15.6% (used 204425 bytes from 1310720 bytes)

使用可能なFlashメモリーは 1310720バイトで、その内の 204425 バイトを使っていると書かれているようです。

まだプログラムを書いていませんが、RTOSなど裏で動くプログラムがあるために Flash の15.6% が消費されているようです。

フラッシュメモリーの使用領域を増やす

もちろん物理的なフラッシュメモリーのサイズを増やせるわけはありません。
設定でフラッシュメモリーの使用領域を変更する方法を試してみます。

コーディングは不要です。

パーティーションテーブル

パーティーションテーブルはフラッシュメモリーをブロックに区分けして、用途を定める csvファイルです。
プログラムを置く場所や電源が切れても保持されるデータを置く場所を定義したファイルです。

パーティーションテーブルについて詳細を知りたい方は こちら をご覧になってください。

PlatformIOでArduinoフレームワークを使ったプロジェクトをつくると、以下のフォルダがつくられます。
(xxxxx は皆さまのユーザー名)

C:\Users\xxxxx\.platformio\packages\framework-arduinoespressif32

パーティーションテーブルのファイルは以下のフォルダにつくられます。

C:\Users\xxxxx\.platformio\packages\framework-arduinoespressif32\tools\partitions

no_ota.csvというファイルがあるので、今回はそれを使ってみます。

no_ota.csvをプロジェクトのplatformio.iniがあるフォルダにコピーします。

iniファイルを編集する

そしてplatformio.iniを次のように編集します。

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
debug_tool = minimodule
upload_port = COM[8]
monitor_port = COM[8]
monitor_speed = 115200
board_build.partitions = no_ota.csv

ctrl + s で保存します。

ビルドして実行する

F5キーを押してプログラムを実行します。
TERMINALにビルドした結果(一部抜粋)が以下のように表示されます。

RAM:   [          ]   4.9% (used 16100 bytes from 327680 bytes)
Flash: [=         ]   9.7% (used 204425 bytes from 2097152 bytes)

Flashの容量が 2097152 bytes に増えました。

no_ota.csv

パーティーションテーブル no_ota.csv について簡単に触れておきます。

OTA は Over The Air (Updates) の略で、無線でプログラムのアップロードを行うしくみです。

今回は OTA を使わない no_ota.csv ファイルを使ってみました。

それではVSCode上で no_ota.csv ファイルをクリックして選択してください。

Typeにappを指定するとプログラム領域になり、dataを指定するとデータ領域になります。

nvsは Non-volatile storage の略 不揮発性メモリーで、その領域指定を行います。
otadataは OTA に使用するためのデータ領域です。
(OTAを使う場合には、プログラム領域も用意することになります)
spiffsはSPINORフラッシュデバイスを対象としたファイルシステムです。

そして app0 でプログラム領域の指定を行います。

Offsetがそれらを配置するメモリーの先頭アドレスになります。
そこからSize分の領域を確保します。

今回 app0 の Size を 0x200000 としたので 2097152バイトが確保されたというわけです。

いかがでしたか?

プログラムを1Mバイト分書くのは相当な作業量だと思います。
でもRTOSなどの裏方さんが使用する領域が大きいと、1Mバイトでは足りなくなることがあるかも知れません。

そんな場合には、ぜひパーティーションテーブルを使ってみてください。

Memoryカテゴリの最新記事