今回はフラッシュメモリーの使用領域を増やしてみます。
今回も 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バイトでは足りなくなることがあるかも知れません。
そんな場合には、ぜひパーティーションテーブルを使ってみてください。