mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Adresse der zweiten FAT


Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe diese resevierten Einträge ignoriert.

Marcus

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KRibel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Kri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei der 3. TXT ist das txt klein ...

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es schon auch schon groß probiert. Hilft nicht.

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus (Gast)
Datum:

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

Marcus

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus (Gast)
Datum:

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

Marcus

Autor: KRibel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.