STM32移植fatfs(R0.10a版本)

关于STM32单片机移植FATFS。
使用单片机的朋友都知道单片机一般提供的ROM和RAM都比较小。就算是STM32这样的提供256KB flash和64KB RAM的。一旦你需要存一些数据量比较大的文件的时候还是不够用的。一般可以通过外扩SD和nand flash来实现大容量存储。相对来说SD卡的使用更加方便一些。使用过nand flash的也许会知道nand flash有坏块,使用的时候需要做坏块管理,还有就是需要做损耗均衡。不然nand flash很容易就会坏掉。
下面说说SD卡。SD卡驱动有两种方式。一种是SPI驱动方式。还有一种是SDIO驱动方式。SPI驱动时只需要4更线:CLK、SD_CS、MISO、MOSI。SDIO则需要CLK、CMD、Data0、Data1、Data2、Data3。如果使用SDIO的话必须要硬件支持SDIO。类似51这样的单片机就不具备SDIO接口(STM32具有)。为了方便。这里使用SPI方式驱动SD卡。

这里写图片描述
首先需要去fatfs的网站下载fatfs源码。最好不要使用百度上下载的,因为百度上面的也许人家改过了,到时候出问题了都不知道是在哪里出错的。
http://www.elm-chan.org/fsw/ff/00index_e.html 可以在这里下载最新的源码。拿到源码后解压压缩包。或者使用http://pan.baidu.com/s/1gf3mdgv这里的压缩包,这个是我下载的未修改的源码。解压后的源码有两个文件夹如下图:
fatfs解压
进入src文件夹,问加减里面的文件如下图所示:
这里写图片描述
在移植fatfs之前需要做的工作是写好SD卡的最底层的驱动。这一部分这里不做详细介绍。默认为已经完成该部分工作。
然后建立工程。
首先使用一个已经完成SD卡最底层读写的工程。
SD卡读写工程
我这里使用的是原子的SD卡的底层读写。你也可以自己写。之所以用他的是因为用的人很多,后面大家来套我这个套路也比较容易找到代码。
然后在工程的基础上添加fatfs的相关文件(src文件夹下面的ff.c、diskio.c和option文件夹下面的cc936.c)添加好这两个文件到工程下面之后。就要对fatfs相关文件进行修改。主要修改的是diskio.c和ffcong.h这两个文件。还有就是修改STM32工程文件的path。要把src里面的文件的路径包含进去。
未修改之前diskio.c文件
在未修改之前的diskio.c文件里面的11、12/13行都是有一把红色的×的。那是因为没有这些头文件。直接把他们注释掉就好了。反正也不用。
改为下图模式
修改后的disckio.c文件
把ATA改为SD_Card。我们这里做SD的文件系统。不用管MMC和USB的。可以不用理他。然后diskio.c里面所有的ATA全部改为SD_Card。注释掉:
result = MMC_disk_initialize();
result = USB_disk_initialize();
result = MMC_disk_status();
result = USB_disk_status();
result = MMC_disk_read(buff, sector, count);
result = USB_disk_read(buff, sector, count);
result = MMC_disk_write(buff, sector, count);
result = USB_disk_write(buff, sector, count);
result = MMC_disk_ioctl(cmd, buff);
result = USB_disk_ioctl(cmd, buff);

找到
disk_initialize
修改SD卡的初始化改为:
disk_initialize
当然如果你的SD卡初始化、不是这个名字 请改为你自己SD卡初始化的名字。

修改disk_status函数:改为图中模样。
这里写图片描述
修改disk_read函数 如下图
disk_read函数
同理根据你自己SD的读扇区函数名。
修改disk_write函数
这里写图片描述
修改disk_ioctl函数
这里写图片描述
然后再文件的最后面加上
DWORD get_fattime (void)
{
return 0;
}
//动态分配内存
void ff_memalloc (UINT size)
{
return (void
)mymalloc(size);
}
//释放内存
void ff_memfree (void* mf)
{
myfree(mf);
}

修改ffconf.h文件:
1.将#define _USE_STRFUNC 0改为#define _USE_STRFUNC 1
2.#define _USE_MKFS 0改为#define _USE_MKFS 1
3.#define _USE_FASTSEEK 0改为#define _USE_FASTSEEK 1
4.#define _USE_LABEL 0改为#define _USE_LABEL 1
5.#define _CODE_PAGE 932改为#define _CODE_PAGE 936
6.#define _USE_LFN 0改为#define _USE_LFN 3
7.#define _VOLUMES 1改为#define _VOLUMES 2
到这里基本就修改完了。
这里附上STM32F103RCT6的SD卡fatfa的工程http://pan.baidu.com/s/1cAhWNs
更多软件/硬件/单片机交流请加群:740600942

(待续…)

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值