class Flash -- 内蔵フラッシュストレージへのアクセス

Flash クラスは、STM32 ベースの OpenMV Cam 上のプライマリフラッシュデバイスへの直接アクセスを可能にします。

ほとんどの場合、デバイス上に永続データを保存するには、たとえば Python の標準ファイル API を介したファイルシステムのような、より高レベルの抽象化を使用することになります。ただし、このインターフェースは ファイルシステム構成のカスタマイズ や、アプリケーション向けの低レベルストレージシステムの実装に役立ちます。

注釈

OpenMV Cam H7 PlusPure ThermalN6 はプライマリストレージに外部 SPI/QSPI/XSPI フラッシュチップを使用します。その他の STM32 ベースの OpenMV Cam は MCU 内部のフラッシュを使用します。Python インターフェースはどちらの場合も同一です。

コンストラクタ

class pyb.Flash
class pyb.Flash(*, start: int = -1, len: int = -1)

オンボードフラッシュ向けの vfs.AbstractBlockDev 互換ブロックデバイスを構築します。2 つの形式があります。

  • Flash()(引数なし): 仮想パーティションテーブルが先頭に付加された状態でフラッシュ全体を公開する、レガシーなシングルトンオブジェクトを返します。実際のフラッシュデータはブロック 0x100 から始まります。この形式は非推奨であり、将来の MicroPython リリースで削除される予定です。

  • Flash(start=..., len=...): バイトオフセット start(デフォルト 0)から len バイト分(デフォルト: デバイスの残り全体)のフラッシュにアクセスする新しいブロックデバイスを返します。どちらの値も、基盤となるブロックサイズの倍数でなければなりません(内部フラッシュでは通常 512 バイト。外部 SPI/QSPI/XSPI 部品はより大きな消去セクタサイズを使用します)。

メソッド

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

フラッシュから buf へバイトを読み込みます。2 つのオーバーロードが単純なインターフェースと拡張インターフェースを公開します。

単純形式readblocks(block_num, buf)): ブロックインデックス block_num から始まるブロック全体を読み込みます。len(buf) はフラッシュブロックサイズの倍数でなければなりません。

拡張形式readblocks(block_num, buf, offset)): ブロック block_num 内のバイト offset から始まる len(buf) バイトを読み込みます(必ずしもブロック全体の整数倍ではありません)。len(buf) にアライメントの制約はありません。これは明示的な start / len 引数で作成されたオブジェクトでのみサポートされ、非推奨のシングルトンではサポートされません。

writeblocks(block_num: int, buf: bytes | bytearray) None
writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None

buf からフラッシュへバイトを書き込みます。2 つのオーバーロードが単純なインターフェースと拡張インターフェースを公開します。

単純形式writeblocks(block_num, buf)): ブロックインデックス block_num から始まるブロック全体を書き込みます。len(buf) はフラッシュブロックサイズの倍数でなければなりません。影響を受ける各ブロックは、書き込み前に自動的に消去されます。

拡張形式writeblocks(block_num, buf, offset)): ブロック block_num 内のバイト offset から始まる len(buf) バイトを書き込みます(必ずしもブロック全体の整数倍ではありません)。len(buf) にアライメントの制約はなく、暗黙的な消去は行われません。呼び出し側は、事前の ioctl(6, block_num) 呼び出しによって、影響を受けるブロックが消去済みであることを保証しなければなりません。これは明示的な start / len 引数で作成されたオブジェクトでのみサポートされます。

ioctl(cmd: int, arg: int) int | None

標準の vfs.AbstractBlockDev ioctl エントリポイントです。cmd 値の完全な一覧については vfs.AbstractBlockDev.ioctl() を参照してください。cmd=5 はフラッシュブロックサイズをバイト単位で返します。cmd=6 はインデックス arg のブロックを消去します。