Использование массива FAT на FAT32 SDHC

У меня есть SDHC объемом 32 ГБ с несколькими файлами .wav, и для их чтения я использую сборку на dsPIC. Некоторые файлы достаточно малы (60 КБ), чтобы поместиться в отдельный кластер, но большинство других больше — до 8 МБ. Общий размер файлов составляет 240 МБ, и пока каждый файл хранится в смежных кластерах. Однако, если произойдет какая-либо фрагментация, я не смогу просто выдавать последовательные адреса чтения, поэтому мне хотелось бы знать, как получить доступ к FAT и использовать его. Я прочитал несколько объяснений системы FAT (например, fatgen.pdf среди других), что было очень полезно, но я все еще в полном замешательстве по поводу массива FAT, например, как его найти.

Вот пара снимков экрана того, что у меня есть на данный момент. Обратите внимание, что отображение Frhed смещено на 0x2000.

Каталог, сведения о файлеСектор 1164

Итак, я могу получить начало файла и обработать его. Прокручивая вверх от сектора 0, первые ненулевые данные, которые я нахожу, находятся в d1164, что является цифрой «зарезервированных секторов». Данные продолжаются до тех пор, пока не закончатся в секторе d1224, который (по моим подсчетам) содержит около 1900 * 4-байтовых записей. Я понимаю, что массив FAT представляет собой таблицу указателей, но у меня возникли проблемы с согласованием найденных данных (если я действительно нашел FAT) и первого адреса кластера файла в каталоге. Например, SW15NT.WAV имеет свои первые данные по адресу 0x00000656, и на основе этого я бы нашел его заголовок .wav. Но как именно мне найти следующий кластер, используя FAT?

Вот что приходит мне в голову, правильно или неправильно, когда я пишу это. 0x656 = d1622. 4-байтовая запись d1622nd (d1621st ?) из базы d1164 является следующим кластером SW15NT после 0x656. Поэтому я бы использовал /128 (т.е. 512/4), чтобы найти целые 512-байтовые сектора и остаток. Получается 12*128 + 0. => сектор d1176. В байте 0x000 в этом секторе находится 01060000 (0x601). В байте 0x158 (86-я запись сектора) находится 57060000 (0x657, следующий за 0x656 в 0x154), который, «я думаю», на самом деле может быть следующим кластером.

Я чувствую, что уже близок, и был бы очень признателен, если бы мне показали, как решить головоломку.

ТИА, с уважением

Прочтите документацию FAT. Пробовали некоторые расчеты.

0 ответов

Другие вопросы по тегам