芯片:esp32s3
开发环境:espidfv4.4
一、官网相关资料
1)简介
SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统,支持磨损均衡、文件系统一致性检查等功能
2)说明
-
目前,SPIFFS 尚不支持目录,但可以生成扁平结构。如果 SPIFFS 挂载在
/spiffs
下,在/spiffs/tmp/myfile.txt
路径下创建一个文件则会在 SPIFFS 中生成一个名为/tmp/myfile.txt
的文件,而不是在/spiffs/tmp
下生成名为myfile.txt
的文件; -
SPIFFS 并非实时栈,每次写操作耗时不等;
-
目前,SPIFFS 尚不支持检测或处理已损坏的块。
-
SPIFFS 只能稳定地使用约 75% 的指定分区容量。
-
当文件系统空间不足时,垃圾收集器会尝试多次扫描文件系统来寻找可用空间。根据所需空间的不同,写操作会被调用多次,每次函数调用将花费几秒。同一操作可能会花费不同时长的问题缘于 SPIFFS 的设计,这个问题可以通过 SPIFFS 配置 部分缓解。
-
被删除文件通常不会被完全清除,会在文件系统中遗留下无法使用的部分。
-
如果 ESP32-S3 在文件系统操作期间断电,可能会导致 SPIFFS 损坏。但是仍可通过
esp_spiffs_check
函数恢复文件系统。详情请参阅官方 SPIFFS FAQ。
二、简单上手
1、配置结构体
esp_vfs_spiffs_conf_t conf = {
.base_path = "/spiffs",
.partition_label = NULL,
.max_files = 5,
.format_if_mount_failed = true
};
2、注册 esp_err_t ret = esp_vfs_spiffs_register(&conf); 多合一函数
3、获取spiffs信心ret = esp_spiffs_info(conf.partition_label, &total, &used);总容量,已使用容量’
4.打开/创建文件FILE* f = fopen("/spiffs/hello.txt", "w");
5、写入关闭文件fprintf(f, "Hello World!\n");
fclose(f);
6、 删除文件:unlink("/spiffs/foo.txt");
7、重命名文件:rename("/spiffs/hello.txt", "/spiffs/foo.txt")
8、读取打印文件信息转为字符串
f = fopen("/spiffs/foo.txt", "r");
char line[64];
fgets(line, sizeof(line), f);
fclose(f);
// strip newline
char* pos = strchr(line, '\n');
if (pos) {
*pos = '\0';
}
9、卸载spiffs:esp_vfs_spiffs_unregister(conf.partition_label);