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

Flash 類別可直接存取基於 STM32 的 OpenMV Cam 上的主要快閃記憶體裝置。

在大多數情況下,要在裝置上儲存持久性資料時,你會想使用較高階的抽象,例如透過 Python 標準檔案 API 使用檔案系統,但此介面對於 自訂檔案系統設定 或為你的應用程式實作低階儲存系統很有用。

備註

OpenMV Cam H7 PlusPure ThermalN6 使用外部 SPI/QSPI/XSPI 快閃記憶體晶片作為主要儲存空間;其他基於 STM32 的 OpenMV Cam 則使用 MCU 內部的內建快閃記憶體。兩種情況下的 Python 介面都相同。

建構函式

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

為板載快閃記憶體建構一個與 vfs.AbstractBlockDev 相容的區塊裝置。有兩種形式:

  • Flash()(無引數):傳回舊版的單例物件,它會公開整個快閃記憶體,並在前面加上一個虛擬分割表。實際的快閃記憶體資料從區塊 0x100 開始。此形式已棄用,將在未來的 MicroPython 版本中移除。

  • Flash(start=..., len=...):傳回一個全新的區塊裝置,從位元組偏移量 start(預設 0)開始存取快閃記憶體,長度為 len 個位元組(預設:裝置的剩餘部分)。兩個值都必須是底層區塊大小的倍數(內部快閃記憶體通常為 512 位元組;外部 SPI/QSPI/XSPI 元件則使用較大的抹除磁區大小)。

方法

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) 沒有對齊限制。僅支援以明確的 start / len 引數建立的物件,不支援已棄用的單例。

writeblocks(block_num: int, buf: bytes | bytearray) None
writeblocks(block_num: int, buf: bytes | bytearray, 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) 呼叫確保受影響的區塊已被抹除。僅支援以明確的 start / len 引數建立的物件。

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

標準的 vfs.AbstractBlockDev ioctl 進入點。cmd 值的完整清單請參閱 vfs.AbstractBlockDev.ioctl()cmd=5 會傳回以位元組為單位的快閃記憶體區塊大小;cmd=6 會抹除索引為 arg 的區塊。