Мда. Немного покопавшись в исходниках я обнаружил две функции работающие с содержимым FAT:
Код
DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Interal error, Else:Cluster status */
FATFS *fs, /* File system object */
DWORD clst /* Cluster# to get the link information */
)
и
Код
FRESULT put_fat (
FATFS *fs, /* File system object */
DWORD clst, /* Cluster# to be changed in range of 2 to fs->max_clust - 1 */
DWORD val /* New value to mark the cluster */
)
согласно которым, кластеру (в таблице) может быть присвоено 4 значения:
0 - свободен для записи;
1 - неправильно указан адрес кластера (внутренняя ошибка);
собственно адрес следующего кластера;
и 0xFFFFFFFF - ошибка во время доступа к данным на носителе;
Это последнее значение меня немного удивляет (и окончательно запутывает), т.к. согласно спецификации FAT оно означает последний файл кластера. Как обозначается последний кластер файла в FatFs я пока не понял. Любые подсказки приветствуются.
Ага, разобрался: последний кластер помечается как 0x0FFFFFFF. Просто очень похоже на 0xFFFFFFFF, поэтому сразу не заметил.
Что же. Придется дописать маркировку "битого сектора" самому :-) Хотя жаль, конечно, что это не реализовано в FatFs.
Сообщение отредактировал Nikitoc - Nov 4 2010, 16:29