3. 文件系统与存储¶
通过使用开发板支持的 Zephyr DiskAccess 或 FashArea (flash map) 接口,存储模块支持 FAT 与 littlefs 格式的虚拟文件系统。
在 os 挂载文件系统
中查看。
3.1. 磁盘访问(Disk Access)¶
zephyr.DiskAccess 类可用于访问存储设备,例如 SD 卡。它使用 Zephyr Disk Access API ,实现了 os.AbstractBlockDev
协议。
与 SD 卡控制器一起使用时,SD 卡必须在启动时存在且不能移除;它们将在启动时由文件系统自动检测和初始化。 访问 SD 卡需要使用磁盘驱动程序接口和文件系统通过磁盘访问(见下文)。
在 mimxrt1050_evk 开发板上访问一个 FatFS 的 SD 卡使用示例:
import os
from zephyr import DiskAccess
bdev = zephyr.DiskAccess('SDHC') # create block device object using DiskAccess
os.VfsFat.mkfs(bdev) # create FAT filesystem object using the disk storage block
os.mount(bdev, '/sd') # mount the filesystem at the SD card subdirectory
with open('/sd/hello.txt','w') as f: # open a new file in the directory
f.write('Hello world') # write to the file
print(open('/sd/hello.txt').read()) # print contents of the file
3.2. 闪存区(Flash Area)¶
zephyr.FlashArea 类可用于实现低级存储系统或自定义文件系统配置。 要在设备上存储持久化数据,推荐使用更高级别的文件系统 API(见下文)。
它使用 Zephyr Flash map API ,实现了 os.AbstractBlockDev
协议。
在 reel_board 或 rv32m1_vega_ri5cy 开发板上的访问内部闪存的使用示例:
import os
from zephyr import FlashArea
bdev = FlashArea(FlashArea.STORAGE, 4096) # create block device object using FlashArea
os.VfsLfs2.mkfs(bdev) # create Little filesystem object using the flash area block
os.mount(bdev, '/flash') # mount the filesystem at the flash storage subdirectory
with open('/flash/hello.txt','w') as f: # open a new file in the directory
f.write('Hello world') # write to the file
print(open('/flash/hello.txt').read()) # print contents of the file
对于 MicroPython 应用程序会溢出到默认闪存存储分区的开发板 —— 例如 frdm_k64f 等,通过将 FlashArea.STORAGE
替换为整数值 4 来使用暂存分区。