mimxrt --- NXP i.MXRT 专属功能

mimxrt 模块包含 NXP i.MXRT 系列微控制器专属的函数和类。

class mimxrt.Flash

获取单例对象,该对象将板载 QSPI 闪存的用户存储区域作为与 vfs.AbstractBlockDev 兼容的块设备暴露出来。块号相对于该区域的起始位置,而非闪存的物理起始位置。

在大多数情况下,要在设备上存储持久化数据,你会想要使用更高层的抽象——例如通过 Python 标准文件 API 访问文件系统。该接口对于 自定义文件系统配置 或为你的应用实现底层存储系统很有用。

该对象还实现了缓冲区协议,允许通过 QSPI XIP 基址对整个闪存存储区域进行只读的内存映射访问。这使得无需发起任何闪存读取,即可获得该区域的零拷贝视图:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

底层闪存扇区所使用的块大小可在运行时通过 ioctl(5, 0) 查询。

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) 没有对齐约束。

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, 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) 确保受影响的块已被擦除。

如果底层闪存擦除或写入操作失败,则引发 OSError

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

标准的 vfs.AbstractBlockDev ioctl 入口点。完整的 cmd 值列表请参见 vfs.AbstractBlockDev.ioctl()cmd=5 返回以字节为单位的闪存块大小;cmd=6 擦除索引为 arg 的块。