在使用 FATFS 文件系统时,可以通过以下方法确定文件系统是否正确挂载:
f_mount()
返回值FRESULT res;FATFS fs;res = f_mount(&fs, "", 1); // 挂载文件系统if (res == FR_OK) { // 挂载成功} else { // 挂载失败,处理错误 switch (res) { case FR_DISK_ERR: // 磁盘I/O错误 case FR_INT_ERR: // 内部错误 case FR_NOT_READY: // 存储设备未就绪 case FR_NO_FILESYSTEM: // 未找到文件系统 // 处理不同类型的错误 }}
挂载成功后,可以尝试创建 / 读取文件:
FIL file;FRESULT res;// 创建并写入测试文件res = f_open(&file, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);if (res == FR_OK) { f_puts("Hello, FATFS!", &file); f_close(&file); // 尝试读取文件验证 res = f_open(&file, "test.txt", FA_READ); if (res == FR_OK) { char buffer[20]; f_gets(buffer, sizeof(buffer), &file); f_close(&file); // 文件读写成功,文件系统正常工作 }}
使用f_getfree()
获取可用空间:
DWORD free_clusters;FRESULT res;res = f_getfree("", &free_clusters, &fs);if (res == FR_OK) { // 计算可用空间 DWORD total_space = free_clusters * fs.csize * 512 / 1024 / 1024; // MB // 文件系统正常工作}
使用f_stat()
检查文件或目录状态:
FILINFO fno;FRESULT res;res = f_stat("test.txt", &fno);if (res == FR_OK) { // 文件存在,文件系统正常} else if (res == FR_NO_FILE) { // 文件不存在,但文件系统正常} else { // 文件系统可能未正确挂载}
在挂载前检查物理设备状态:
DSTATUS status;status = disk_status(0); // 0表示默认驱动器if (status & STA_NOINIT) { // 设备未初始化 disk_initialize(0);}if (status & STA_PROTECT) { // 设备被写保护}
bool verify_filesystem(void) { FATFS fs; FIL file; FRESULT res; DWORD free_clusters; // 检查挂载状态 res = f_mount(&fs, "", 0); // 0表示不改变当前挂载状态 if (res != FR_OK) return false; // 测试文件操作 res = f_open(&file, "test.txt", FA_CREATE_ALWAYS | FA_WRITE); if (res != FR_OK) return false; f_puts("Test", &file); f_close(&file); // 检查文件是否存在 FILINFO fno; res = f_stat("test.txt", &fno); if (res != FR_OK) return false; // 获取可用空间 res = f_getfree("", &free_clusters, &fs); if (res != FR_OK) return false; return true; // 文件系统正常}
通过以上方法结合,可以有效判断 FATFS 文件系统是否正确挂载并正常工作。