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的块。