FATFS 初学之 磁盘 I/O接口
2014-08-14 13:19 Danhuise 阅读(891) 评论(0) 编辑 收藏 举报详见:嵌入式大讲堂
由于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 else 21 { 22 return RES_OK; 23 } 24 25 }
函数功能:初始化磁盘驱动器
描述:
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 }
函数功能:获取当前磁盘的状态
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 }
函数功能:从磁盘驱动器中读取扇区
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 */
函数功能:向磁盘驱动器中写入扇区
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 }
get_fattime:
1 /*-----------------------------------------------------------------------*/ 2 /* Get current time */ 3 /*-----------------------------------------------------------------------*/ 4 DWORD get_fattime(void) 5 { 6 7 return 0; 8 9 }
函数功能:获取当前时间
描述:get_fattime函数必须返回任何有效的时间,即使系统不支持实时时钟。如果返回一个0,则文件将没有一个有效的时间。在只读配置中,不需要此函数。