alif --- Alif Ensemble SoC 函式

alif 模組提供 Alif Ensemble SoC 的特定移植功能,包括用於板載 OSPI flash(快閃記憶體)的區塊裝置包裝器,以及一個從 Secure Enclave 服務傾印 SoC 資訊的輔助工具。

範例:

import alif

alif.info()
flash = alif.Flash()

函式

alif.info() None

將從 Alif Secure Enclave 服務(SE services)收集到的裝置資訊傾印至序列終端機。

類別

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

建立一個由板載 OSPI flash(快閃記憶體)支援的區塊裝置物件。此類別僅在韌體建置時啟用 OSPI 支援時才可使用。

在不帶引數呼叫時,會回傳涵蓋 flash(快閃記憶體)可寫入檔案系統區域的預設單例物件。

start 是進入 flash(快閃記憶體)儲存區域的位元組偏移量。必須是 flash 區塊大小的倍數,且須在 flash 儲存範圍之內。預設為 -1,表示從偏移量 0 開始。

len 是此物件所公開之 flash(快閃記憶體)區域的長度(以位元組計)。必須是 flash 區塊大小的倍數,且不可超出 flash 儲存區域的結尾。預設為 -1,表示使用自 start 起的所有剩餘位元組。

此物件也實作了緩衝區協定,允許透過 OSPI XIP 基底位址對 flash(快閃記憶體)區域進行唯讀的記憶體對映存取。如此一來,無需發出任何 flash 讀取,即可取得整個區域的零拷貝檢視:

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

從 flash(快閃記憶體)讀取位元組到 buf 中。有兩種多載分別公開簡單與擴充介面:

簡單形式readblocks(block_num, buf)):從區塊索引 block_num 開始讀取整個區塊。len(buf) 必須是 flash(快閃記憶體)區塊大小的倍數。

擴充形式readblocks(block_num, buf, offset)):從區塊 block_num 內的位元組 offset 開始讀取 len(buf) 個位元組——不一定是整數個區塊。len(buf) 沒有對齊限制。

成功時回傳 0,否則回傳負的錯誤碼。請注意,標準的 MicroPython 區塊裝置協定回傳 Nonealif 驅動程式刻意公開底層的 OSPI 狀態碼,使繞過 vfs 的呼叫端能對硬體錯誤作出反應。

writeblocks(block_num: int, buf: bytes) int
writeblocks(block_num: int, buf: bytes, offset: int) int

buf 中的位元組寫入 flash(快閃記憶體)。有兩種多載分別公開簡單與擴充介面:

簡單形式writeblocks(block_num, buf)):從區塊索引 block_num 開始寫入整個區塊。len(buf) 必須是 flash(快閃記憶體)區塊大小的倍數。每個受影響的區塊在寫入前都會自動被抹除。

擴充形式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 (區塊數量)——回傳該區域中的區塊數量。

  • 5 (區塊大小)——以位元組回傳 flash(快閃記憶體)區塊大小。

  • 6 (區塊抹除)——抹除索引 arg 處的區塊,並回傳抹除操作的結果。

其他 cmd 值會回傳 None

常數

alif.usb_msc: bool

僅在韌體建置時啟用 USB Mass Storage Class 支援時才會存在並設為 True。否則此屬性不存在。