首页 > 代码库 > FATFS 初学之 磁盘 I/O接口

FATFS 初学之 磁盘 I/O接口

详见:嵌入式大讲堂

 

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

disk_initialize:

 1 /*-----------------------------------------------------------------------*/ 2 /* Inidialize a Drive                                                    */ 3  4 DSTATUS disk_initialize ( 5     BYTE drv                /* Physical drive nmuber (0..) */ 6 ) 7 { 8     SD_Error  Status; 9     /* Supports only single drive */10     if (drv)11     {12         return STA_NOINIT;13     }14 /*-------------------------- SD Init ----------------------------- */15   Status = SD_Init();16     if (Status!=SD_OK )17     {18         return STA_NOINIT;19     }20     else21     {22         return RES_OK;23     }24 25 }
View Code

函数功能:初始化磁盘驱动器

描述:

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

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

 

disk_status:

1 /*-----------------------------------------------------------------------*/2 /* Return Disk Status                                                    */3 4 DSTATUS disk_status (5     BYTE drv        /* Physical drive nmuber (0..) */6 )7 {8     return RES_OK;9 }
View Code

函数功能:获取当前磁盘的状态

 

disk_read:

 1 /*-----------------------------------------------------------------------*/ 2 /* Read Sector(s)                                                        */ 3  4 DRESULT disk_read ( 5     BYTE drv,        /* Physical drive nmuber (0..) */ 6     BYTE *buff,        /* Data buffer to store read data */ 7     DWORD sector,    /* Sector address (LBA) */ 8     BYTE count        /* Number of sectors to read (1..255) */ 9 )10 {11     return RES_OK;12 }
View Code

函数功能:从磁盘驱动器中读取扇区

 

disk_write:

 1 /*-----------------------------------------------------------------------*/ 2 /* Write Sector(s)                                                       */ 3  4 #if _READONLY == 0 5 DRESULT disk_write ( 6     BYTE drv,            /* Physical drive nmuber (0..) */ 7     const BYTE *buff,    /* Data to be written */ 8     DWORD sector,        /* Sector address (LBA) */ 9     BYTE count            /* Number of sectors to write (1..255) */10 )11 {12     return RES_OK;13 }14 #endif /* _READONLY */
View Code

函数功能:向磁盘驱动器中写入扇区

 

disk_ioctl:

 1 /*-----------------------------------------------------------------------*/ 2 /* Miscellaneous Functions                                               */ 3  4 DRESULT disk_ioctl ( 5     BYTE drv,        /* Physical drive nmuber (0..) */ 6     BYTE ctrl,        /* Control code */ 7     void *buff        /* Buffer to send/receive control data */ 8 ) 9 {10     return RES_OK;11 }
View Code

 

get_fattime:

1 /*-----------------------------------------------------------------------*/2 /* Get current time                                                      */3 /*-----------------------------------------------------------------------*/ 4 DWORD get_fattime(void)5 {6 7      return 0;8 9 } 
View Code

函数功能:获取当前时间

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