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 来使用暂存分区。