alif --- Alif Ensemble SoC 関数¶
alif モジュールは、Alif Ensemble SoC 向けのポート固有機能を公開します。これには、オンボードの OSPI フラッシュ用ブロックデバイスラッパーや、Secure Enclave サービスから SoC 情報をダンプするヘルパーが含まれます。
例:
import alif
alif.info()
flash = alif.Flash()
関数¶
クラス¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
オンボードの OSPI フラッシュに連動するブロックデバイスオブジェクトを作成します。このクラスは、ファームウェアが OSPI サポートを有効にしてビルドされている場合にのみ利用できます。
引数なしで呼び出すと、フラッシュの書き込み可能なファイルシステム領域全体をカバーするデフォルトのシングルトンオブジェクトを返します。
startはフラッシュストレージ領域内へのバイトオフセットです。フラッシュブロックサイズの倍数で、かつフラッシュストレージの範囲内でなければなりません。デフォルトは-1で、これはオフセット0から開始することを意味します。lenはこのオブジェクトが公開するフラッシュ領域の長さ(バイト単位)です。フラッシュブロックサイズの倍数で、かつフラッシュストレージ領域の末尾を超えてはなりません。デフォルトは-1で、これはstartからの残りのバイトすべてを使用することを意味します。このオブジェクトはバッファプロトコルも実装しており、OSPI XIP ベースを介したフラッシュ領域への読み取り専用のメモリマップドアクセスを可能にします。これにより、フラッシュ読み取りを一切発行することなく、領域全体のゼロコピービューを利用できます:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
フラッシュから
bufにバイトを読み込みます。2 つのオーバーロードがシンプルなインターフェースと拡張インターフェースを公開します:シンプル形式 (
readblocks(block_num, buf)): ブロックインデックスblock_numから開始してブロック全体を読み込みます。len(buf)はフラッシュブロックサイズの倍数でなければなりません。拡張形式 (
readblocks(block_num, buf, offset)): ブロックblock_num内のバイトoffsetから開始してlen(buf)バイト(必ずしもブロック全体の整数倍ではない)を読み込みます。len(buf)にアライメント制約はありません。成功時には
0を、失敗時には負のエラーコードを返します。標準の MicroPython ブロックデバイスプロトコルはNoneを返すことに注意してください。alifドライバは、vfsをバイパスする呼び出し元がハードウェアエラーに反応できるよう、基盤となる OSPI ステータスコードを意図的に公開します。
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
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)呼び出しによって、影響を受けるブロックが消去済みであることを保証しなければなりません。成功時には
0を、失敗時には負のエラーコードを返します(その理由についてはreadblocks()を参照してください)。
- ioctl(cmd: int, arg: int) int¶
ブロックデバイスの制御操作を実行します。
cmdは標準的な MicroPython のMP_BLOCKDEV_IOCTL_*コマンドのいずれかです:1(init) ---0を返します。2(deinit) ---0を返します。3(sync) ---0を返します。4(block count) --- 領域内のブロック数を返します。5(block size) --- フラッシュブロックサイズをバイト単位で返します。6(block erase) --- インデックスargのブロックを消去し、消去操作の結果を返します。
その他の
cmd値はNoneを返します。