FAT文件系统和大量写入

时间:2010-09-01 13:04:21

标签: c fat32 fat flash-memory

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

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

5 个答案:

答案 0 :(得分:3)

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

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

如果您的闪存控制器没有进行透明磨损均衡,您的闪存驱动程序不会重新定位以防止磨损,那么我猜您可能会导致磨损。请参阅您的手册,但如果您使用的是消费类硬件,我会认为某些地方都存在磨损程度。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

大型闪存芯片被分为子页面,这些子页面是264(256 + 8)字节大小的两倍数的子页面,两倍于2的幂的页面,以及作为a的块两倍的权力。空白页将显示为所有FF。一个人可以一次写一页;可写的最小单位是子页面。一旦写入子页面,就可以在擦除包含它的整个块之前重写它。请注意,在较小的闪存芯片上,可以单独写入页面的字节,前提是只写入空白字节,但在许多较大的芯片上是不可能的。我认为在当代芯片中,子页面大小为528字节,页面大小为2048 + 64字节,块大小为128K + 4096字节。

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

SmartMedia卡可直接显示闪存界面,并依赖于相机,读卡器或使用它的其他设备根据标准方法执行此类数据管理。

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

在任何情况下,最重要的观察是闪存写入时间是不可预测的,但通常不必担心闪存磨损。

答案 4 :(得分:0)

您是否检查过电源故障或设备重置时FAT文件系统一致性会发生什么变化?

当您的设备遇到此类故障时,您不能仅仅丢失该日志条目,而只是写作。旧条目必须保持有效。

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

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