大家好,我是单片机爱好者MCU起航,最近在研究ESP32。用过ESP8266或ESP32的童鞋可能会在官方的SDK中看到这样一个东西:
SPIFFS,这是啥?
从名字我们其实可以简单猜一猜:SPI 接口嘛,FFS,文件系统!
是的,这是一个面向SPI FLASH的文件系统。目前网络上资料不是很多,我个人也只是在ESP8266和ESP32上面见过它。从网络上显示的资料来看,它是github上一位叫pellepl的工程师在2013年编写的一个文件系统,链接如下:
https://github.com/pellepl/spiffs
当前系统版本为0.3.7. 这个文件系统有很多特点,考虑到大部分童鞋英语一般,我直接用工具翻译成中文吧:
介绍:
Spiffs是一个用于嵌入式目标上的SPI NOR flash设备的文件系统。
Spiffs有以下几个特点:
1、小(嵌入式)目标,没有堆的少量RAM
2、只有大范围的数据(块)才能被删除
3、擦除将把所有块中的位重置为1
4、写操作把1变成0
5、0只能被擦除成1
6、磨损均衡
然后是特性:
1、专门为低ram使用而设计
2、使用静态大小的ram缓冲区,与文件的数量无关
3、类可移植操作系统接口:打开、关闭、读、写、查找、统计等
4、它可以在任何NOR闪存上运行,不仅是SPI闪存——理论上也可以在微处理器的嵌入式闪存上运行
5、多个spiffs配置可以在相同的目标上运行—甚至可以在相同的SPI闪存设备上运行
6、实现静态磨损调平(也就是flash的寿命维护)
7、内置文件系统一致性检查
8、高度可配置的
SPIFFS不能做什么:
1、目前,spiffs不支持目录。它产生一个平面结构。使用路径tmp/myfile.txt创建文件将创建一个名为tmp/myfile.txt的文件,而不是在tmp目录下创建一个名为myfile.txt的文件。
2、它不是一个实时堆栈。一个写操作的持续时间可能比另一个长得多。
3、可怜的可伸缩性。Spiffs适用于小型内存设备——SPI flash的正常大小。超过~128Mbyte就不推荐了。由于设计目标是用尽可能少的ram,所以这是设计目标的一个副作用。
4、目前,它不能检测或处理坏块。
5、一个配置,一个二进制。没有通用的spiffs二进制可以处理所有类型的配置。
所以,简单来说,这是一个简易的文件系统,可以面向任何闪存。最初考虑到大部分处理器的RAM资源有限,于是使用少量RAM设计了这样一个文件系统。同时,由于用的RAM比较少,导致它不能处理大于128MB的flash。
扁平化结构,不支持目录。举例,在电脑中,假设我在C盘某路径有一个文件:C:\flexIm\hello.txt,而使用SPIFFS的话,只能创建一个名字为C:\flexIm\hello的txt格式的文件。它还有一个优点,就是考虑到了flash的寿命问题,因此做了算法均匀使用flash中的每一个block。
这次先写到这里,后面我们通过一个例程来看一下SPIFFS的效果。
更多精彩内容,欢迎关注公众号:单片机爱好者。