Долгожданная статья о FAT16 ))) Коротко о структуре карточки: Block=Sector Диск имеет плоскую структуру т.е. доступ от 0-я до N байта, но читается блоками по 512 байт. Для чтения с карточки адрес задается не в блоках, а в байтах. Можно указать адрес, например 4-е, но карточка выдаст ошибку и чтения не будет. Адрес должен быть кратен 512 (0,512,1024...block0,block1,block2), после чтения 512 байт нужно еще прочитать 2-а байт - это CRC (контрольная сумма). Разметка карточки: MBR (Master Boot Record) занимает 1 блок. В MBR описывается 4-е логических диска (Partirion), в каждом логическом диске Может также находится MBR и разбивать его, например: еще на 2-а диска. Карточки обычно разбиты на один логический. В MBR описывается тип файловой системы, смещение диска, размер диска и тд. Самое главное, разметка FAT: BPB (BIOS Parameter Block или Boot block) занимает 1 блок RS (Reserved Sectros) может занимать несколько блоков FAT таблица FAT здесь хранятся номера кластеров, может быть несколько FAT таблиц друг за другом, обычно 2-е и зеркальные. ROOT здесь записи корневой директории, файлы, папки и т.д. DATA тута сами данные файлов, папок В FAT16 размер номера кластера составляет 2-а байта, значит адресация в FAT таблицы будет такова: возьмем относительно с 0-я, адрес - кластер 0 - 0 2 - 1 4 - 2 6 - 3 и тд. Данные размечаются на кластеры, кластер это как блок определенного размер (размер описан в BPB). Данные размечаются со 2-ого кластера, также возьмем относительно 0-я: кластер - адрес блока данных (пускай кластер равен 2048) 2 - 0 3 - 2048 4 - 4096 5 - 6144 и тд. Для чтения файла, нужно узнать первый кластер из записи в ROOT. В FAT таблице по этому номеру будет следующий кластер этого файла и тд. Пока не встретится 0xffff - это последний кластер. Если первый кластер равен 0-ю, значит файл не содержит данных. Директории - это те же файлы содержащие записи. Файлы к статье для PROTEUS, CVAVR и также образ диска и документация FAT Доступно только для пользователей Исходники с комментариями, все вопросы на форум.
|