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。有兩種多載分別公開簡單與擴充介面:

簡單形式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 將位元組寫入快閃記憶體。有兩種多載分別公開簡單與擴充介面:

簡單形式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 的區塊。