有人可以为嵌入式项目建议一个小型Flash文件系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有人可以为嵌入式项目建议一个小型Flash文件系统相关的知识,希望对你有一定的参考价值。
我使用的AVR 32位处理器具有512Kby的闪存。我正在使用一个小型文件系统,它将编译到20K字节以下的程序存储器,并提供一些耗损均衡功能,因为应用程序将编写/记录一个相当恒定的数据流。
关于这一点的维基百科文章列出了很多选项,但大多数看起来都是相当重量级的Linux文件系统(说实话我不知道它们会编译得多么小)Wiki List of File systems
我从Stack Overflow中找到的最好的参考Petit FAT提供了比例(~5Kbyes编译)和我所遵循的基本功能,但没有提供任何磨损均衡,因为它基于FAT系统。
有没有人有任何推荐的文件系统或一篇好文章,以帮助我添加磨损均衡到Petit FAT系统
另外,当我在搜索查询中使用单词“flash”时,如何搜索结果中出现的所有Adobe“Flash”问题
Petit FAT是一个与媒体无关的文件系统。它可以与Flash,SD卡接口,硬盘驱动器,RAM磁盘等一起使用。闪存转换层(FTL)的损耗均衡保留为单独的层或模块。
谷歌FTL wear leveling一些好文章。
ST Microelectronics有一些第三方闪存文件系统。
我创建了一个简单但有弹性的日志文件系统,名为log_fs。它是Piconomix FW Library的一部分。
它是为Adesto AT45D DataFlash编写的,但我相信它可以重新用于任何串行闪存设备。它本身具有良好的磨损均衡程度,因为它将分配的页面视为一个大的循环缓冲区。
为了踢出轮胎,我创造了一个例子Pressure & Temperature Logging application
它具有CLI接口,因此您可以检查AT45D DataFlash和log_fs文件系统。
更新2017-02-14:我在非易失性循环缓冲区中检测开始和结束的算法存在致命缺陷。我已经修复了算法,结构打包和对齐问题,以及改进API和扩展文档。
很长一段时间过去了这个问题最初发布,自2011年以来已经进入游戏的几个新的发展。
SPIFFS
其中之一是SPIFFS (SPI Flash File System)。我在几个项目中使用它。
它具有水平磨损和非常低的内存占用。在我的情况下,SPIFFS使用16 kB的闪存和2 kB的RAM来提供4 MB文件的1 MB SPI闪存。
YAFS
另一个,我正在考虑使用的是YAFS。它的内存占用空间更大,但它是一个日志类型的文件系统,它可能对涉及大量写/修改操作的任务产生积极影响。
内存估计可以在名为"Yaffs memory footprint"的YAFS网站上找到。
实现耗损均衡的免费轻量级闪存文件系统很少。
话虽如此,我注意到你正在使用Atmel芯片。实际文件系统是位于芯片上还是外部闪存芯片上?如果它位于Atmel DataFlash芯片上,您可以考虑使用DataFlash软件套件。它包含一个带磨损均衡的文件系统,是免费的。您必须与Atmel签署协议。这是一个Press Release提到该软件。值得考虑的事情。
我手工制作了许多闪存文件系统,这些系统涉及RAM,松弛空间要求,存储效率和擦除块大小之间的不同权衡。 NAND闪存设备已经变得非常庞大和便宜,我一直在考虑的一种方法,但实际上没有使用,将每个字节存储为16位,以便允许随机字节读取纠错码( *),并以擦除块大小分配内容,忽略大量内存。即使最终只使用总芯片尺寸的一小部分,我最后一次看到价格NAND闪存比NOR闪存要便宜得多,例如使用1/16的1GB闪存设备比64MB NOR闪存更便宜。
(*)例如,在每个字节值b之后,计算t =(b ^(b * 2)^(b * 8)^(b * 32))然后输出((t&255)^(t >> 8)^ 255)。这将允许检测和纠正所有单位和双位错误(写入的0xFF的位模式将与空白器件的位模式相同,因此空白字的双位错误将读为0xFF)。
以上是关于有人可以为嵌入式项目建议一个小型Flash文件系统的主要内容,如果未能解决你的问题,请参考以下文章