alif --- Alif Ensemble SoC 函数¶
alif 模块为 Alif Ensemble SoC 提供了特定于端口的功能,包括针对板载 OSPI 闪存的块设备封装,以及从 Secure Enclave 服务转储 SoC 信息的辅助工具。
示例:
import alif
alif.info()
flash = alif.Flash()
函数¶
类¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
创建一个由板载 OSPI 闪存支持的块设备对象。此类仅在固件构建时启用了 OSPI 支持的情况下可用。
在不带参数调用时,返回覆盖闪存可写文件系统区域的默认单例对象。
start是进入闪存存储区域的字节偏移量。它必须是闪存块大小的整数倍,且位于闪存存储范围之内。默认为-1,表示从偏移量0处开始。len是该对象所暴露的闪存区域的字节长度。它必须是闪存块大小的整数倍,且不得超出闪存存储区域的末尾。默认为-1,表示使用从start开始的所有剩余字节。该对象还实现了缓冲区协议,允许通过 OSPI XIP 基址对闪存区域进行只读的内存映射访问。这使得无需发出任何闪存读取操作即可获得整个区域的零拷贝视图:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
将闪存中的字节读取到
buf中。两个重载分别暴露了简单接口和扩展接口:简单形式(
readblocks(block_num, buf)):从块索引block_num开始读取整块。len(buf)必须是闪存块大小的整数倍。扩展形式(
readblocks(block_num, buf, offset)):从块block_num内的字节offset处开始读取len(buf)个字节——不必是整数个块。len(buf)没有对齐约束。成功时返回
0,否则返回负的错误码。请注意,标准的 MicroPython 块设备协议返回None;而alif驱动有意暴露底层的 OSPI 状态码,以便绕过vfs的调用者能够对硬件错误做出响应。
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
将
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)调用被擦除。成功时返回
0,否则返回负的错误码(原因参见readblocks())。