Dateisystem FAT16
( File Allocation Table Dateizuordnungstabelle)

Wenn ein Speichermedium formatiert wird, bekommt es ein Dateisystem. Formatieren kann man sich vorstellen wie Aufstellen von Regalen mit Fächern und Anlegen eines Ordners mit Informationen in welchem Fach welche Sachen sich befinden und welche Sachen zusammengehören. In diesem Ordner sind auch Kaputte und leere Fächer markiert

<
Schaltplan, Zugriff auf MMC allgemein
Diese Seite enthält Teori über Dateisystem FAT16
Praktische Anwendung erfolgt bei einer 64MB MMC-Speicherkarte mit einem PIC-Mikrocontroller von Microchip ( PIC16F877 ) über SPI-Interface
Beispielprogramm mit Erklärung, zum Finden und Auslesen einer Datei von mit FAT16 formatierter MMC - Karte
>

FAT-Strukturen
Bestehen aus 5 Bereichen. Die sind in folgender Tabelle aufgelistet. In der Tabelle sind auch Formeln zum berechnen des Anfangs jeweiligen Bereiches angegeben.

Name Anfang Sektor
Master Boot Record =0
Volume Boot Record =1C8h(4Byte) in Master Boot Record
FAT-Einträge = Volume Boot Record + 0Eh(2Byte) in Volume Boot Record
Verzeichniseinträge = FAT-Einträge + (16h(2Byte) * 10h(1Byte)) in Volume Boot Record
Datenbereich (Cluster 0) = Verzeichniseinträge + (11h(2Byte) * 32 / 512 )in Volume Boot Record

Sektorgröße ist immer 512 Byte. Diese Zahl ist auch in Volume Boot Record Position 0Bh(2Byte) in Bytes angegeben.

Ein Cluster bildet mehrere zusammengefasste Sektore. Um rauszufinden, wie viel Sektoren in einem Cluster sind, schauen Sie in folgende Tabelle.

Datenträger Größe FAT16 Cluster Größe FAT32 Cluster Größe NTFS Cluster Größe
7 MB–16 MB 2 KB nicht unterstützt 512 Bytes
17 MB–32 MB 512 Bytes nicht unterstützt 512 Bytes
33 MB–64 MB 1 KB 512 Bytes 512 Bytes
65 MB–128 MB 2 KB 1 KB 512 Bytes
129 MB–256 MB 4 KB 2 KB 512 Bytes
257 MB–512 MB 8 KB 4 KB 512 Bytes
513 MB–1 GB 16 KB 4 KB 1 KB

Anzahl der Sektoren in einem Cluster sind auch in Volume Boot Record Position 0Dh(1Byte) angegeben.


Master Boot Record

Er enthält Informationen über die Festplatte und ihre Partitionen.

Adresse Beschreibung Größe
000h Hauptstartprogramm (Master Boot Code) 446 Bytes
1BEh 1. Partitionseintrag 16 Bytes
1CEh 2. Partitionseintrag 16 Bytes
1DEh 3. Partitionseintrag 16 Bytes
1EEh 4. Partitionseintrag 16 Bytes
1FEh BIOS-Signatur (55h AAh) 2 Bytes

 

Erste Partitioneintrag enthält folgende Informationen
Adresse Beschreibung Größe
00h Status der Partition: 0 wenn inaktiv, 80h wenn aktiv. 1 Byte
01h Der Sektor, auf dem die Partition beginnt (Bits 0-5) und der Zylinder, auf dem die Partition beginnt (Bits 6-16). 1 Byte
02h Zylinder, auf dem die Partition beginnt 1 Word
04h Partitionstyp (1h-FAT12, 4h-FAT16<32Mb, 6h-FAT16>32Mb, Bh-FAT32) 1 Byte
05h Der Kopf, auf dem die Partition endet. 1 Byte
06h Der Sektor, auf dem die Partition endet (Bits 0- 5) und der Zylinder, auf dem die Partition endet (Bits 6-16). 1 Word
08h Abstand zwischen MBR-Sektor und dem ersten Sektor der Partition in Sektoren 1 Double Word
0Ch Gesamtzahl der Sektoren in der Partition 1 Double Word


Volume Boot Record

Befindet sich in einer Partition und enthält Informationen über Formatierung dieser Partition.

