Forum: Mikrocontroller und Digitale Elektronik FAT/FAT32 Number of Reserved Sectors


von Heiko (Gast)


Lesenswert?

Hallo,

in sehr vielen Dokumenten (z.B. fatgen103.pdf) wird immer wieder 
beschrieben, dass die "Number of Reserved Sectors" für FAT32 den Wert 32 
haben sollte und für FAT16 den Wert 1.

Nun habe ich hier unterschiedliche SD/SDHC Karten mit FAT/FAT32 an 
meinem STM32 eingelesen und sehe an Byte 14-15 alle Möglichen anderen 
Werte (z.B. 4350 bei FAT32, oder auch 2 oder 8 bei unterschiedlichen 
FAT16 Karten).

Wie sind denn so eure Erfahrungen mit dieser Zahl. Mir kommt dieser Wert 
sehr merkwürdig vor.

Generell funktioniert meine SD und FAT library gut - ich will es nur 
verstehen.

Formatiert habe ich sie unter Windows 10.

Gruß, Heiko

von Jim M. (turboj)


Lesenswert?

Heiko schrieb:
> Nun habe ich hier unterschiedliche SD/SDHC Karten mit FAT/FAT32 an

Diese Karten benutzen u.a. die reservierten Sektoren um die FAT an 
1MB/4MB Grenzen auszurichten. So groß sind nämlich die Flash Strukturen 
intern in der Karte (laut Spec).

SDHC Karten sollte man nur mit dem Formatter von SDcard.org formatieren.

von Heiko (Gast)


Lesenswert?

Oh Ja. Das ändert doch schonmal für die FAT16 SD Karte den Wert auf die 
erwartete 1.
Aber bei der FAT32 SDHC Karte lese ich auch nach dem erneuten 
Formatieren diese merkwürdige 4350...
Noch irgendeine Idee dazu?

von Markus F. (mfro)


Lesenswert?

Heiko schrieb:
> Oh Ja. Das ändert doch schonmal für die FAT16 SD Karte den Wert auf die
> erwartete 1.
> Aber bei der FAT32 SDHC Karte lese ich auch nach dem erneuten
> Formatieren diese merkwürdige 4350...
> Noch irgendeine Idee dazu?

Die Clustergrösse kann bei FAT32 (abhängig von der Mediengrösse und der 
gewählten Partitionierung) variieren (512 Bytes, 1, 2, 4, 8, 16 KBytes).

Weil die FAT nun mal Cluster- (und keine Sektor-) Indizes verwaltet, 
muss der Datenbereich an einer Clustergrenze beginnen. Die reservierten 
Sektoren  werden dazu verwendet, um den Beginn des Datenbereichs darauf 
auszurichten. Dazu werden je nach gewählter Clustergrösse (und ein paar 
anderen Parametern wie beispielsweise Anzahl der Reserve-FATs) 
unterschiedlich viele "Füll"-Sektoren gebraucht.

von Jim M. (turboj)


Lesenswert?

Heiko schrieb:
> Aber bei der FAT32 SDHC Karte

.. sind die internen Sektoren in der Karte (laut Spec) 4MB gross, da 
muss das SD Formatter Tool mehr Platz am Anfang frei lassen. Auf den 
krummen Wert musst Du ja noch den Offset aus der Partitionstabelle 
aufaddieren.

von Markus F. (mfro)


Lesenswert?

Jim M. schrieb:
> Heiko schrieb:
>> Aber bei der FAT32 SDHC Karte
>
> .. sind die internen Sektoren in der Karte (laut Spec) 4MB gross, da
> muss das SD Formatter Tool mehr Platz am Anfang frei lassen. Auf den
> krummen Wert musst Du ja noch den Offset aus der Partitionstabelle
> aufaddieren.

Muss es nicht unbedingt (funzt auch so), aber sollte: wenn die FAT 
(deren Sektoren ja sowieso schon praktisch ständig neu geschrieben 
werden müssen) die Grenze zwischen zwei Flash-Pages überstreicht, müssen 
bei jedem Schreibzugriff auch noch zwei solcher Pages gelöscht und neu 
beschrieben werden.

von Heiko (Gast)


Lesenswert?

Aber dennoch sagt die Spezifikation etwas von Number of Reserved Vectors 
= 32. Wie kommen die dann auf diesen Wert?

von c-hater (Gast)


Lesenswert?

Heiko schrieb:

> Aber dennoch sagt die Spezifikation etwas von Number of Reserved Vectors
> = 32.

Nein, das tut sie nicht. Lies' einfach mal selber nach, was dort 
tatsächlich steht.

Und mal abgesehen davon, dass das nicht wirklich dort steht, sagt schon 
allein die Logik: Würde in diesem Feld immer nur der gleiche Wert stehen 
dürfen, dann bräuchte es dieses Feld garnicht geben, es wäre schlicht 
vollkommen überflüssig, denn der Typ des FS wird ja an anderer Stelle 
bereits eindeutig identifiziert und damit der (nur nach deiner Lesart) 
konstante Offset, der zu verwenden wäre.

von Heiko (Gast)


Lesenswert?

c-hater schrieb:
> Nein, das tut sie nicht. Lies' einfach mal selber nach, was dort
> tatsächlich steht.

Danke - ich habe nachgelesen: "... typicall 32 for FAT32 ..."

Wieso gehst du davon aus, dass ich nicht selber nachlesen könne? Dann 
sag mir doch bitte welche Spec du durchgelesen hast und was dort steht. 
Dann verstehe ich es vielleicht auch - das war schließlich der Grund 
meines Fragens.

von Rolf M. (rmagnus)


Lesenswert?

Heiko schrieb:
> c-hater schrieb:
>> Nein, das tut sie nicht. Lies' einfach mal selber nach, was dort
>> tatsächlich steht.
>
> Danke - ich habe nachgelesen: "... typicall 32 for FAT32 ..."

Und du erkennst nicht den unterschied zu:

Heiko schrieb:
> Aber dennoch sagt die Spezifikation etwas von Number of Reserved Vectors
> = 32.

? "typically" ist nicht die englische Übersetzung von "zwingend". 
Sondern es ist der typische Wert. Je nach Situation (z.B. wenn es sich 
um eine SD-Karte handelt) kann von diesem Wert auch abgewichen werden. 
Sonst wäre es - wie "c-hater" schon schrieb - ja auch völlig nutzlos, 
ihn überhaupt mit anzugeben.

von Markus F. (mfro)


Lesenswert?

Heiko schrieb:
> Aber dennoch sagt die Spezifikation etwas von Number of Reserved Vectors
> = 32. Wie kommen die dann auf diesen Wert?

Welche "Spezifikation" sagt das denn?

In meiner steht:

Number of reserved sectors in the reserved region of the volume starting 
at the first sector of the volume. This field is used to align the start 
of the data area to integral multiples of the cluster size with respect 
to the start of the partition/media.
This field must not be 0 and can be any non-zero value.
This field should typically be used to align the start of the data area 
(cluster #2) to the desired alignment unit, typically cluster size.

Und das ist genau das, was wir dir hier schon mehrfach mitgeteilt haben.

von Heiko (Gast)


Lesenswert?

OK.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.