1

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

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

我找到了“ Petit FAT 文件系统”,我想知道这是否适合我的需要......?

有人可以告诉我“Petit FAT 文件系统”是否可以做到这一点,或者就如何处理这个问题给我任何建议?

谢谢 !

4

3 回答 3

2

我没有研究过 Petit 文件系统,但你真正的限制是 NAND 闪存。制造数据表可能会指出在需要擦除之前您可以成功对每个块进行多少次写入。可能没有硬限制,但在达到最大写入计数后数据的完整性将无法保证。

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

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

小写支持可能会在数据表中通过可能提供的特殊预留存储区来解决。因此,再次检查数据表。

如果您发布链接,或者指出您使用的是什么硬件,我可以尝试给您一个更明确的答案。

于 2011-03-09T10:23:52.620 回答
1

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

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

此外,该闪光灯电路看起来不太有希望。首先,我发现他们没有输入周期数或数据保留,而是参考“认证报告”,这很可疑。这可能表明内存质量差。数据表上写着 2009 年和三星。如果我可能愤世嫉俗,那可能意味着该芯片已经过时了。三星并没有最好的长寿声誉。

于 2011-03-09T15:16:31.907 回答
0

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

于 2011-03-10T06:20:54.197 回答