ESP32存储-4.SPIFFS文件系统
说明:
- 本文档由DuRuofu撰写,由DuRuofu负责解释及执行。
- 本文档主要介绍,ESP32 flash SPIFFS文件系统的使用.
修订历史:
文档名称 | 版本 | 作者 | 时间 | 备注 |
---|---|---|---|---|
ESP32存储-SPIFFS文件系统 | v1.0.0 | DuRuofu | 2024-03-06 | 首次建立 |
ESP32存储-SPIFFS文件系统
一、介绍
关于esp32的spiffs文件系统的详细内容,请看esp32官网的介绍:espidf编程指南-spiffs
- SPIFFS是一种专门为像ESP32/8266这种嵌入式设备而开发的微型文件系统,SPIFFS是设置在Flash中的一块空间,可以用来存放如网页、图片等体积小的静态资源,而无需采用存储于外部SD卡的方式。
- SPIFFS中的数据不会因为断电而丢失
对于spiffs,乐鑫提供了很好的支持,专门提供了工具(spiffsgen.py,mkspiffs)用于对实现spiffs 在esp32 上的创建、格式化等操作。
注意:
- 目前,SPIFFS 尚不支持目录,但可以生成扁平结构。如果 SPIFFS 挂载在
/spiffs
下,在/spiffs/tmp/myfile.txt
路径下创建一个文件则会在 SPIFFS 中生成一个名为/tmp/myfile.txt
的文件,而不是在/spiffs/tmp
下生成名为myfile.txt
的文件;- SPIFFS 并非实时栈,每次写操作耗时不等;
- 目前,SPIFFS 尚不支持检测或处理已损坏的块。
- SPIFFS 只能稳定地使用约 75% 的指定分区容量。
- 当文件系统空间不足时,垃圾收集器会尝试多次扫描文件系统来寻找可用空间。根据所需空间的不同,写操作会被调用多次,每次函数调用将花费几秒
- 被删除文件通常不会被完全清除,会在文件系统中遗留下无法使用的部分
- 如果 ESP32 在文件系统操作期间断电,可能会导致 SPIFFS 损坏。但是仍可通过
esp_spiffs_check
函数恢复文件系统。
二、SPIFFS文件系统使用
2.1 新建工程,准备自定义分区表
在分区表里添加 soiffs 文件系统的分区
1 |
|
选择自定义分区表:
2.2 建立soiffs镜像
在项目根目录建立soiffs镜像文件夹spiffs_image
在项目mian组件cmarklist文件添加镜像构建工具相关代码:spiffs_create_partition_image(my_spiffs_partition my_folder FLASH_IN_PROJECT)
1 |
|
2.3 码里挂载文件系统
然后在代码里挂载文件系统即可:
1 |
|
esp_vfs_spiffs_register
用于将SPIFFS注册并挂载到虚拟文件系统(VFS)中,并指定路径前缀。
函数参数中的conf是一个指向esp_vfs_spiffs_conf_t
配置结构体的指针。
esp_vfs_spiffs_conf_t
参数:
- base_path: 文件系统关联的文件路径前缀。
- partition_label: 可选项,要使用的 SPIFFS 分区的标签。如果设置为 NULL,则将使用 subtype=spiffs 的第一个分区。
- max_files: 可同时打开的最大文件数。
- format_if_mount_failed: 如果为 true,在挂载失败时将格式化文件系统。
三、案例
下面的示例程序来自:https://github.com/espressif/esp-idf/tree/v5.2.1/examples/storage/spiffsgen
主要功能包括初始化 SPIFFS、读取文件内容以及计算文件的 MD5 哈希值。
在 app_main
函数中,首先初始化 SPIFFS 文件系统,然后获取文件系统的信息,接着依次调用 read_hello_txt
和 compute_alice_txt_md5
函数来读取 hello.txt
文件的内容和计算 alice.txt
文件的 MD5 哈希值。最后,取消挂载 SPIFFS 文件系统并结束程序。
1 |
|
效果:
参考链接
ESP32存储-4.SPIFFS文件系统
https://www.duruofu.xyz/posts/62664/