# 存储 API

[English]

本节提供高层次的存储 API 的参考文档。这些 API 基于如 SPI flash、SD/MMC 等低层次驱动。

- 分区表 API 基于 分区表 ，允许以块为单位访问 SPI flash。

- 非易失性存储库 (NVS) 在 SPI NOR flash 上实现了一个有容错性，和磨损均衡功能的键值对存储。

- 虚拟文件系统 (VFS) 库提供了一个用于注册文件系统驱动的接口。SPIFFS、FAT 以及多种其他的文件系统库都基于 VFS。

- SPIFFS 是一个专为 SPI NOR flash 优化的磨损均衡的文件系统，非常适用于小分区和低吞吐率的应用。

- FAT 是一个可用于 SPI flash 或者 SD/MMC 存储卡的标准文件系统。

- 磨损均衡 库实现了一个适用于 SPI NOR flash 的 flash 翻译层 (FTL)，用于 flash 中 FAT 分区的容器。

与存储安全相关的信息，请参考 存储安全。

备注

建议使用高层次的 API（`esp_partition` 或者文件系统）而非低层次驱动 API 去访问 SPI NOR flash。

由于 NOR flash 和乐鑫硬件的一些限制，访问主 flash 会影响各个系统的性能。关于这些限制的更多信息，参见 SPI flash API。

- FAT 文件系统
- 在主机上生成和解析 FATFS
- 量产程序
- 非易失性存储库
- 在引导程序中使用 NVS
- NVS 加密
- NVS 分区生成程序
- NVS 分区解析程序
- SD/SDIO/MMC 驱动程序
- 分区 API
- SPIFFS 文件系统
- 虚拟文件系统组件
- 磨损均衡 API
- Storage Security

## 示例

存储 API 相关例程
例程 | 描述
nvs_rw_blob | 演示了如何在 NVS flash 中使用 C 语言 API 读写 blob 数据类型。
nvs_rw_value | 演示了如何在 NVS flash 中使用 C 语言 API 读写整数数据类型。
nvs_rw_value | 演示了如何在 NVS flash 中使用 C++ 语言 API 读写整数数据类型。
nvs_bootloader | 演示了如何使用引导加载程序代码中可用的 API 来读取 NVS 数据。
nvsgen | 演示了如何使用基于 Python 的 NVS 镜像生成工具，根据 CSV 文件内容创建 NVS 分区镜像。
nvs_console | 演示了如何通过交互式控制台界面使用 NVS。

常用文件系统 API
代码示例 | 描述
fatfs/getting_started | 演示了如何使用 FATFS 库在内部 flash 上应用标准文件 API (stdio.h)。
fatfs/fs_operations | 演示了如何使用 POSIX API 进行文件系统操作，如移动、删除和重命名文件等。

FATFS API 示例
代码示例 | 描述
fatfsgen | 演示了在主机上使用 Python 工具生成 FATFS 镜像的相关功能。
ext_flash_fatfs | 演示了在外部 flash 上使用带有磨损均衡功能的 FATFS。
wear_leveling | 演示了在内部 flash 上使用带有磨损均衡功能的 FATFS。

SPIFFS API 示例
代码示例 | 描述
spiffs | 演示了如何使用 SPIFFS API 初始化文件系统，并使用 POSIX 函数处理文件。
spiffsgen | 演示了在主机计算机上使用 Python 工具生成 SPIFFS 镜像的功能。

分区 API 示例
代码示例 | 描述
partition_api | 介绍了用于查找特定分区、执行基本 I/O 操作以及通过 CPU 内存映射使用分区的 API 函数。
parttool | 演示了在主机计算机上使用 Python 工具生成分区镜像的功能。

VFS 相关示例
代码示例 | 描述
littlefs | 演示了如何使用 LittleFS 组件初始化文件系统，并使用 POSIX 函数处理文件。
semihost_vfs | 演示了如何使用 VFS API，利用 POSIX 函数使 ESP 设备访问通过 JTAG 连接的主机上的文件。

此文档对您有帮助吗？

- 反馈已收到，谢谢！
- 如果您有其他意见，欢迎填写乐鑫文档反馈表。

- 我们重视您的反馈。
- 您可以填写乐鑫文档反馈表告诉我们如何改进该文档。