在使用 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 文件系统是否正确挂载并正常工作。
电话:176-6539-0767
Q Q:135-0379-986
邮箱:1350379986@qq.com
地址:深圳市南山区后海大道1021号C座