Adresse Beschreibung Größe
00h Sprungan­weisung + NOP 3 Bytes
03h OEM Name 8 Bytes
0Bh Anzahl der Bytes pro Sektor auf der Festplatte 1 Word
0Dh Die Anzahl der Sektoren pro Cluster 1 Byte
0Eh Anzahl der reservierten Sektoren 1 Word
10h Anzahl der Kopien der FAT, üblicherweise 2 1 Byte
11h Anzahl der möglichen Einträge im Hauptverzeichnis: 512 bei FAT16 1 Word
13h Anzahl der Sektoren in kleineren Partitionen 1 Word
15h Hexadezimalwert F8 für Festplatten; F0 für Disketten 1 Byte
16h Sectors Per FAT 1 Word
18h Sectors Per Track 1 Word
1Ah Number of Heads 1 Word
1Ch Reservierte Sektoren am Beginn der Festplatte 1 Double Word
20h Gesamtzahl der Sektoren in der Partition 1 Double Word
24h Laufwerksnummer. Die erste Festplatte trägt 80h, die zweite 81h usw 1 Word
26h Erweiterte Boot-Signatur (29h) 1 Byte
27h Seriennummer des Datenträgers 1 Double Word
2Bh Datenträgerbezeichnung 11 Bytes
36h FAT Name (FAT16) 8 Bytes
3Eh Executable Code 448 Bytes
1FEh Signatur (55h AAh) 2 Bytes


FAT-Einträge

Jeder Eintrag ist 2 Byte Groß und seine Position entspricht einem Cluster in Datenbereich.
Eintraginhalt sagt über Zustand des Clusters aus oder hat Nummer nächstes Clusters einer Datei.

0000 Unbenutzter Cluster
1 bis Cluster-Anzahl Die Nummer des Clusters mit dem nächsten Abschnitt der Datei
FFFF0h -FFFF6 Reservierter Cluster
FFF7 Defekter Cluster
FFF8h - FFFFh Ende der Datei (Diese Position entspricht dem letzten Cluster einer Datei )

In dem Beispiel fängt Datei "HaloWelt.txt" in Cluster 05h an. In FAT - Tabelle auf Position 05h steht FFFFh ; das heißt, dass Datei "HaloWelt.txt" kein weiterer Cluster benötigt. In Datenbereich in Cluster 5h ist Text der Datei zu finden.
Datei "Format.exe" fängt mit Custer 6h an und belegt 3 Clustern hintereinander.
Datei "Zerstuke.exe" fängt mit Custer Ch an und belegt 3 Clustern in verschiedenen Stellen des Datenträgers.
Cluster 9h ist als "defekt" markiert.

Erste 2 Stellen in FAT sind reserviert, aber in Datenbereich fangen Daten mit Cluster 0 an.
Deswegen :
Cluster in Datenbereich = (Clusternummer in FAT) - 2
Das ist in oberer Abbildung nicht berücksichtigt um das Verstehen der Struktur zu vereinfachen.


Verzeichniseinträge

Adresse Größe   Value
0h 8 Bytes   Name
8h 3 Bytes   Erweiterung
0Bh Byte   Dateiattribute (00ARSHDV)
  0: unused bit
  A: archive bit,
  R: read-only bit
  S: system bit
  D: directory bit
  V: volume bit
16h Word   Uhrzeit
18h Word   Datum
1Ah Word   Erster Cluster
1Ch Double Word   Größe


Datenbereich (Cluster 0)

In entsprechenden Cluster fangen die Dateidaten ohne Vorwarnung an. Wenn der letzte Cluster nicht voll ist haben restlichen Byts Wert 00h . Also wenn eine Datei enthält nur ein Byte, wird diese Datei 1Kb Speicherplatz belegen (bei Claster = 2 Sektore). Restliche 1023 Bytes haben Nullen drin. Um letzte Byte der Datei zu ermitteln, muss man Dateigröße in dem Verzeichniseintrag Position 1Ch(4Byte) auslesen und von diesem Wert (Clasteranzahl der Datei -1)*Clastergröße abziehen.

Bei einer Festplatte:
Master Boot Record wird mit fdisk.exe gemacht.
Volume Boot Record wird mit format.exe gemacht.
Mit Datendefragmentierung werden Claster einer Datei hintereinander zugeordnet (wenn möglich).
Scandisk.exe vergleicht Kopien der FAT-Tabellen und überprüft, ob die Dateigröße mit Clusteranzahl übereinstimmt. Ein Claster darf auch nicht zwei Dateien gehören oder 2 mal in einer Datei auftauchen.


Beispielprogramm mit Erklärung, Beschreibung zentralen Funktionen.