FatFs移植笔记

本人一向较懒,为了方便自己使用SPI Flash,决定移植一个文件系统,这样就可以免去每次写入都要计算地址的痛苦,下面主要讲一下我对FatFs移植的一些体会,一来方便以后的朋友,二来给自己做个笔记。

首先,先简单的介绍一下FatFs,FatFs是一个适用于嵌入式系统地开源的通用FAT文件系统模型,这也就是说,它是与硬件无关的。移植工作的重点在两个方面:1、根据实际硬件情况配置FatFs;2、实现硬件I/O驱动,并将硬件驱动适配到FatFs。

FatFs配置分析:

下表给出了我移植时对FatFs的配置情况

配置选项 说明 实际值 评论
 _FS_TINY 使能Tiny版本 0 目前RAM空间充足
_FS_READONLY 使能只读 0 文件系统支持读写操作
_FS_MINIMIZE 设置功能裁减程度 0 使用全功能版本
_USE_STRFUNC 使能string功能 0 不使能
_USE_MKFS 使能f_mkf功能 1 使能mkfs,用来格式化SPI Flash
_USE_FORWARD 使能f_forward;   0 不是用forward
_USE_FASTSEEK 使能fast_seek 0 不使用fastseek
_CODE_PAGE 设置code page 1 只支持ascii码
_USE_LFN 使能长文件名 0 不支持长文件名,增加移植成功率
_MAX_SS 最大扇区大小 4096 SPI Flash的扇区大小为4K
_FS_RPATH 使能相对路径  0 不使用相对路径,先移植成功后再使能也不迟
_FS_LABEL 使能lable 0 不使用Lable功能
_VOLUMES 设置最大支持volume数 1 系统中只存在一个volume,即SPI Flash
_MULTI_PARTITION 使能多分区 0 整块flash当成一个分区,不分区
_FS_REENTRANT 使能重入 0 不带RTOS,不需要同步
_FS_LOCK 设置文件最大打开数  0 每个文件只许打开一次

 下图介绍了FatFs配置与功能裁减之间的关系:

(TBD)

FatFs用户定义函数说明:

FatFs的移植工作量不大,用户只需要完成6个函数就可以完成工作, 分别为:disk_initialize,disk_status,disk_read,disk_write,disk_ioctl,get_fattime。

函数 功能
DSTATUS disk_initialize (
  BYTE pdrv           /* [IN] Physical drive number */
)
函数的主要功能是完成对应硬件IO驱动的初始化工作,对于我的移植来说,就是完成SPI驱动的初始化
DSTATUS disk_status (
  BYTE pdrv     /* [IN] Physical drive number */
)
获取当前硬件的状态
DRESULT disk_read (
  BYTE pdrv,     /* [IN] Physical drive number */
  BYTE* buff,    /* [OUT] Pointer to the read data buffer */
  DWORD sector/* [IN] Start sector number */
  UINT count     /* [IN] Number of sectros to read */
)

这个函数FatFs会调用硬件驱动去读取若干个扇区数据到buffer中

DRESULT disk_write (
  BYTE drv,         /* [IN] Physical drive number */
  const BYTE* buff, /* [IN] Write data (may be non aligned) */
  DWORD sector,     /* [IN] Sector number to write */
  UINT count        /* [IN] Number of sectors to write */
)
这个函数FatFs会调用硬件驱动写若干个扇区
DRESULT disk_ioctl (
  BYTE pdrv,     /* [IN] Drive number */
  BYTE cmd,      /* [IN] Control command code */
  void* buff     /* [I/O] Parameter and data buffer */
)
这个函数,FatFs可以获取扇区大小,块大小,扇区个数;以及擦除扇区
DWORD get_fattime (void) 通过函数获取时间,一般情况下会使用RTC

在完成了上面的工作后,FatFs的移植也就完成了,接下来就可以写代码来测试了。 此外,在移植的过程中,扇区的对齐也是要着重考虑的,扇区对齐不仅有利于效率的提升,更能延长设备的使用寿命。这一点我会再写一篇文章来讲述。 

希望这篇文章对朋友们会有帮助,有什么问题可以留言探讨,这里就不贴代码了占篇幅了。

 

posted @ 2013-10-19 12:29  ZHX_1Q89  阅读(1335)  评论(0编辑  收藏  举报