NAND RAW访问

时间:2011-03-08 14:46:27

标签: filesystems embedded flash-memory

我正在使用运行Linux的嵌入式系统中的C ++应用程序。该设备接收消息(少量字节的小块),并且在电源故障时需要存储在非易失性存储器中。这适用于另一个平台,因为可以使用静态RAM。

这个平台上的问题是我们只有一个NAND Flash才能执行此操作,我们希望在同一个块中添加不同的消息,而不必在用新消息更新之前擦除整个块!为每个消息编写文件不是一个好的解决方案,因为它们可能有很多!而且,这必须是高效的,并且应该通过避免太多的擦除而为闪光灯节省生命!我希望能够做到的是逐字节写入闪存而不用担心坏块。

我找到了“Petit FAT File System”,我想知道这是否符合我的需求......?

有人可以通过“Petit FAT文件系统”告诉我这是否可行,或者给我任何关于如何处理这个问题的建议?

谢谢!

3 个答案:

答案 0 :(得分:2)

我没有看过Petit文件系统,但你真正的限制是NAND闪存。制造数据表可能表示在需要擦除之前,您可以成功地为每个块写入多少写入。可能没有硬限制,但在最大写入次数后无法保证数据的完整性。

答案取决于工艺技术和闪存单元设计。例如,它是SLC还是MLC NAND? SLC将能够更好地处理多个块写入。

另一个问题是您的系统上有哪种类型的闪存控制器?如果它使用硬件ECC,那么您可能受到控制器的限制,因为第二次写入将使第一次数据写入的ECC值无效。如果您可以在软件中进行ECC计算,那么它将回到NAND限制。

可以通过可能提供的特殊预留存储区在数据表中解决小写支持问题。再次,请查看数据表。

如果您发布链接或指出您正在使用的硬件,我可以尝试给您更明确的答案。

答案 1 :(得分:1)

如果您正在处理闪存,在写入之前无法删除它。所有闪存都以这种方式工作。根据您的实时要求和数据大小,这可能是也可能不是问题。但是,由于您使用的是嵌入式Linux,因此无论如何,实时可能不是应用程序的主要关注点。

我不明白为什么你需要一个完整的文件系统来存储几个字节?!为什么你首先需要一个外部存储器,你不能写入MCU的内部闪存吗?如果您只需要存储几个字节,带有片上eeprom /数据闪存的MCU可能最适合您的需求。

此外,闪存电路看起来并不太有希望。首先,我发现他们没有输入循环次数和数据保留但是参考“资格化报告”。这可能表明内存质量很差。 数据表显示2009年和三星。如果我可能是愤世嫉俗,这可能意味着芯片已经过时了。三星并不具备最佳的长寿声誉。

答案 2 :(得分:0)

我很好奇你为什么要使用原始闪光灯。为什么不在MTD驱动器上使用JFFS2或UBIFS之类的东西?让MTD驱动程序管理ECC,而JFFS2或UBIFS管理损耗均衡。然后只需打开一个文件,并在需要时写入。