Azure Sphere でのストレージの使用
重要
これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。
このトピックでは、Azure Sphere デバイス上でストレージを使用する方法について説明します。 Azure Sphere では、読み取り専用のフラッシュ ストレージと変更可能ストレージという 2 種類のストレージを提供しています。
読み取り専用ストレージは、アプリケーションのイメージ パッケージをデバイス上に格納するために使用され、アプリケーションを更新することなくその内容を変更することはできません。 これには、ユーザー インターフェイス アセット、静的構成データ、外部 MCU を更新するために使用されるファームウェア イメージを含むバイナリ リソース、変更可能ストレージの初期化データなどの任意のデータを含めることができます。 アプリケーションで使用可能なメモリにより、使用可能なストレージの量に関する詳細が提供されます。
変更可能ストレージには、デバイスが再起動したときに保持されるデータを格納します。 たとえば、ローカル タイム ゾーンを使用してシステム時刻を管理する場合は、タイム ゾーンの設定を変更可能ストレージに格納できます。 その他の例として、ユーザーが変更できる設定やダウンロードされた構成データがあります。 変更可能ストレージ サンプルは、アプリケーションで変更可能ストレージを使用する方法を示しています。
Note
フラッシュを繰り返し更新すると、最終的にフラッシュが摩耗し、無効になります。 そのため、フラッシュの不要な更新を避けるためにコードを設計する必要があります。 たとえば、再起動後に保存された状態を回復できるように、終了する前にアプリケーションの状態を保存する場合は、状態が変更された場合にのみ、アプリケーションの状態をフラッシュに保存することを検討してください。
読み取り専用ストレージの使用
次の Applibs 関数を使用して、読み取り専用ストレージを管理できます。 これらの関数の使用例については、「curl を使用して Web サービスに接続する」を参照してください。
読み取り専用のストレージ要件
読み取り専用ストレージを使用するアプリケーションでは、適切なヘッダー ファイルをインクルードする必要があります。
storage ヘッダーと unistd ヘッダーをプロジェクトにインクルードします。
#include <unistd.h>
#include <applibs/storage.h>
ファイルをイメージ パッケージに追加する
Azure Sphere デバイス上の読み取り専用ストレージにファイルを追加する場合、そのファイルをリソースとしてプロジェクトに追加し、アプリケーションのイメージ パッケージに含めることができます。 ファイルをリソースとして追加するには、CMakeLists.txt でこれらの関数を使用します。
azsphere_target_add_image_package を使用して、イメージ パッケージ ファイルとビルド時に含めるすべてのリソース ファイルを指定します。 次に例を示します。
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
これで、"file1.dat" と "file2.dat" ファイルがイメージ パッケージに表示されます。 これらの関数の詳細については、CMake 関数の使用に関するページを参照してください。
Note
絶対パスは、RESOURCE_FILESではサポートされていません。
変更可能ストレージの使用
アプリケーションのために変更可能ストレージを構成すると、アプリケーションのコンポーネント ID が割り当てられ、別のコンポーネント ID を持つアプリケーションではアクセスできなくなります。 アプリケーションのコンポーネント ID が変わると、新しいアプリケーションで前のアプリケーションの変更可能ストレージにアクセスすることはできません。
デバイスからアプリケーションを削除すると、そのアプリケーションに割り当てられた変更可能ストレージも削除されます。 同じアプリケーションがデバイスに再び読み込まれた場合、変更可能ストレージは空になります。 ただし、アプリケーションを削除せずに更新した場合、変更可能ストレージの内容は保持されます。
azsphere device app show-quota コマンドにより、現在使用中の変更可能ストレージの容量が表示されます。
Azure Sphere OS には、重要な構成状態とファイル システム メタデータの破損を回避するための電源損失保護メカニズムが用意されています。 変更可能なストレージ API には、これらの機能の利点があります。 ただし、変更可能ストレージの実際の内容は、バッファーがフラッシュされるかどうか、およびその順序によって異なるため、電源損失時のすべての保留中の変更が回復後にファイル自体に反映される保証はありません。
次の Applibs 関数を使用して、変更可能ストレージのデータを管理できます。
変更可能ストレージの要件
変更可能ストレージを使用するアプリケーションでは、適切なヘッダー ファイルをインクルードし、変更可能ストレージの設定をアプリケーション マニフェストに追加する必要があります。
変更可能ストレージのヘッダー ファイル
storage ヘッダーと unistd ヘッダーをプロジェクトにインクルードします。
#include <unistd.h>
#include <applibs/storage.h>
アプリケーション マニフェスト
このトピックの API を使用するには、MutableStorage
機能をアプリケーション マニフェストに追加した後、SizeKB
フィールドを設定する必要があります。 SizeKB フィールドは、変更可能ストレージのサイズをキロバイト単位で指定する整数です。 最大値は 64 であり、デバイスの消去ブロック サイズに応じてストレージが割り当てられます。 値がデバイスのブロック サイズの倍数でない場合は、SizeKB 値を次のブロック サイズに切り上げることで割り当てが行われます。
Note
MT3620 の消去ブロック サイズは 8 KB です。したがって、8 の倍数でない値はすべて切り上げられます。 たとえば、"MutableStorage" 機能に 12 KB を指定すると、MT3620 で 16 KB を受信します。
次の例では、MutableStorage ストレージ機能が 8 KB のサイズでアプリケーション マニフェストに追加されます。
{
"SchemaVersion": 1,
"Name" : "Mt3620App_Mutable_Storage",
"ComponentId" : "9f4fee77-0c2c-4433-827b-e778024a04c3",
"EntryPoint": "/bin/app",
"CmdArgs": [],
"Capabilities": {
"AllowedConnections": [],
"AllowedTcpServerPorts": [],
"AllowedUdpServerPorts": [],
"MutableStorage": { "SizeKB": 8 },
"Gpio": [],
"Uart": [],
"WifiConfig": false,
"NetworkConfig": false,
"SystemTime": false
}
}
永続データを書き込む
永続的ストレージにデータを書き込むには、Applibs 関数 Storage_OpenMutableFile を呼び出して永続的なデータ ファイルのファイル記述子を取得することから始めます。 次に、write
関数を呼び出して、データを永続的なデータ ファイルに書き込みます。 書き込もうとしたデータの量が変更可能ストレージの割り当てを超えている場合でも、書き込み関数は成功する場合があります。ただし、書き込まれるデータは、ストレージの割り当てを超えていない部分のみになります。 すべてのデータが書き込まれたことを確認するために、write
関数呼び出しの戻り値をチェックする必要があります。
永続データを読み取る
永続的ストレージからデータを読み取るには、Storage_OpenMutableFile を呼び出して永続的なデータ ファイルのファイル記述子を取得した後、read
関数を呼び出してデータを読み取ります。
永続データを削除する
永続的ストレージからデータを削除するには、Storage_DeleteMutableFile を呼び出します。