直接上移植ff9a文件系统的移植步骤了,有些地方不了解,比如ff.c文件里面的一些函数,看得比较糊涂,但是那不影响我们的移植,先让文件系统跑起来,然后继续拧分析比较好。OK,不说废话了。
一、官网下载ff9a源代码,解压出来有doc和src两个文件夹。在我们的SD实验里面的project下面建立一个名为FAT的文件夹,然后将src里面的diskio.c、diskio.h、ff.c、ff.h、integer.h、ffcinf.h一共6个文件添加进去,最后看到我的Manage compnents就是这样
二、整体框架的修改,对于文件系统,我们需要修改的文件真的很少,因为很多东西,都帮我们想好了的,这里我就直接把代码贴出来,一看就能明白,哪些地方坐了修改的。
主要的就是修改diskio.c里面的文件
[csharp] view plain copy
print?
- /*************************************************************************************
- * 函数库说明:Disk驱动函数
- * 作者: King_BingGe
- * 创建日期: 2013年04月4号
- * 说明:移植FF9A
- **************************************************************************************/
- #include "diskio.h"
- #include "SD_Card.h"
- /**************************************************************************************
- * 名 称: disk_initialize
- * 功 能: Inidialize a Drive
- * 参 数: drv:表示需要初始化的磁盘对象
- * 调用方式:disk_initialize(0);
- * 返 回 值: 状态标识0:表示成功
- **************************************************************************************/
- DSTATUS disk_initialize (BYTE drv)
- {
- switch (drv) {
- case 0 :
- if(!SD_Initialize())
- return RES_OK;
- else return RES_ERROR;
- case 1 :
- return RES_ERROR;
- case 2 :
- return RES_ERROR;
- default:
- return RES_ERROR;
- }
- }
- /**************************************************************************************
- * 名 称: disk_status
- * 功 能: Get Disk RES_ERRORus
- * 参 数: drv:表示需要获取状态的磁盘对象
- * 调用方式:disk_status(0);
- * 返 回 值: 状态标识0:表示成功
- **************************************************************************************/
-
- DSTATUS disk_status (BYTE drv)
- {
- switch (drv) {
- case 0 :
-
- return RES_OK;
-
- case 1 :
- return RES_ERROR;
- case 2 :
- return RES_ERROR;
- default:
- return RES_ERROR;
- }
- }
-
- /**************************************************************************************
- * 名 称: disk_read
- * 功 能: Read Sector(s)
- * 参 数:drv :表示需要读扇区的磁盘对象
- * BYTE *buff: Data buffer to store read data
- * DWORD sector: Sector address (LBA)
- * BYTE count: Number of sectors to read (1..128)
- * 调用方式:disk_read(0,buff,0,1);
- * 返 回 值: 状态标识0:表示成功
- ***************************************************************************************/
-
- DSTATUS disk_read (BYTE drv,BYTE *buff, DWORD sector, BYTE count)
- {
- switch (drv) {
- case 0 :
- if(!SD_ReadDisk(buff,sector,count))//读块
- return RES_OK;
- else return RES_ERROR;
- case 1 :
- return RES_ERROR;
- case 2 :
- return RES_ERROR;
- default:
- return RES_ERROR;
- }
- }
-
- /**************************************************************************************
- * 名 称: disk_write
- * 功 能: Write Sector(s)
- * 参 数:drv :表示需要写扇区的磁盘对象
- * BYTE *buff: Data buffer to store write data
- * DWORD sector: Sector address (LBA)
- * BYTE count: Number of sectors to write(1..128)
- * 调用方式 :disk_write(0,buff,0,1);
- * 调用方式:disk_initialize(0,buff,0,1);
- * 返 回 值: 状态标识0:表示成功
- ***************************************************************************************/
-
- #if _USE_WRITE
- DSTATUS disk_write (BYTE drv, const BYTE *buff, DWORD sector, BYTE count)
- {
- switch (drv) {
- case 0 :
- if(!SD_WriteDisk(buff,sector,count))//读块
- return RES_OK;
- else return RES_ERROR;
- case 1 :
- return RES_ERROR;
- case 2 :
- return RES_ERROR;
- default:
- return RES_ERROR;
- }
- }
- #endif
-
- /**************************************************************************************
- * 名 称: disk_write
- * 功 能: 该函数在磁盘格式化、获取文件系统信息等操作时会被调用
- * 参 数: drv:表示需要读扇区的磁盘对象
- * BYTE drv: Physical drive nmuber (0..)
- * BYTE *buff: Data buffer to store read data
- * 调用方式:disk_ioctl(0,1,buff);
- * 返 回 值: 状态标识0:表示成功
- ***************************************************************************************/
-
- #if _USE_IOCTL
- DSTATUS disk_ioctl (BYTE drv, BYTE ctrl,void *buff)
- {
- switch (drv) {
- case 0 :
- return RES_ERROR;
- case 1 :
- return RES_ERROR;
- case 2 :
- return RES_ERROR;
- case 3 :
- return RES_ERROR;
- case 4 :
- return RES_ERROR;
- default:
- return RES_ERROR;
- }
- }
- #endif
-
- int get_fattime()
- {
- return 0;
- }
|