最新版 FatFS 磁盘I/O接口 详解

作者:fly 发布于:2014-3-24 16:40 分类:嵌入式

由于FatFs模块完全与磁盘I/O层分开,因此底层磁盘I/O需要下列函数去读/写物理磁盘以及获取当前时间。由于底层磁盘I/O模块并不是FatFs的一部分,因此它必须由用户提供。

disk_initialize

初始化磁盘驱动器

DSTATUS disk_initialize (

 BYTE Drive           /* 物理驱动器号 */

);

参数

Drive


指定待初始化的物理驱动器号。

返回值

disk_initialize函数返回一个磁盘状态作为结果。磁盘状态的详情,参考disk_status函数。


描述

disk_initialize函数初始化一个物理驱动器。函数成功后,返回值中的STA_NOINIT标志被清除。

disk_initialize函数被FatFs模块在卷挂载过程中调用,去管理存储介质的改变。当FatFs模块起作用时,或卷上的FAT结构可以被瓦解时,应用程序不能调用该函数。可以使用f_mount函数去重新初始化文件系统。

disk_status

获取当前磁盘的状态

DSTATUS disk_status (

 BYTE Drive     /* 物理驱动器号*/

);

参数

Drive


指定待确认的物理驱动器号。

返回值

磁盘状态,是下列标志的组合: STA_NOINIT


指示磁盘驱动器还没有被初始化。当系统复位、磁盘移除和disk_initialize函数失败时,该标志被设置;当disk_initialize函数成功时,该标志被清除。STA_NODISK

指示驱动器中没有存储介质。当安装了磁盘驱动器后,该标志始终被清除。

STA_PROTECTED


指示存储介质被写保护。在不支持写保护缺口的驱动器上,该标志始终被清除。当STA_NODISK被设置时,该标志无效。

disk_read

从磁盘驱动器中读取扇区

DRESULT disk_read (

 BYTE Drive,          /* 物理驱动器号 */

 BYTE* Buffer,        /* 读取数据缓冲区的指针 */

 DWORD SectorNumber,  /* 起始扇区号 */

 BYTE SectorCount     /* 要读取的扇区数 */

);

参数

Drive


指定物理驱动器号。

Buffer


存储读取数据的缓冲区的指针。该缓冲区大小需要满足要读取的字节数(扇区大小 * 扇区总数。由上层指定的存储器地址可能会也可能不会以字边界对齐。SectorNumber

指定在逻辑块地址(LBA)中的起始扇区号。

SectorCount


指定要读取的扇区数(1-255)。

返回值

RES_OK (0)


函数成功

RES_ERROR


在读操作过程中发生了不能恢复的硬错误。

RES_PARERR


无效的参数。

RES_NOTRDY


磁盘驱动器还没被初始化。

disk_write

向磁盘驱动器中写入扇区

DRESULT disk_write (

 BYTE Drive,          /* 物理驱动器号 */

 const BYTE* Buffer,  /* 写入数据缓冲区的指针(可能未对齐) */

 DWORD SectorNumber,  /* 起始扇区号 */

 BYTE SectorCount     /* 要写入的扇区数 */

);

参数

Drive


指定物理驱动器号。

Buffer


存储写入数据的缓冲区的指针。由上层指定的存储器地址可能会也可能不会以字边界对齐。

SectorNumber


指定在逻辑块地址(LBA)中的起始扇区号。

SectorCount


指定要写入的扇区数(1-255)。

返回值

RES_OK (0)


函数成功

RES_ERROR


在读操作过程中发生了不能恢复的硬错误。

RES_WRPRT


存储介质被写保护。

RES_PARERR


无效的参数。

RES_NOTRDY


磁盘驱动器还没被初始化。

描述

在只读配置中,不需要此函数。

disk_ioctl

控制设备特定的功能以及磁盘读写以外的其它功能。

DRESULT disk_ioctl (

 BYTE Drive,      /* 驱动器号 */

 BYTE Command,    /* 控制命令代码 */

 void* Buffer     /* 数据传输缓冲区 */

);

参数

Drive


指定驱动器号(1-9)。

Command


指定命令代码。

Buffer


取决于命令代码的参数缓冲区的指针。当不使用时,指定一个NULL指针。

返回值

RES_OK (0)


函数成功。

RES_ERROR


发生错误。

RES_PARERR


无效的命令代码。

RES_NOTRDY


磁盘驱动器还没被初始化。

描述

FatFs模块只使用下述与设备无关的命令,没有使用任何设备相关功能。


命令 描述

CTRL_SYNC 确保磁盘驱动器已经完成等待写过程。当磁盘I/O模块有一个写回高速缓存时,立即冲洗脏扇区。在只读配置中,不需要该命令。

GET_SECTOR_SIZE 返回驱动器的扇区大小赋给Buffer指向的WORD变量。在单个扇区大小配置中(_MAX_SS 为 512),不需要该命令。

GET_SECTOR_COUNT 返回总扇区数赋给Buffer指向的DWORD变量。只在f_mkfs函数中,使用了该命令。

GET_BLOCK_SIZE 返回以扇区为单位的存储阵列的擦除块大小赋给Buffer指向的DWORD变量。当擦除块大小未知或是磁盘设备时,返回1。只在f_mkfs函数中,使用了该命令。

get_fattime

获取当前时间

DWORD get_fattime (void);

返回值

返回的当前时间被打包进一个DWORD数值。各位域定义如下:

bit31:25


年,从1980年开始算起(0..127)

bit24:21


月(1..12)

bit20:16


日(1..31)

bit15:11


时(0..23)

bit10:5


分(0..59)

bit4:0


秒/2(0..29),由此可见FatFs的时间分辨率为2秒

描述

get_fattime函数必须返回任何有效的时间,即使系统不支持实时时钟。如果返回一个0,则文件将没有一个有效的时间。在只读配置中,不需要此函数。

评论:

小v
2015-01-06 12:45
求友链
小V
2015-01-06 12:43
看过,站长请看我的网站www.xiaovdiy.cn

发表评论:

 
Powered by emlog sitemap