alif --- Alif Ensemble SoC 函式¶
alif 模組提供 Alif Ensemble SoC 的特定移植功能,包括用於板載 OSPI flash(快閃記憶體)的區塊裝置包裝器,以及一個從 Secure Enclave 服務傾印 SoC 資訊的輔助工具。
範例:
import alif
alif.info()
flash = alif.Flash()
函式¶
類別¶
- 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 區塊裝置協定回傳None;alif驅動程式刻意公開底層的 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())。