Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.03.2012, 19:48
|
|
Прописка
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
|
FAT32 - как узнать номера кластеров корневой директории
Директория FAT - ни что иное как ―файл‖, состоящий из списка 32-байтных структур. Лишь одна специальная директория, которая всегда должна присутствовать, это корневая директория. На дисках FAT12 и FAT16, корневая директория расположена в фиксированном
месте - непосредственно после последней таблицы FAT, и состоит из фиксированного количества секторов, вычисляемого из BPB_RootEntCnt.
Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров.
Задача: как найти эту последовательность кластеров в FAT32?
Компилятор CV avr.
|
|
|
|
23.03.2012, 21:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Перевод спецификации FATxx
З.Ы. Если задача относится к флешке - наличие MBR там никто не отменял, нужно проверять.
Последний раз редактировалось AJScorp; 23.03.2012 в 21:37.
|
|
|
|
23.03.2012, 21:36
|
|
Прописка
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от AJScorp
|
Перевод спецификации FATxx
|
Это у меня есть. Там токового не нашел. Кстати очень полезная инфа - кратко и ясно.
|
|
|
|
23.03.2012, 21:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от sergx1300
|
Это у меня есть. Там токового не нашел.
|
Есть. Делал обработку ФАТа по этому доку, там всё есть.
Цитата:
|
Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров, так же как любая другая директория. Номер первого кластера корневой директории FAT32 хранится в BPB_RootClus.
|
|
|
|
|
23.03.2012, 23:56
|
|
Прописка
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от AJScorp
|
Есть. Делал обработку ФАТа по этому доку, там всё есть.
|
Да это так. Только это первой, а остальные разбросаны каким то образом по всех кластерах. Вот как их найти я не знаю.
|
|
|
|
24.03.2012, 00:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от sergx1300
|
Только это первой, а остальные разбросаны каким то образом по всех кластерах.
|
В ФАТ32 рутовая директория - такой же файл, как и все остальные.
Берем рут-кластер из BPB_RootClus, лезем в таблицу ФАТ, и разгребаем по цепочке, пока не встретим 0xFFFFFFFF - последний.
|
|
|
|
24.03.2012, 00:31
|
|
Прописка
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от AJScorp
|
В ФАТ32 рутовая директория - такой же файл, как и все остальные.
Берем рут-кластер из BPB_RootClus, лезем в таблицу ФАТ, и разгребаем по цепочке, пока не встретим 0xFFFFFFFF - последний.
|
То есть, метка FF FF FF FF в фат таблице - это и есть следующий кластер Root?
|
|
|
|
24.03.2012, 02:51
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Вот, пример на картинке. Номер первого корневого кластера = 2. Смотрим в таблицу FAT32 в ячейку с таким же номером №2 и видим 0х09, значит следующий корневой кластер - кластер номер 9. Далее прыгаем в ячейку №9 и видим число 0х0А, то есть третий корневой кластер есть кластер №0х0А. И так далее, пока не встретим значение ячейки 0xFFFFFFFF. Значит, кончилась директория, и других корневых кластеров нет, и прыгать по таблице дальше не надо.
Последний раз редактировалось Yurkin2007; 24.03.2012 в 03:27.
|
|
|
|
24.03.2012, 04:01
|
|
Прописка
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
По логике вроде так, но в реальности не выходит. В HEXEDITOR открыл диск карты SD 1 Gb. Форматнул ее и закинул на нее 130 файлов, чтобы забить первой роот кластер и начать новой. Файлы по одному байту. Так вот, виндовс пишет новой кластер роот значением FF FF FF 0F . Смотрим скрин. Может надо искать два последовательных значения FF FF FF 0F FF FF FF 0F .Но это полной бред.
Последний раз редактировалось sergx1300; 24.03.2012 в 04:04.
|
|
|
|
24.03.2012, 10:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: FAT32 - как узнать номера кластеров корневой директории
Сообщение от sergx1300
|
Но это полной бред.
|
Так и должно быть, используются только младшие 28 бит. Старшие 4 бита можно использовать по своему усмотрению.
Цитата:
|
В общем, 32-битные FAT значения содержат не совсем 32-битные значения; из них используются только 28 бит. К примеру, все эти 32-битные номера кластеров: 0x10000000, 0xF0000000 и 0x00000000 являются свободными (FREE), потому что старшие 4 бита должны игнорироваться. Если 32-битный свободный кластер содержит значение 0x30000000, и Вы хотите пометить его как «BAD CLUSTER» значением 0x0FFFFFF7, то в результате 32-битное значение получится 0x3FFFFFF7, потому что Вы должны оставить неизменным значение в старших 4 битах, записывая значение 0x0FFFFFF7 «BAD CLUSTER».
|
Страница 17 fatgen103-rus
Пример кода проверки за значение признака конца цепочки
Код:
|
IsEOF = FALSE;
If(FATType == FAT12) {
If(FATContent ›= 0x0FF8)
IsEOF = TRUE;
} else if(FATType == FAT16) {
If(FATContent ›= 0xFFF8)
IsEOF = TRUE;
} else if (FATType == FAT32) {
If(FATContent ›= 0x0FFFFFF8)
IsEOF = TRUE;
} |
Последний раз редактировалось AJScorp; 24.03.2012 в 10:53.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:09.
|
|