class Flash -- 存取內建的快閃記憶體儲存空間¶
Flash 類別可直接存取基於 STM32 的 OpenMV Cam 上的主要快閃記憶體裝置。
在大多數情況下,要在裝置上儲存持久性資料時,你會想使用較高階的抽象,例如透過 Python 標準檔案 API 使用檔案系統,但此介面對於 自訂檔案系統設定 或為你的應用程式實作低階儲存系統很有用。
備註
OpenMV Cam H7 Plus、Pure Thermal 與 N6 使用外部 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.AbstractBlockDevioctl 進入點。cmd值的完整清單請參閱vfs.AbstractBlockDev.ioctl()。cmd=5會傳回以位元組為單位的快閃記憶體區塊大小;cmd=6會抹除索引為arg的區塊。