Forum: Mikrocontroller und Digitale Elektronik SD-Card Daten schreiben ohne FAT aber wie wieder lesen?


von reflection (Gast)


Angehängte Dateien:

Lesenswert?

Salu zusammen

Ich habe gerade so wie ich das sehe die SD Card zum laufen gebracht. Es 
handelt sich um eine Sandisk 512MB mit dem Code von TI für den MSP430 
(slaa281a) Siehe Attachement.

Diesen habe ich nun angepasst und ich erhalte die Cardsize 507379712
nehme jetzt mal an das in demfall alles funktioniert (CS, SPI ect.)

Nun möchte ich ja was auf die Karte schreiben und das nacher im Computer 
wieder lesen. Die Daten müssen also nicht mehr mit dem MSP430 gelesen 
werden, lediglich mit dem PC. Wie mache ich das jetzt am einfachsten. 
Habe hier den Code aus dem Beispiel einmal übernommen:

for (i = 0; i <= 512; i++) buffer[i] = i;
    mmcWriteSector(1, buffer);                // write a 512 Byte big 
block beginning at the (aligned) adress

    for (i = 0; i <= 512; i++) buffer[i] = i+64;
    mmcWriteSector(2, buffer);                // write a 512 Byte big 
block beginning at the (aligned) adress

    mmcWriteBlock(1*512ul, 512, buffer);


Und nu? :o) Sorry für die Frage, aber was sehe ich dann wie im Computer? 
Ich habe ja kein FAT auf der Karte, also sie ist FAT formatiert, aber 
der SD Card Code arbeitet ja ohne FAT. Wie komme ich nun an meine Daten 
ran. Gibt es da für Windows ein Programm? Kann ich die Daten auch in 
eine fixe Datei schreiben? Habe gelesen man solle eine Datei so gross 
wie die Karte anlegen, wie macht man das? Ich blicke bei dem ganzen SD 
Karten Zeugs einfach nicht durch. Nun läuft sie endlich und ich komm 
schon wieder nicht weiter...

Hoffe Ihr könnt mir helfen

Gruss reflection

von Michael W. (mictronics) Benutzerseite


Lesenswert?

>Ich habe ja kein FAT auf der Karte, also sie ist FAT formatiert...
Was denn nun?

Ohne FAT im uC kannst du die Karte nicht ohne Diskeditor am PC auslesen.
Schreibst du mit dem uC Rohdaten auf die Karte (ohne Dateisystem) dann 
kanst du sie dir mit Tools wie Winhex oder Hexworkshop (im Diskmodus) 
anschauen und als Datei exportieren.

von reflection (Gast)


Lesenswert?

Salu

Danke für die Antwort, das habe ich gemeint.

Gruss

von Michael W. (wiebel42)


Lesenswert?

Unter Linux würde es ein einfaches dd tun. Nur so als anregung. -wiebel

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Mit Linux ist das kein Problem mit Boardmitteln.
Unter Windows kannst Dir ein solches Programm aber schnell selber 
schreiben. Du sorgst einfach dafuer dass mindestens ein Null-Byte nach 
den Daten folgt oder Du schreibst eine Art Trailout-Sequenz hinter die 
Nutzdaten. Dann oeffnest Du das Device und liest einfach so lange Daten, 
bis der Trailer kommt. Die gelesenen Daten schreibst Du in eine Datei - 
fertig.


Michael

von holger (Gast)


Lesenswert?

>Du sorgst einfach dafuer dass mindestens ein Null-Byte nach
>den Daten folgt oder Du schreibst eine Art Trailout-Sequenz hinter die
>Nutzdaten.

Gute Idee wenn man Text Daten schreibt. In Binärdaten können
sowohl Null-Bytes wie auch die Trailout Sequenz in den Daten
vorkommen. Da hilft nur ein echtes FAT Dateisystem ohne
rumgemurkse.

von Chrisi (Gast)


Lesenswert?

Ein echtes FAT-Dateisystem wäre in der Tat die ordentlichste Lösung.

Eine weitere "schnelle" Lösung wäre, den ersten Daten-Sektor nur für 
Verwaltungsinformationen zu nutzen. Dabei ist die einzige Info die 
momentane Länge der Nutzdaten in den folgenden Sektoren, z.B. als 
32-Bit-Zahl.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

>Du sorgst einfach dafuer dass mindestens ein Null-Byte nach
>den Daten folgt oder Du schreibst eine Art Trailout-Sequenz hinter die
>Nutzdaten.

> Gute Idee wenn man Text Daten schreibt. In Binärdaten können
> sowohl Null-Bytes wie auch die Trailout Sequenz in den Daten
> vorkommen. Da hilft nur ein echtes FAT Dateisystem ohne
> rumgemurkse.

Nu gut dann schreibst halt noch einen Header davor, wo Du die 
Datenlaenge mit angibst, dann funktioniert die Methode auch fuer 
beliebige Daten.

Ein einfaches FAT-FS ist zur Not auch schnell implementiert. Kommt halt 
drauf an wieviel Aufwand man sich machen will. Es wuerde reichen, die 
FAT zu schreiben und einen Verzeichniseintrag im Wurzelverzeichnis. Dann 
kannste die Schese auch direkt mit nem Rechner auslesen ;) Das Beste is 
dann man formatiert das Ding am Rechner und sieht zu dass im 
Stammverzeichnis noch Platz ist.

Michael

von Jörn-H. G. (joern_g)


Lesenswert?

Eine weitere Möglichkeit, die sehr einfach und sehr bequem ist, die 
Karte neu zu formatieren mit FAT und eine sehr große Datei, z.B. einfach 
eine Textdatei mit Spaces gefüllt oder eine Binärdatei mit 0x00 oder 
0xFF gefüllt anzulegen - kann ruhig die ganze Karte belegen, 
platzmässig.
Danach kannst du dann einfach ab einem bestimmten "Offset", wo diese 
Datei beginnt, blind Daten reinschreiben und sie mit jedem beliebigen 
Programm, also ohne Diskeditor lesen.
Bei Textdatei reicht dann schon das notepad.

Nur nicht die FAT selber überschreiben!

Aber wenn du eine 1GB Karte hast, dann beginn einfach bei 1MB oder so 
und du hast Platz ohne Ende.

cu joern

von Simon K. (simon) Benutzerseite


Lesenswert?

Michael Waiblinger wrote:
> Unter Linux würde es ein einfaches dd tun. Nur so als anregung. -wiebel

Kleiner Tipp: Wenn man eh WinAVR installiert hat, hat man auch CygWin 
drauf. Probier mal in der Windows-Eingabeaufforderung "dd".

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.