有人可以为嵌入式项目建议一个小型Flash文件系统

时间:2011-03-09 14:20:55

标签: filesystems embedded

我使用的AVR 32位处理器具有512Kby的闪存。我正在使用一个小型文件系统,它将编译到20K字节以下的程序存储器,并提供一些耗损均衡功能,因为应用程序将编写/记录一个相当恒定的数据流。

维基百科关于此的文章列出了很多选项,但大多数看起来都是相当重量级的Linux文件系统(说实话我不知道它们会编译得多么小) Wiki List of File systems

我从Stack Overflow中发现的最好的是Petit FAT,它提供了比例(~5Kbyes编译)和我所遵循的基本功能,但没有提供任何损耗均衡,因为它基于FAT系统。 / p>

有没有人有任何推荐的文件系统或好的文章来帮助我为Petit FAT系统添加磨损均衡

在搜索时,只要我在搜索查询中使用“flash”一词,我怎样才能停止出现在结果中的所有Adobe“Flash”问题

5 个答案:

答案 0 :(得分:4)

Petit FAT是一个与媒体无关的文件系统。它可以与Flash,SD卡接口,硬盘驱动器,RAM磁盘等一起使用。闪​​存转换层(FTL)的损耗均衡作为单独的层或模块保留。

Google FTL wear leveling了解一些好文章。

ST Microelectronics有一些第三方Flash文件系统。

答案 1 :(得分:4)

我创建了一个名为log_fs的简单但弹性日志记录文件系统。它是Piconomix FW Library的一部分。

它是为Adesto AT45D DataFlash编写的,但我确信它可以重新用于任何串行闪存设备。它本身具有良好的磨损均衡程度,因为它将分配的页面视为一个大的循环缓冲区。

为了启动轮胎,我创建了一个示例Pressure & Temperature Logging application

它有一个CLI界面,您可以检查AT45D DataFlash和 log_fs 文件系统。

更新2017-02-14:我在非易失性循环缓冲区中检测开始和结束的算法存在致命缺陷。我修复了算法,结构打包和对齐问题,以及改进API和扩展文档。

答案 2 :(得分:3)

此问题已经过了很长时间,最初发布,自2011年以来已经有几项新的进展。

SPIFFS

其中一个是SPIFFS (SPI Flash File System)。我在几个项目中使用它。

它具有水平磨损和非常低的内存占用。在我的情况下,SPIFFS使用 16 kB闪存 2 kB RAM 来提供4个文件的1 MB SPI闪存。

YAFS

我正考虑使用的另一个是YAFS。它的内存占用空间更大,但它是一个日志类型的文件系统,它可能对涉及大量写/修改操作的任务产生积极影响。

可以在名为"Yaffs memory footprint"的YAFS网站上找到内存估计值。

答案 3 :(得分:2)

实现耗损均衡的免费轻量级闪存文件系统很少。

话虽如此,我注意到你正在使用Atmel芯片。实际文件系统是位于芯片上还是外部闪存芯片上?如果它位于Atmel DataFlash芯片上,您可以考虑使用DataFlash软件套件。它包含一个带磨损均衡的文件系统,是免费的。您必须与Atmel签署协议。这是Press Release提到的软件。值得考虑的事情。

答案 4 :(得分:1)

我手工制作了许多闪存文件系统,这些系统涉及RAM,松弛空间要求,存储效率和擦除块大小之间的不同折衷。 NAND闪存设备已经变得非常庞大和便宜,我一直在考虑的一种方法,但实际上没有使用,将每个字节存储为16位,以便允许随机字节读取纠错码( *),并以擦除块大小分配内容,忽略大量内存。即使最终只使用总芯片尺寸的一小部分,我最后一次看到价格NAND闪存比NOR闪存要便宜得多,例如比64MB NOR闪存更便宜地使用1/16的1GB闪存设备。

(*)例如,在每个字节值b之后,计算t =(b ^(b * 2)^(b * 8)^(b * 32))然后输出((t& 255)^ (t>> 8)^ 255)。这将允许检测和纠正所有单比特和双比特错误(写入的0xFF的比特模式将与空白设备的比特模式相同,因此空白字的双比特错误将读作0xFF)。 / p>

相关问题