Hier tritt höchstwahrscheinlich der Fehler auf.
Code:fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ for (i = 0; i < 4; i++) { /* Get partition offset */ pt = fs->win + MBR_Table + i * SZ_PTE; br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; } i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ if (i) i--; do { /* Find an FAT volume */ bsect = br[i]; fmt = bsect ? check_fs(fs, bsect) : 2; /* Check the partition */ } while (!LD2PT(vol) && fmt && ++i < 4); } if (fmt == 3) return FR_DISK_ERR; /* An error occured in the disk I/O layer */Code:if (move_window(fs, sect) != FR_OK) /* Load boot record */ return 3;
Warum disk_read() fehlschlägt musst du selbst herausfinden. Ich habe weder die Hardware noch die Software.Code:staticFRESULT move_window ( FATFS* fs, /* File system object */ DWORD sector /* Sector number to make appearance in the fs->win[] */ ) { FRESULT res = FR_OK; if (sector != fs->winsect) { /* Window offset changed? */ #if !_FS_READONLY res = sync_window(fs); /* Write-back changes */ #endif if (res == FR_OK) { /* Fill sector window with new data */ if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) { sector = 0xFFFFFFFF; /* Invalidate window if data is not reliable */ res = FR_DISK_ERR; } fs->winsect = sector; } } return res; }
mfg







Zitieren


Lesezeichen