Forum: Mikrocontroller und Digitale Elektronik Adresse der zweiten FAT


von KRibel (Gast)


Lesenswert?

HI Leute,

ich habe da ein kleines Problem mit meiner SD-Karte.
Undzwar kann ich mit meinem PIC wunderbar Dateien auf die Karte
schreiben. Ich verändere nur die 1. FAT.
Unter Linux sind die Dateien lesbar, unter Windows nicht.
Mit chkdsk /f wird die 1. FAT mit der 2. überschrieben und meine Datei
ist "weg".

Ich nehme an, dass das Problem mit dem ändern der 2. FAT behoben werden
kann. Nur weiß ich nicht wie man die Adresse der 2. FAT ermittelt.

Kann mir da jemand helfen?

Gruß

Konstantin

von KRibel (Gast)


Lesenswert?

Also ich habe jetzt experimentell die Adresse der 2. FAT herausgefunden.
->chkdsk /f schreibt, dass alles in Ordnung sei. Wenn ich mein Text-File
im Editor öffnen möchte kommt eine Fehlermeldung:

"Die Datei E:\kon.TXT kann nicht gefunden werden.
 Möchten Sie eine neue Datei erstellen?"

Wie gesagt Linux öffnet die Datei ohne Probleme.

Kennt jemand eine Lösung?

Gruß

Konstantin

PS: Ich wüsste dennoch gerne, wie man die Adresse der 2. FAT berechnet.

von Olaf (Gast)


Lesenswert?

> PS: Ich wüsste dennoch gerne, wie man die Adresse der
> 2. FAT berechnet.

FAT2POS=FAT1POS+FATLEN;

FATLEN --> Bootsektor[0x16,0x17];

Aber erzaehl doch mal wie du es geschaft hast ein FAT-Dateisystem zu
programmieren ohne jemals eine Doku dazu gelesen zu haben? :-)

Du musst ja schliesslich bereits wissen wie gross die FATs sind weil du
sonst nicht das Direktory finden kannst...

Olaf

von Peter D. (peda)


Lesenswert?

Man kann auch die FAT-Anzahl auf 1 setzen.

Das mit der Doku wundert mich auch.
Ich hatte mir mal zu DOS-Zeiten ne variable RAM-Disk geschrieben, wäre
ohne Doku nicht möglich gewesen.


Peter

von KRibel (Gast)


Lesenswert?

Ich habe nie geschrieben, dass ich keine Doku gelesen habe. Ich habe
schon einige Dokum dazu gelesen.

Ich mache also Folgendes:
 1. SD-Karte mit dem PC formatiert und 2 txt Dateien darauf kopiert.
 2. Mit dem PIC RootDir auslesen und an die Positionen 96-127 die 32
Byte Header für die Datei schreiben. 96-127 weil die ersten 32 Byte für
die Partitionsbezeichnung belegt sind und die zweit und dritten 32 Byte
für die darauf kopierten Dateien.
 3. 1. FAT auslesen verfollständigen
 4. 2. FAT auslesen verfollständigen
 5. Dateiinhalt schreiben.

Habe ich etwas vergessen, dass Windows die Datei nicht lesen kann?

Gruß Konstantin

von Marcus (Gast)


Lesenswert?

Hallo Konstantin,
schau dir den von Win generierten Eintrag der FAT, sowie des
Verzeichnis an und vergleiche mit dem was du selbst schreibst. Ich
denke an dieser Stelle kannst du den Fehler finden. Ich habe bereits
Karten beschrieben, dabei ist mir aufegefallen, dass Windows an dieser
Stelle auf einmal case-sensitiv wird, wenn ich mich recht erinner.

Marcus

von KRibel (Gast)


Lesenswert?

Die Bytes 12..21 die für das Betriebssystem reserviert sind. Kann man
dort 0x00 reinschreiben, oder muss was bestimmtes dort stehen?

Gruß
Konstantin

von Marcus (Gast)


Lesenswert?

Ich habe diese resevierten Einträge ignoriert.

Marcus

von Olaf (Gast)


Lesenswert?

Ich wuerde mal sagen es gibt zwei Moeglichkeiten das Ganze zu
handhaben.

1. Du schreibst dir eine komplette Unterstuetzung von FAT. Dann musst
du aber noch etwas mehr tun da du die ganzen Werte je nach groesse der
Karte, oder auch womit sie formatiert wurde, aendern.

2. Du schreibst auf eine frisch formatierte (keine fragmentierung)
Karte eine Datei mit einer Magicnumber am Anfang und suchst danach.
Dann ueberschreibst du einfach Sektoren ohne dir einen Gedanken um das
Filesystem zu machen.

Alles andere fuehrt nur zu Ergebnissen die selten funktionieren. :-)

Olaf

von KRibel (Gast)


Angehängte Dateien:

Lesenswert?

Also ich habe jetzt mal ein Datei angehängt log.pdf.
Dort sind die Einträge des RootDir-Registers abgebildet. Schaut mal
bitte drüber, vielleicht findet ihr den Fehler.

Danke im Voraus.

Gruß

Konstantin

von Kri (Gast)


Lesenswert?

bei der 3. TXT ist das txt klein ...

von KRibel (Gast)


Lesenswert?

Habe die SD-Karte formatiert, an den PIC angeschlossen und eine Datei in
den 1. Cluster geschrieben.
Zurück in den Kartenleser vom PC eingesteckt und mit chkdsk /f
überprüft.
Folgenden Fehler hat chkdsk erkannt:
Erste Zuordnungseinheit ist ungültig.

Gruß
Konstantin

von KRibel (Gast)


Lesenswert?

Ich habe es schon auch schon groß probiert. Hilft nicht.

von KRibel (Gast)


Lesenswert?

habe jetzt den Fehler mit der Zuordnungseinheit gelöst.
Noch ein Mal formatiert und mit dem PIC beschrieben.
->Mit Windows immernoch das selbe Problem wie vorher.
->chkdsk /f sagt: "Es wurden keine Probleme festgestellt."

Gruß

Konstantin

von Marcus (Gast)


Lesenswert?

Was ahst du groß ausprobiert? Dateinamen oder Erweiterung oder beides?
Versuch als Dateinamen mal 123 oder so, also nur Zahlen.

Marcus

von KRibel (Gast)


Lesenswert?

Ein Wunder!!!
Wenn ich den Dateinamen nur aus Zahlen zusammenstelle ist es für
Windows überhaupt kein Problem die Datei zu lesen.

Kannst du mir sagen warum das so ist?

Wie kann ich jetzt die Dateinamen auch mit Buchstaben versehen?

Vielen Dank

Gruß
Konstantin

von Marcus (Gast)


Lesenswert?

Wie oben bereits geschrieben, achte auf die Groß- und Kleinschreibung
des Dateinamen und der Erweiterung.

Marcus

von KRibel (Gast)


Lesenswert?

Kleinschreibung funktioniert auch!
Man muss die reservierten Bytes mit bestimmten Werten belegen und dann
gehts auch.

Byte 12 = 0x18
Byte 13 = 0x43
Byte 14 = 0xAE
Byte 15 = 0x63
Byte 16 = 0x16
Byte 17 = 0x35
Byte 18 = 0x16
Byte 19 = 0x35
Byte 20 = 0x00
Byte 21 = 0x00

Gruß
Konstantin

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.