FatFs 文件系统的移植
很久没有更新过博客的东西了,忙,真的很忙,前两天移植了一个文件系统,感觉还八
错,一来怕自己忘了,二来可以给更多的朋友参考参考,让大家少走一些弯路,所以就抽空
记下来了。
因为需要,又不想自己写,所以就移植了一个文件系统。
说下我的硬件和开发工具:接成 TRUE IDE 模式下的 CF 卡(也就是相当于一块硬盘
了),三星 S3C2440的 ARM9,开发工具是很老很老的 D 版的 ADS1.2。
我在网上看到的嵌入式系统上面常用的文件系统有 UCOSII 公司的 UC/FS,支持 CF 卡,
硬盘,SD/MMC 卡,还有 NAND FLASH 等等,比较多,不过是商用的,需要银子的,有
周立功的用于教学用(为什么说是用于教学用的,呵呵,等下就说)的 ZLG/FS,还找到了
开源、免费的两个,其中一个叫做 efsl ,另一个叫做 FatFs 。
现在先不考虑版权的问题,选择一个比较合适的文件系统。第一个 UC/FS 文件系统没
得什么说的,UCOSII 那个公司开发的,稳定性,兼容性应该都不会差。第二个是 ZLG/FS。
周立功的很多的开发板上面都送了这个文件系统的源代码的,在网上找到一个现成的读写硬
盘的,只是是基于 LPC2200系列的处理器的。第三个是 efsl,是一个开源的项目,免费,
只需要提供读扇区和写扇区2个函数。第四个是 FatFs,跟 efsl 一样,也是一个开
源的项目,移植的时候比 efsl 多几个简单的函数。
这里补充一下 CF 卡和硬盘的简单的资料,CF 卡有三种模式,其中有一个
叫 TRUE IDE,接成这个模式以后,就跟他的模式名字一样,他就是一个硬盘,
对他进行读写,也就相当于对一个硬盘进行读写。当引脚 OE(好像是叫 OE,
具体参考 CF 卡文档)在上电的时候检测到拉低,那么 CF 卡就进入 TRUE IDE
模式。读写硬盘的时候,在只写一次 LBA,只发送一个命令(读或者写)的情
况下,最多可以读或者写256个扇区(当然也可以读一个扇区,读或者写多少个
扇区在扇区计数器 count 里面),其中,发一个读或者写命令,读或者写256个扇
区所需要的时间,比分256次去读写这些扇区所需要的时间要短得多,效率要高
得多,我现在需要的是一个读写的速度比较快,效率比较高的文件系统,因此,
底层的读写扇区必须要每写一个命令就可以读写多个扇区,读写扇区的函数必须
要有扇区计数器(前面的 count)这个参数,才可能满足要求。
UC/FS 也是在网上搜了个代码,看了下,很标准的几个层,什么硬件层,文
件系统层,API 层,等等(具体参见 UC/FS 的文档),跟 UCOSII 一个公司的,
稳定性应该不错,需要提供的函数也是读扇区,写扇区等等几个。但是底层的读
写扇区的函数不需要提供扇区计数器 count 这个参数,也就是说,这个文件系统
不能在只写一个读或者写命令的情况下,读或者写多个扇区,本来效感觉不错的
一个文件系统,效率就大大的降低了。