求在flash中建立文件系统的资料【恢复】
我想在串行flash中建立一个文件系统,我用的是fatfs,但是flash的写很麻烦,要分块的擦除,好要注意平衡磨损,难度好大呀。希望有这方面经验的大侠指点一下。 虽然有更好的解决方案,但是在FLASH做文件系统依然有意义.一张2G的SD卡三十元.一个带FLASH的单片才多少钱?在使用文件不多的情况下用SD卡,U盘等解决方案,是不是大材小用. 其实按我的理解,觉得用flash做文件系统完全没有必要的,
第一,所谓的文件系统都是用来给操作系统来读写的,而os有专门的文件系统,没必要靠我们自己来编写。
第二,在单片机系统里又不能使用fread,fwrite来读写文件,有文件系统也没什么用。
第三,楼下补充 有没有相关的源代码啊?参考一下.只是定义说明没多大用处. 先去百度查一下;
YAFFS文件系统简介
YAFFS是第一个专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备;并且是在GPL(General Public License)协议下发布的,可在其网站免费获得源代码。
YAFFS中,文件是以固定大小的数据块进行存储的,块的大小可以是512字节、1 024字节或者2 048字节。这种实现依赖于它能够将一个数据块头和每个数据块关联起来。每个文件(包括目录)都有一个数据块头与之相对应,数据块头中保存了ECC(Error Correction Code)和文件系统的组织信息,用于错误检测和坏块处理。充分考虑了NAND Flash的特点,YAFFS把这个数据块头存储在Flash的16字节备用空间中。当文件系统被挂载时,只须扫描存储器的备用空间就能将文件系统信息读入内存,并且驻留在内存中,不仅加快了文件系统的加载速度,也提高了文件的访问速度,但是增加了内存的消耗。
为了在节省内存的同时提高文件数据块的查找速度,YAFFS利用更高效的映射结构把文件位置映射到物理位置。文件的数据段被组织成树型结构,这个树型结构具有32字节的节点,每个内部节点都包括8个指向其他节点的指针,叶节点包括16个2字节的指向物理地址的指针。YAFFS在文件进行改写时总是先写入新的数据块,然后将旧的数据块从文件中删除。这样即使在修改文件时意外掉电,丢失的也只是这一次修改数据的最小写入单位,从而实现了掉电保护,保证了数据完整性。
结合贪心算法的高效性和随机选择的平均性,YAFFS实现了兼顾损耗平均和减小系统开销的目的。当满足特定的小概率条件时,就会尝试随机选择一个可回收的页面;而在其他情况下,则使用贪心算法来回收最“脏”的块。
YAFFS文件系统是按层次结构设计的,分成以下4部分: yaffs_guts.c,文件系统的主要算法,这部分代码完全是用可移植的C语言编写的;yaffs_fs.c,Linux VFS层的接口;NAND 接口,yaffs_guts 和NAND 内存访问函数之间的包装层,例如调用Linux mtd 层或者RAM模拟层;可移植函数,服务的包装函数。最重要的一点是,为了获得更好的移植性,YAFFS提供直接调用的模式,这才使得我们有机会来实现YAFFS文件系统在C51系统上的移植。 用flash比用SD卡简单多了,只不过网上SD卡的驱动和资料很多,拿来用就可以了,不过SD卡或是U盘都是flash的存储芯片,寿命也都是10W次,估计要写好久才能坏掉,一般应用估计差不多,如果用在工程上恐怕有些冒险,楼主如果只是做下位机存储的话,还是考虑用YAFFS的文件系统比较好些,存储数据量小的话,考虑下铁电吧,号称无限读写,不过容量太小了,我现在做的东西是想把数据资料以FAT文件系统格式存储,再直接虚拟成U盘设备,类似目前的数码相机或是MP3等设备,为了兼容性问题只能考虑FAT文件系统了。 FATFS在SD卡中实现了,但是flash中的还没有想好。
我对文件系统的理解还不是很好,坐起来难度很大,网上差了些资料,好像用日志文件系统的比较多。
继续深入学习基础。
希望高人多出来指导。 呵呵,还真有不少人搞这个啊,现在我也正准备做这个,FATFS+AT45DB,感觉FAT文件系统不适合flash,分区表部分读写太频繁了,估计分区表的扇区先挂掉,那整个文件系统就完了,数据区的读写次数倒不是很多,只有从底层将分区表的部分做平衡读写+CRC,我现在的思路是将分区表的写入次数放入扇区的512后的附带空间上,每次检查写入次数,超出后转移分区表到其它扇区并更新DBR,下次就从新的分区表开始读写了,楼上的兄弟有什么好思路。现在正移植FATFS到flash中。YAFFS是专门针对flash的文件系统,microsoft也出了适合wince的TFAT文件系统。 我也正想搞这个.你的FATFS已经实现了吗? 没人理,顶起来 收藏 终于有同道中人,希望向楼主请教 来学习
页:
[1]