3. ファイルシステムとストレージ¶
ストレージモジュールは FAT および littlefs フォーマットの仮想ファイルシステムをサポートし、ボードがサポートする Zephyr DiskAccess または FlashArea (フラッシュマップ) APIによって支えられています。
3.1. ディスクアクセス¶
zephyr.DiskAccess クラスは、SD カードなどのストレージデバイスにアクセスするのに使えます。このクラスは Zephyr ディスクアクセス API を使い、 vfs.AbstractBlockDev
プロトコルを実装しています。
SD カードコントローラで使う場合、SD カードはブート時に存在し、取り外されていない必要があります。SDカードはブート時にファイルシステムによって自動検出され、初期化されます。ディスクアクセス経由で SD カードにアクセスするには、ディスクドライバインターフェイスとファイルシステムを使います(下記参照)。
mimxrt1050_evk ボード上の SD カードによる FatFS の使用例:
import vfs
from zephyr import DiskAccess
bdev = zephyr.DiskAccess('SDHC') # DiskAccess を使ってブロックデバイスオブジェクトを作成
vfs.VfsFat.mkfs(bdev) # ディスクストレージブロックを使って FAT ファイルシステムを作成
vfs.mount(bdev, '/sd') # SD カード用のサブディレクトリにファイルシステムをマウント
with open('/sd/hello.txt','w') as f: # マウントしたディレクトリに新規ファイルをオープン
f.write('Hello world') # ファイルに書き出し
print(open('/sd/hello.txt').read()) # ファイルの内容を表示
3.2. フラッシュ領域¶
クラス FlashArea -- 内蔵フラッシュストレージへのアクセス クラスは、低レベルのストレージシステムの実装やファイルシステム構成のカスタム化に使えます。デバイス上に永続的なデータを保存するには、より高レベルのファイルシステムAPIを使用することを推奨します(下記参照)。
このクラスは Zephyr Flash map API を使用し、 vfs.AbstractBlockDev
プロトコルを実装しています。
次に示すのは reel_board または rv32m1_vega_ri5cy ボードの内蔵フラッシュでの使用例です:
import vfs
from zephyr import FlashArea
bdev = FlashArea(FlashArea.STORAGE, 4096) # FlashArea を使ってブロックデバイスオブジェクトを作成
vfs.VfsLfs2.mkfs(bdev) # フラッシュエリアブロックを使って Little ファイルシステムを作成
vfs.mount(bdev, '/flash') # フラッシュストレージ用のサブディレクトリにファイルシステムをマウント
with open('/flash/hello.txt','w') as f: # マウントしたディレクトリに新規ファイルをオープン
f.write('Hello world') # ファイルに書き出し
print(open('/flash/hello.txt').read()) # ファイルの内容を表示
frdm_k64f のように、MicroPython アプリケーションがデフォルトのフラッシュストレージパーティションを超えてしまうボードでは、 FlashArea.STORAGE
を整数値 4 に置き換えてスクラッチパーティションを使うようにします。