一 文件系统:
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,
控制文件的存取,当用户不再使用时撤销文件等。
二 fatfs逻辑
FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。 FatFs模块是依据ANSI C(C89)标准编写的,并且与磁盘I / O层完全分开。 因此,它的运行独立于平台。
可以将其合并到资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。
fatfs写的特别简洁,非常适合入门者学习和熟悉文件系统。借着stm32的开发机会,笔者对fatfs做了一个大致的梳理。
stm32中的fatfs文件系统分层一般分成两层,一层是底层的逻辑,这部分主要是通过配置内存卡的寄存器来实现数据的读写。另外一层是应用逻辑,这部分负责把函数封装成可以调用的文件。
让用户能清晰的操作文件。
三 文件系统的底层逻辑
DSTATUS SD_disk_initialize(BYTE drv)
这个主要是初始化的内存设备,很多存储卡的设备都是标准的,不过,也不排除有些设备的兼容性问题是否可以。这个初始化的时候,一定要对准手册,看一下内存卡命令接口信息。
从sd卡中读取信息:
DRESULT SD_disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count)
往sd卡中写信息,
DRESULT SD_disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)
对齐和复位存储设备
DRESULT SD_disk_ioctl(BYTE drv, BYTE ctrl, void *buff)
四 文件系统的应用逻辑
文件系统的应用逻辑非常简单,就是让用户可以自由简单的操作文件。
这部分应用函数主要有以下部分构成:
文件系统的遍历,通过该遍历,可以知道设备下有多少文件以及文件名
FRESULT mf_scan_files(const TCHAR* path)
挂载文件,就是把一个文件挂带到驱动中
FRESULT f_mount (
FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/
const TCHAR* path, /* Logical drive number to be mounted/unmounted */
BYTE opt /* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */
)
创建或者打开文件
/*-----------------------------------------------------------------------*/
/* Open or Create a File */
/*-----------------------------------------------------------------------*/
FRESULT f_open (
FIL* fp, /* Pointer to the blank file object */
const TCHAR* path, /* Pointer to the file name */
BYTE mode /* Access mode and file open mode flags */
)
读取文件
FRESULT f_read (
FIL* fp, /* Pointer to the file object */
void* buff, /* Pointer to data buffer */
UINT btr, /* Number of bytes to read */
UINT* br /* Pointer to number of bytes read */
)
写文件
FRESULT f_write (
FIL* fp, /* Pointer to the file object */
const void* buff, /* Pointer to the data to be written */
UINT btw, /* Number of bytes to write */
UINT* bw /* Pointer to number of bytes written */
)
同步文件
FRESULT f_sync (
FIL* fp /* Pointer to the file object */
)
关闭文件
FRESULT f_close (
FIL* fp /* Pointer to the file object to be closed */
)
这里还有目录级别的操作,比如,打开文件目录,遍历文件目录,这就不一一赘述了。
五 后记
文件系统在计算机中是一个重要的部分,是一个计算机系统中的地图,它可以让存储的信息分成一个个小单元,达到使用者容易辨识的境地。