mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FAT falscher Sektor


Autor: Konz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend zusammen,

Plage mich gerade mit FAT16 auf meiner 1 GB SD Karte herum. Eine Datei 
sollte bei Sektor 32769 starten aber los gehen tut es bei 12752. Warum 
ist das denn so?

Grüße

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich weil du einen Fehler in deiner Software hast.

Autor: Konz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein nein, ich schaue es mir gerade im Hex editor an.

Autor: Konz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die genauen Daten:

First Cluster bei 8001  dez. 32769
4 reservierte Sektoren
2*Fat Größe= 492 Sek
Root directory Größe 32 Sek

In der Fat Tabelle steht auf 100 der Wert 8101 und auf 102 8201 usw.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In der Fat Tabelle steht auf 100 der Wert 8101 und auf 102 8201 usw.

Die Cluster stehen im Little Endian Format in der Fat.
8101 => 0x0181
8201 => 0x0182

Dein Cluster 8001 hat also die Nummer 0x0180 -> 384 dez
Das ist aber nicht der Startsektor der Datei !

Autor: IOP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist aber nicht der Startsektor der Datei !

Warum denn?

Ich habe mich durch so viele Quellen durchgelesen, sogar durch die 
Original Spec von Microsoft, überall ist mir gesagt worden, dass der 
First Cluster bei hex 1a im Root Directory angezeigt wird. Bei Langen 
Dateinamen ist das halt bei den letzten 32Kb drin, sonst immer bei 1a. 
wenn das nicht der Fall ist, wo finde ich den Startsektor der Datei 
sonst???

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wo finde ich den Startsektor der Datei
>sonst???

Den musst du über die Clusternummer ausrechnen:

U32 GetFirstSectorOfCluster(U32 cluster)
{
 return (((U32)(cluster - 2) * secPerCluster) + FirstDataSector);
}

secPerCluster findest du im Bootsektor.
Den Bootsektor muss man aber auch erst mal finden ;)
FirstDataSector ist der erste Sektor hinter dem Root-Directory.

Autor: Konz (former IOP) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mir alles schon längst klar. Trotzdem Danke. Ich finde es hat 
auch nichts mit little endian zu tun sondern mit der logischen und 
physikalsichen Sektornummer. Hat das auch einen Einfluss auf die SD 
Karten Sektoren? Ich meine das muss ja unsinnig sein, es gibt ja keine 
Leseköpfe etc. in einer SD Karte. Muss ich die CHS Nummer wirklich 
ausrechnen?

Autor: skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der startcluster einer datei steht im directory eintrag
im zu diesem cluster gehoerendem eintrag der fat
steht die nummer des naechten clusters bzw das kein weiterer mehr belegt
beim berechnen der sektornummer muss die anzahl der sektoren pro cluster
beruecksichtigt werden ACHTUNG der erste datencluster ist nicht die
null da der anfang der fat schon reserviert ist

Autor: KOnz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön aber der mein letzter Eintrag ist schon ca 1 Monat her. 
Mittlerweile ist der MP3 Player schon fertig und ich bin ein wahrer FAT 
Profi geworden

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ich doch gleich mal mein Problem ansprechen:
Gibt es eine Möglichkeit, den Anfang einer Datei durch irgendwelche 
Manipulationen auf einen bestimmten Sektor festzulegen?
Hintergrund: Wie schon mehrfach im Forum beschrieben, schreibe ich mit 
einem µC Daten bytweise in eine Datei, welche vorher auf einer 
formatierten SD-Karte angelegt wurde. Den Dateianfang suche ich mir z. 
B. mit WINHEX. Dabei musste ich feststellen, dass der Dateianfang zum 
Teil bei verschiedenen Sektoren liegt und ein einfacher Kartentausch 
somit nicht möglich ist.
Vielleicht hat der „FAT Profi“ (oder ein anderer) eine Idee, wie man den 
Dateianfang konkret festlegen kann.
MfG
Wolfgang

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du sowieso schon mit nem µC auf die karte schreibst, dann lass den 
µC doch die datei erstellen

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
liest der „FAT Profi“ noch mit und hat evtl. eine Antwort zu meinem 
Problem vom 20.3.08 ?
MfG
Wolfgang

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke das beste ist, dem µC FAT richtig beizubringen, sodass er die 
Datei selbstständig findet. Du kannst ja die Einschränkung machen, dass 
die Datei im Root-Directory liegen muss, das vereinfacht die Sache 
etwas.

Alternativ kannst du natürlich über Winhex (oder ähnliche Späßle) die 
Datei händisch, also zahl für Zahl erstellen. Dann liegt sie da wo du 
sie haben willst. Ich denke aber die erste Version ist einfacher und 
praktikabler...

Sebastian

Autor: Johnny Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder man lässt das Dateisystem ganz weg.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.