class Flash -- 存取內建快閃記憶體儲存

Flash 類別提供對 RP2040 外部 QSPI 快閃記憶體晶片的直接區塊層級存取。此驅動程式實作了 vfs.AbstractBlockDev 介面,因此可傳遞給 vfs.mount() 以進行自訂檔案系統設定。

大多數指令碼透過自動掛載於 / 的檔案系統來持久化資料,而不會直接建構 Flash。在下列情況下,您才需要手動建構一個:

  • 在自訂分割區上掛載非預設的檔案系統(例如用 vfs.VfsFat 包裝)。

  • 讀取或寫入不屬於檔案系統的韌體區域或工廠資料區塊。

  • 實作繞過檔案系統層的自訂快閃記憶體上儲存格式。

建構子

class rp2.Flash Flash

傳回由 RP2040 的 QSPI 快閃記憶體晶片支援的單例 Flash 區塊裝置物件。所揭露的第一個區塊是緊接在韌體區域之後的那個區塊,因此呼叫者只會看到晶片中可供檔案系統使用的區域。

方法

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

從快閃記憶體將位元組讀取到 buf。這是檔案系統層所使用的標準 vfs.AbstractBlockDev 區塊裝置進入點。

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

擴充形式readblocks(block_num, buf, offset)):從區塊 block_num 內的位元組 offset 開始讀取 len(buf) 個位元組——不一定是整數個區塊。供 littlefs 及其他以位元組定址的檔案系統使用。

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

buf 中的位元組寫入快閃記憶體。這是檔案系統層所使用的標準 vfs.AbstractBlockDev 區塊裝置進入點。

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

擴充形式writeblocks(block_num, buf, offset)):從區塊 block_num 內的位元組 offset 開始寫入 len(buf) 個位元組——不一定是整數個區塊。不會執行隱含抹除——呼叫者必須透過先前的 ioctl(6, block_num) 呼叫,確保受影響的區塊已被抹除。

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

標準的 vfs.AbstractBlockDev 控制進入點。在掛載/卸載時以及每次同步時,由檔案系統層呼叫。可辨識的 cmd 值:

  • 1 —— 初始化。成功時傳回 0

  • 2 —— 取消初始化。成功時傳回 0

  • 3 —— 同步待處理的寫入。傳回 0

  • 4 —— 傳回檔案系統可見的快閃記憶體區塊數量。

  • 5 —— 傳回以位元組為單位的區塊大小(通常為快閃記憶體扇區大小,4096)。

  • 6 —— 抹除索引 arg 處的區塊。在使用擴充形式的 writeblocks 之前必須先執行此操作。

  • 7 —— 傳回裝置是否支援區塊抹除指令(在 RP2040 上為 1)。

直接呼叫者通常不會使用此方法——一旦 Flash 被掛載,檔案系統驅動程式就會自動分派這些標準代碼。