Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 23.03.2012, 19:48  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
Стрелка FAT32 - как узнать номера кластеров корневой директории

Директория FAT - ни что иное как ―файл‖, состоящий из списка 32-байтных структур. Лишь одна специальная директория, которая всегда должна присутствовать, это корневая директория. На дисках FAT12 и FAT16, корневая директория расположена в фиксированном
месте - непосредственно после последней таблицы FAT, и состоит из фиксированного количества секторов, вычисляемого из BPB_RootEntCnt.

Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров.

Задача: как найти эту последовательность кластеров в FAT32?
Компилятор CV avr.
Реклама:
sergx1300 вне форума  
Непрочитано 23.03.2012, 21:29  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Перевод спецификации FATxx

З.Ы. Если задача относится к флешке - наличие MBR там никто не отменял, нужно проверять.
Вложения:
Тип файла: rar fatgen103-rus.rar (82.4 Кб, 184 просмотров)

Последний раз редактировалось AJScorp; 23.03.2012 в 21:37.
AJScorp вне форума  
Непрочитано 23.03.2012, 21:36  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Сообщение от AJScorp Посмотреть сообщение
Перевод спецификации FATxx
Это у меня есть. Там токового не нашел. Кстати очень полезная инфа - кратко и ясно.
sergx1300 вне форума  
Непрочитано 23.03.2012, 21:56  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Сообщение от sergx1300 Посмотреть сообщение
Это у меня есть. Там токового не нашел.
Есть. Делал обработку ФАТа по этому доку, там всё есть.
Цитата:
Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров, так же как любая другая директория. Номер первого кластера корневой директории FAT32 хранится в BPB_RootClus.
AJScorp вне форума  
Непрочитано 23.03.2012, 23:56  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Сообщение от AJScorp Посмотреть сообщение
Есть. Делал обработку ФАТа по этому доку, там всё есть.
Да это так. Только это первой, а остальные разбросаны каким то образом по всех кластерах. Вот как их найти я не знаю.
sergx1300 вне форума  
Непрочитано 24.03.2012, 00:23  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Сообщение от sergx1300 Посмотреть сообщение
Только это первой, а остальные разбросаны каким то образом по всех кластерах.
В ФАТ32 рутовая директория - такой же файл, как и все остальные.

Берем рут-кластер из BPB_RootClus, лезем в таблицу ФАТ, и разгребаем по цепочке, пока не встретим 0xFFFFFFFF - последний.
AJScorp вне форума  
Непрочитано 24.03.2012, 00:31  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Сообщение от AJScorp Посмотреть сообщение
В ФАТ32 рутовая директория - такой же файл, как и все остальные.

Берем рут-кластер из BPB_RootClus, лезем в таблицу ФАТ, и разгребаем по цепочке, пока не встретим 0xFFFFFFFF - последний.
То есть, метка FF FF FF FF в фат таблице - это и есть следующий кластер Root?
sergx1300 вне форума  
Непрочитано 24.03.2012, 02:51  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

Вот, пример на картинке. Номер первого корневого кластера = 2. Смотрим в таблицу FAT32 в ячейку с таким же номером №2 и видим 0х09, значит следующий корневой кластер - кластер номер 9. Далее прыгаем в ячейку №9 и видим число 0х0А, то есть третий корневой кластер есть кластер №0х0А. И так далее, пока не встретим значение ячейки 0xFFFFFFFF. Значит, кончилась директория, и других корневых кластеров нет, и прыгать по таблице дальше не надо.
Миниатюры:
Нажмите на изображение для увеличения
Название: kazus_FAT32.PNG
Просмотров: 115
Размер:	16.8 Кб
ID:	33046  

Последний раз редактировалось Yurkin2007; 24.03.2012 в 03:27.
Yurkin2007 вне форума  
Непрочитано 24.03.2012, 04:01  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: FAT32 - как узнать номера кластеров корневой директории

По логике вроде так, но в реальности не выходит. В HEXEDITOR открыл диск карты SD 1 Gb. Форматнул ее и закинул на нее 130 файлов, чтобы забить первой роот кластер и начать новой. Файлы по одному байту. Так вот, виндовс пишет новой кластер роот значением FF FF FF 0F . Смотрим скрин. Может надо искать два последовательных значения FF FF FF 0F FF FF FF 0F .Но это полной бред.
Миниатюры:
Нажмите на изображение для увеличения
Название: 01.png
Просмотров: 93
Размер:	161.5 Кб
ID:	33048   Нажмите на изображение для увеличения
Название: 02.png
Просмотров: 66
Размер:	207.5 Кб
ID:	33049  

Последний раз редактировалось sergx1300; 24.03.2012 в 04:04.
sergx1300 вне форума  
Непрочитано 24.03.2012, 10:34  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию 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.
AJScorp вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать что за феррит spinach83 Информация по радиокомпонентам 3 26.12.2011 09:37
Как узнать параметры динамика Sergey_KZ Аудиотехника 14 27.10.2011 12:31
Пульт ДУ как узнать pavlushka1000 Видеотехника 6 10.11.2009 21:04
как узнать какая марка феррита Sergey_KZ Источники питания и свет 5 02.02.2009 09:34


Часовой пояс GMT +4, время: 07:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot