[讨论] 谈谈自己移植FatFs的看法!

zhaojun_xf   2010-7-17 15:41 楼主

       很久以前就开始对SD卡钟情了,原因不用多少说,控制方便,容量大,速度快,价格便宜等等。但是不能总把它当Flash用吧,就一个扇区的读,一个扇区的写,多没劲啊(不过刚开始读写成功后也挺兴奋的,哈哈)。那怎么办呢?不用多少都是上文件系统,那么上什么文件系统呢?

 

       翻阅了大量的资料发现,常见的文件系统用FAT12、FAT16、FAT32(我就不用介绍它们的名字及意义了,网上很多介绍的)。当然随着SD卡的容量越来越大FAT12、FAT16就有点力不从心了,所以决定写一个FAT32文件系统。当然又的大量的查阅资料也例程,最终开始了FAT32的开发之旅。。。

 

       由于本人刚开始学习的是51和AVR,当然51过文件系统太吃力了,所以就用AVR编写文件系统。选择的是AVR的mega128,这款IC的容量非常充足,速度也没有说的,应该是M系统的贵族了。通过个多月的编写,文件系统终于可以工作了,能够读取一个文件了,当然是一阵兴奋。。。

 

       这个文件系统是用ICC编写的,使用中非常不错。所以在后来我学习了LPC2148后就想把它移植到MDK平台下。但是经过多次试验,让我感到了失望,就连初始化都通不过,我开始动摇了,是否要自己写文件系统呢?为什么不移植别人的文件系统能?如果自己写的这么简单的移植都通不过还有什么意义?

[ 本帖最后由 zhaojun_xf 于 2010-7-17 15:48 编辑 ]
我的博客

回复评论 (6)

       接下来就是在网络上找成功的文件系统,在网络上的文件系统常见的有四个:UC/FS;ZLG/FS;efsl;FatFS。这里我就不都介绍了,在我的《LPC1114 FAT下读写SD卡https://bbs.eeworld.com.cn/thread-105572-1-1.html中有详细的说明。也看了网友们多这些文件系统的评价和移植笔记,但是还是看了一头雾水,感觉比写还难(没实践的结果)。就这样一直脱到论坛送我LPC1114的开发板,我才正式开始FATFS的移植。。。

 

       通过一段时间的努力,才发现其实移植是非常简单的,只有你安装要求编写好几个底层函数就可以了。接下来就是怎样使用API函数了。对于API函数的应用,刚开始也是不知道怎么开始,当然也是查看FATFS官方网的例程和说明,还有网友们移植的代码,最终发现就一条规律(请看《LPC1114 FAT下读写SD卡》)。所有的API的应用都是差不多的,只要会一个了,别的就大同小异了。

 

      通过这次移植,当我充分的感觉的移植是一件相对简单是事情,至少要比你自己写要好很多:

 

1. 不用重复工作,反应大量的资料。

2. 非常稳定,快捷。

3. 再次移植非常简单,基本上不用修改。

 

这次移植不光是会移植了文件系统,对别的系统接程序的移植也有了很大的帮助,懂得了移植的全不过程及方式方法,收获颇多。

我的博客
点赞  2010-7-17 16:01
现在我也就这一个项目上应用了FATFS,感觉非常棒,下面将有两个项目会继续使用fatfs。
我的博客
点赞  2010-7-17 16:05
移植文件系统需要注意的事项:

1. 为了提高SD卡的稳定性,最好在初始化SD卡时尽量降低速度,初始化完成后可以尽快提高速度。

2. 为了读写大量的数据,最后好编写SD卡的多扇区读写函数,这样好说吗的是,不是多次调用SD卡的单扇区读写函数。

3. 验证时最后先测试扇区的读写是否则正确,后才接系统测试。
我的博客
点赞  2010-7-17 16:13

楼主你好,想请教你一个问题。

我也移植了一下FATFS,平台是STM32+MDK,读文件没有问题,但是不能新建一个文件再读写。代码如下:f_mount(0, &fs);
    res = f_open(&fdst, "0:3333.txt", FA_CREATE_ALWAYS | FA_WRITE);
这里res返回Assertion failed的错误代码,
   res = f_write(&fdst, buffer, 512, &bw);   
这里res 返回The file/directory object is invalid的错误代码
    f_close(&fdst);

    f_mount(0, NULL);
打断点进去看了一下,发现cl = ((DWORD)LD_WORD(dir+DIR_FstClusHI) << 16) | LD_WORD(dir+DIR_FstClusLO);        /* Get start cluster */这个地方有问题,cl返回值总是0XFFFFFFFF,单片机用的是STM32F103ZET6,编译器用的是KEIL V4 ,按照网上的一遍《比较详细介绍FatFs文件系统移植的文章》改了一下,也不起作用, 请问楼主碰到过此种问题没有?谢谢!
点赞  2011-11-11 17:19

ye

我也在这个问题
点赞  2012-7-10 23:12
把3333.txt改成3333.txt在试试看。。。。。。。。
我的博客
点赞  2012-7-11 10:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复