mimxrt --- NXP i.MXRT 固有の機能

mimxrt モジュールには、NXP i.MXRT ファミリのマイクロコントローラに固有の関数とクラスが含まれています。

クラス

class mimxrt.Flash

オンボードの QSPI フラッシュのユーザーストレージ領域を vfs.AbstractBlockDev 互換のブロックデバイスとして公開するシングルトンオブジェクトを取得します。ブロック番号は、フラッシュの物理的な先頭ではなく、その領域の先頭からの相対値です。

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

このオブジェクトはバッファプロトコルも実装しており、QSPI XIP ベースを介してフラッシュストレージ領域全体への読み取り専用のメモリマップアクセスを可能にします。これにより、フラッシュの読み取りを一切発行することなく、領域のゼロコピービューが利用可能になります:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

基盤となるフラッシュセクタが使用するブロックサイズは、実行時に ioctl(5, 0) で照会できます。

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) にアラインメントの制約はありません。

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, 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) 呼び出しによって影響を受けるブロックが消去されていることを保証しなければなりません。

基盤となるフラッシュの消去または書き込み操作が失敗した場合、OSError を発生させます。

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

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