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被掛載,檔案系統驅動程式就會自動分派這些標準代碼。