class Flash -- 内蔵フラッシュストレージへのアクセス¶
Flash クラスは、RP2040 の外部 QSPI フラッシュチップへの直接的なブロックレベルアクセスを提供します。このドライバは vfs.AbstractBlockDev インターフェースを実装しているため、カスタムファイルシステム構成のために vfs.mount() に渡すことができます。
ほとんどのスクリプトは / に自動マウントされたファイルシステムを通じてデータを永続化し、Flash を直接構築することはありません。以下の場合に手動で構築します:
カスタムパーティション上に既定ではないファイルシステムをマウントする(例:
vfs.VfsFatでラップする)。ファイルシステムが所有していないファームウェア領域や工場出荷データブロックを読み書きする。
ファイルシステム層をバイパスする独自のオンフラッシュストレージ形式を実装する。
コンストラクタ¶
- class rp2.Flash Flash¶
RP2040 の QSPI フラッシュチップに支えられたシングルトンの
Flashブロックデバイスオブジェクトを返します。最初に公開されるブロックはファームウェア領域の直後のブロックであるため、呼び出し側にはチップのうちファイルシステムに利用可能な領域のみが見えます。メソッド¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
フラッシュからバイトを読み取って
bufに格納します。ファイルシステム層が使用する標準のvfs.AbstractBlockDevブロックデバイスのエントリポイントです。単純形式 (
readblocks(block_num, buf)): ブロックインデックスblock_numから始まるブロック全体を読み取ります。len(buf)はフラッシュブロックサイズの倍数でなければなりません。拡張形式 (
readblocks(block_num, buf, offset)): ブロックblock_num内のバイトoffsetから始まるlen(buf)バイト(必ずしもブロック単位とは限りません)を読み取ります。littlefs やその他のバイトアドレス指定可能なファイルシステムで使用されます。
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
bufのバイトをフラッシュに書き込みます。ファイルシステム層が使用する標準のvfs.AbstractBlockDevブロックデバイスのエントリポイントです。単純形式 (
writeblocks(block_num, buf)): ブロックインデックスblock_numから始まるブロック全体を書き込みます。len(buf)はフラッシュブロックサイズの倍数でなければなりません。影響を受ける各ブロックは、書き込み前に自動的に消去されます。拡張形式 (
writeblocks(block_num, buf, offset)): ブロックblock_num内のバイトoffsetから始まるlen(buf)バイト(必ずしもブロック単位とは限りません)を書き込みます。暗黙的な消去は行われません -- 呼び出し側は、事前のioctl(6, block_num)呼び出しによって対象ブロックが消去済みであることを保証しなければなりません。
- ioctl(cmd: int, arg: int) int | None¶
標準の
vfs.AbstractBlockDev制御エントリポイントです。マウント/アンマウント時、および同期のたびにファイルシステム層から呼び出されます。認識されるcmd値:1-- 初期化。成功時に0を返します。2-- 終了処理。成功時に0を返します。3-- 保留中の書き込みを同期します。0を返します。4-- ファイルシステムから見えるフラッシュブロック数を返します。5-- ブロックサイズをバイト単位で返します(通常はフラッシュセクタサイズの4096)。6-- インデックスargのブロックを消去します。拡張形式のwriteblocksを使用する前に必要です。7-- デバイスがブロック消去コマンドをサポートしているかどうかを返します(RP2040 では1)。
直接の呼び出し側は通常このメソッドを使用しません --
Flashがマウントされると、ファイルシステムドライバが標準コードを自動的にディスパッチします。