2

我正在考虑将 FAT 文件系统用于嵌入式数据记录应用程序。记录器只会创建一个文件,每分钟不断地向该文件附加 40 字节的数据。经过几年的使用,这将超过一百万个写入周期。我的问题是:FAT 系统是否会在每次附加文件时更改文件分配表?它如何跟踪文件末尾的位置?它只是在末尾放置一个 EndOfFile 标记还是将长度存储在 FAT 表中?如果它确实在我每次写入时都会更改 FAT 表,那么我会在短短几年内将 FLASH 存储器耗尽。FAT 系统是否适合用于此应用程序?

我的另一个想法是,我可以将原始数据字节存储在存储卡中,并在每次写入时在数据末尾放置一个 EndOfFile 标记。虽然这不太理想,因为这意味着从记录器中获取数据的唯一方法是通过串行传输,而不是通过 PC 和读卡器。

4

5 回答 5

3

FAT 会在您修改文件时更新目录表(至少,如果您关闭文件,它会更新,我不确定如果不这样做会发生什么)。这不仅仅是文件大小,它也是最后修改日期:

http://en.wikipedia.org/wiki/File_Allocation_Table#Directory_table

如果您的闪存控制器没有进行透明磨损均衡,并且您的闪存驱动程序没有重新定位东西以平衡磨损,那么我想您可能会导致磨损。请查阅您的手册,但如果您使用的是消费类硬件,我会认为一切都在某处具有磨损均衡。

从好的方面来说,如果您担心的事件每分钟只发生一次,那么您应该能够在测试中大大加快它的速度,看看 2 年的日志条目是否真的会破坏您的实际硬件。甚至可能比试图找到相关的制造商文档更快......

于 2010-09-01T13:25:26.593 回答
2

不,闪存文件系统驱动程序被明确设计为最大限度地减少磨损并将其分散到内存单元中。利用接近零的寻道时间。你的数据速率很低,它会持续很长时间。指定每年更换一次介质是一种将风险降至最低的简单方法。

于 2010-09-01T13:15:28.957 回答
0

如果您唯一的操作是附加到一个文件,那么放弃文件系统并将闪存设备用作数据磁带可能会更简单。不过,您必须考虑闪存的类型及其块大小。

于 2010-09-01T16:36:02.197 回答
0

您是否检查过在电源故障或设备重置的情况下 FAT 文件系统的一致性会发生什么?

当您的设备遇到此类故障时,您不能只丢失您正在编写的日志条目。旧条目必须保持有效。

不,如果您需要读回数据,FAT 不是正确的选择。

如果闪存充满数据,您应该进一步考虑会发生什么。如何为新数据获取空间?您需要为此点定义要求。

于 2010-09-09T14:52:22.360 回答
0

大型闪存芯片分为大小为 264 (256+8) 字节的 2 次方倍数的子页面、2 次方倍数的页面和 1 次方的块- 两个倍数。空白页将读取为所有 FF。一次可以写一页;可以写的最小单位是子页面。一旦子页面被写入,它可能不会被重写,直到包含它的整个块被擦除。请注意,在较小的闪存芯片上,可以单独写入页面的字节,前提是只写入空白字节,但在许多较大的芯片上这是不可能的。我认为在目前的芯片中,子页面大小为528字节,页面大小为2048+64字节,块大小为128K+4096字节。

MMC、SD、CompactFlash 或其他此类卡(基本上是 SmartMedia 以外的任何卡)将闪存芯片与处理器结合在一起,以处理 PC 风格的扇区写入。基本上发生的情况是,当写入一个扇区时,控制器会定位一个空白页,在那里写入该扇区的新版本以及最多 16 个字节的“标题”信息,指示它是哪个扇区等。然后控制器保持一个所有不同信息页面所在位置的地图。

SmartMedia 卡直接暴露闪存接口,并依靠相机、读卡器或其他使用它的设备按照标准方法执行此类数据管理。

请注意,跟踪 2 gig 卡上所有 4,000,000 页的下落将需要 12-16 meg 的 RAM,或者使用 12-16 meg 的闪存作为辅助查找表。使用后一种方法意味着每次写入闪存页面都需要写入查找表。如果速度较慢的闪存设备使用这种方法(以便只需要跟踪大约 16,000 个“间接”页面的下落),我一点也不感到惊讶。

无论如何,最重要的观察是闪存写入时间是不可预测的,但您通常不必担心闪存磨损。

于 2010-09-01T16:48:17.623 回答