class Flash -- 内蔵フラッシュストレージへのアクセス¶
Flash クラスは、STM32 ベースの OpenMV Cam 上のプライマリフラッシュデバイスへの直接アクセスを可能にします。
ほとんどの場合、デバイス上に永続データを保存するには、たとえば Python の標準ファイル API を介したファイルシステムのような、より高レベルの抽象化を使用することになります。ただし、このインターフェースは ファイルシステム構成のカスタマイズ や、アプリケーション向けの低レベルストレージシステムの実装に役立ちます。
注釈
OpenMV Cam H7 Plus、Pure Thermal、N6 はプライマリストレージに外部 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.AbstractBlockDevioctl エントリポイントです。cmd値の完全な一覧についてはvfs.AbstractBlockDev.ioctl()を参照してください。cmd=5はフラッシュブロックサイズをバイト単位で返します。cmd=6はインデックスargのブロックを消去します。