Fatfs文件系统分析(3)-底层接口分析
来源:互联网 发布:java编写计算器教程 编辑:程序博客网 时间:2024/05/22 17:20
Fatfs文件系统分析(3)-diskio.c/diskio.h文件分析
由于FatFs模块完全与磁盘I/O层分开,因此底层磁盘I/O需要下列函数去读/写物理磁盘以及获取当前时间。由于底层磁盘I/O模块并不是FatFs的一部分,因此它必须由用户提供。
1) disk_initialize
初始化磁盘驱动器
DSTATUS disk_initialize (
BYTE Drive /*物理驱动器号 */
);
参数
Drive指定待初始化的物理驱动器号。
返回值
disk_initialize函数返回一个磁盘状态作为结果。磁盘状态的详情,参考disk_status函数。
描述
disk_initialize函数初始化一个物理驱动器。函数成功后,返回值中的STA_NOINIT标志被清除。
disk_initialize函数被FatFs模块在卷挂载过程中调用,去管理存储介质的改变。当FatFs模块起作用时,或卷上的FAT结构可以被瓦解时,应用程序不能调用该函数。可以使用f_mount函数去重新初始化文件系统。
2)disk_status
获取当前磁盘的状态
DSTATUS disk_status (
BYTE Drive /*物理驱动器号*/
);
参数
Drive指定待确认的物理驱动器号。
返回值
磁盘状态,是下列标志的组合:STA_NOINIT
指示磁盘驱动器还没有被初始化。当系统复位、磁盘移除和disk_initialize函数失败时,该标志被设置;当disk_initialize函数成功时,该标志被清除。STA_NODISK
指示驱动器中没有存储介质。当安装了磁盘驱动器后,该标志始终被清除。
STA_PROTECTED
指示存储介质被写保护。在不支持写保护缺口的驱动器上,该标志始终被清除。当STA_NODISK被设置时,该标志无效。
3)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磁盘驱动器还没被初始化。
4)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磁盘驱动器还没被初始化。
描述
在只读配置中,不需要此函数。
5) 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函数中,使用了该命令。
6)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,则文件将没有一个有效的时间。在只读配置中,不需要此函数。
- Fatfs文件系统分析(3)-底层接口分析
- Fatfs文件系统分析(2)-应用程序接口
- Fatfs文件系统分析(1)-Fatfs
- Fatfs文件系统分析(0)-FATfs概述
- Fatfs文件系统分析(4)-FATFS文件系统移植笔记
- FATFS文件系统+源码分析——学习笔记
- FatFS文件系统
- FatFS文件系统
- FATFS 文件系统
- fatfs文件系统
- FATFS文件系统
- fatfs文件系统
- FATFS文件系统
- STM32学习笔记之fatfs文件系统接口函数使用
- JDBC接口讲解与底层实现分析(上)
- SylixOS中MTD调用底层接口流程分析
- SD卡与fatfs文件系统(3)
- SD卡与fatfs文件系统(3)
- 总帐凭证导入EXCEL,并且批量输入(FB50)的BDC
- java setBinaryStream error for mysql
- VS2008 MFC 配置GDI+
- Hex与浮点数相互转换,支持LINUX平台
- Mac下清理软件CleanMyMac破解版
- Fatfs文件系统分析(3)-底层接口分析
- 别让抱怨毁了你的工作生活
- Linux下使用smartCOM调试串口
- MouseEvent事件
- 2012-12-06集结号【创赢操盘】周四策略
- CRC原理
- 2012-12-06 VBA学习
- 用javascript来判断浏览器是否禁止了弹出窗口,并在网页中以友好的方式来提示网站浏览者
- AVC到HEVC