mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Card SPI FAT32 ATA??


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Irgendwie stehe ich auf dem Schlauch...
Ich möchte auf meiner SD Karte Daten ablegen, welche ich dann später am 
PC auslesen kann.

Bisher kann ich Daten auf die Karte schreiben und auslesen, allerdings 
nur über SPI.

Also brauch ich ja noch FAT32 um die Daten am PC sichtbar zu 
machen....aber alle Beispielcodes die ich finde sind mit ATA und nicht 
mit SPI.
Ich dachte ATA sei auch ein Übertragungsprotokoll wie SPI und nur für 
z.B. CF Karten, brauch ich das dann für meine SD Karte überhaupt????


Wär nett wenn ihr mir helfen könntet!!!

Grüße Lars

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja und? FAT32 und ATA/SPI ham doch nix miteinander zu tun..? Mal davon 
ab, dass FAT32 für den hypothetischen AVR ziemlich ungeeignet ist. Das 
alte FAT ist schon kompliziert genug.
Und: Man kann auch Rohdaten ohne Dateisystem auf die Karte nageln und am 
PC auslesen, mit Linux geht das dann ohne Dateisystem sogar noch 
einfacher als mit.

Autor: nixversteh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FAT32 auf'm AVR? Gibt's zum Bleistiel hier: 
http://www.holger-klabunde.de/avr/avrboard.htm#FullFAT
Hat der gute sogar mal hier irgendwo veröffentlicht.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SD-Karten verwenden kein FAT32, das tun nur SDHC-Karten, weil sie größer 
sind als die mit FAT16 verwendbaren 2 GiB.

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer sagt das?
Man kann SD Karten mit FAT32 formatieren, wenn sie größer als 32MB sind. 
Welchen Sinn es macht ist ein anderes Thema. Es gibt auch 4GB Karten, 
die im SD Mode noch angesprochen werden können.

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon fleißig gegoogelt, aber wirklich fündig bin ich nicht 
geworden.

Bin immernoch auf der Suche nach einem passenden Beispielcode.

fat.h und fat.c der Procyon-Seite verwendet ATA, ich brauch ja aber SPI

ulrich radigs Code unterstützt nur das Lesen, nicht aber das Schreiben.

Kennt ihr vielleicht noch eine Seite mit Beispielcode?

Wie gesagt ich suche FAT32 für SD-Karten mit SPI. Hauptsächlich die 
Screibfunktion...

Danke schon mal
Grüße

Autor: Andreas Watterott (andreasw) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>SD-Karten verwenden kein FAT32
Doch.

>fat.c der Procyon-Seite verwendet ATA,
>ulrich radigs Code unterstützt nur das Lesen
Warum führst du dann die beiden nicht einfach zusammen ?

Autor: J. K. (rooot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.mikro-control.de

Fat16 lesen und schreiben

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wer sagt das?

Die SD-Kartenspezifikation. Die legt auch das verwendete Dateisystem 
fest.

> Man kann SD Karten mit FAT32 formatieren, wenn sie größer als 32MB sind.

Ja, das kann man. Nur entsprechen sie dann nicht mehr der 
SD-Kartenspezifikation.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die SD-Kartenspezifikation. Die legt auch das verwendete Dateisystem
> fest.

Was hat denn die Spec der SD-Karte mit dem Dateisystem zu tun? Ohne zu 
nah treten zu wollen, aber das sind zwei paar Schuhe und mir ist dort 
bisher noch nie etwas vom Dateisystem "über den Weg gelaufen".


Falls es dir eine Hilfe ist, im Beispilecod für Atmels 
UC3-Mikrocontrollers sind auch bereits fertige Codes für SD-Karte + 
FAT12/16/32 enthalten.

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mich jetzt dem Code von Holger Klbunde angenommen.
Nach 2 Stunden durchlesen geht mir langsam ein Licht auf, aber wirklich 
leicht find ich das nicht, beschäftige mich auch erst seit 1 Jahr mit 
Elektronik/µC/C
Naja, ich kämpf mich mal durch den Code...weil einfach implementieren 
will ich das auch nicht, ich muss schon wissen was da passiert :-)
Und alles was ich nicht brauch muss raus!

Ich habe eine 1GB und eine 256MB SD Karte zur verfügung.
Will ich die am PC formatieren gibt Windows mir die Wahlmöglichkeit 
zwischen FAT und FAT32. Also versuch ich mein Glück einfach mal mit 
FAT32.
Wenn ich das verstanden habe wird FAT12/16 auch nicht groß anders sein 
(hoffe ich).

Danke für eure Hilfe!!

Grüße Lars

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leichter wirst du dich tun, wenn du mit FAT16 (was Windows nur als FAT 
bezeichnet) beginnst. FAT32 ist noch komplexer.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe für ein ähnliches Projekt die EFSL (http://efsl.be/) verwendet. 
Klappte prima, getestet mit 32MB bis 4GB Karte und ich kann FAT16 und 
FAT32 lesen und schreiben. Einziger Nachteil: Die Schreibrate ist recht 
mies (< 200kB/s), da die Blöcke alle einzeln geschrieben werden, 
anstelle mehrere zu sammeln. Ist aber bei uC's meist wegen des 
begrenzten Speichers nicht besser zu machen.

Gruss
Mike

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nochmal...
Also die Grundlagen von FAT leuchten mir jetzt ein. Ich habe es auch 
geschafft Holger Klabunde's Code einzubinden und er funktioniert soweit.
Allerdings habe ich noch Verständnisprobleme mit dem fatbuf[] bzw der 
FWrite ´Funktion.

hier gibt es doch bestimmt jemanden, der diesen Code auch verwendet...

Hier ein ausschnitt aus meiner main.c
unsigned char buf[]="Lars Test";
unsigned char testbuf[6];

//get drive Info....

//schreiben auf SD Karte
testbuf[0]=0x20;
testbuf[1]=0x21;
testbuf[2]=0x22;
testbuf[3]=0x23;
testbuf[4]=0x24;
testbuf[5]=0x25;

result=Fopen("test.txt", F_WRITE);
if(result==F_OK)
{
  result=Fwrite(buf,8);
    if(result!=8){break;}

  result=Fwrite(testbuf,9);
    if(result!=9){break;}
}
Fclose;


Das funktioniert soweit auch.
Wiso kann ich aber z.B. nicht
 Fwrite(testbuf[1],1) 
 schreiben lassen. mit der Zahl hinterm KOmma geb ich ja an wieviel 
Bytes geschrieben werden sollen.
Es wird auch ein Byte geschrieben, nur statt 0x21 bekomme ich 0xFF auf 
die SD Karte

Meine 2.Fage ist:
Wie verwende ich Fflush() bzw. den extern unsigned char fatbuf[];
Kann ich den beschreiben wie z.B. mein testbuf und dann wird er wenn ich 
fflush aufrufe geschrieben, oder darf ich den nicht "antasten"...
Dann versteh ich allerdings den Sinn nicht ganz, soll ja das System 
schneller machen und in der Funktionsbeschreibung steht:
ruft man auf, wenn der gesammelte Inhalt auf den CF(SDKarte) geschrieben 
werden soll, ohne die Datei zu schließen.
Hab natürlich schon damit rumgespielt und versucht z.B. fatbuf[1]=0x22; 
und dann Fwrite(fatbuf,1); aber das funktioniert nicht.

Wäre nett wenn ihr mir da helfen könntet.

Grüße

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fwrite(testbuf[1],1) ist falsch weil ein Pointer auf einen Puffer
erwartet wird. Du übergibst aber ein Byte als Wert. Richtig ist:

Fwrite(&testbuf[1],1)

>Hab natürlich schon damit rumgespielt und versucht z.B. fatbuf[1]=0x22;
>und dann Fwrite(fatbuf,1); aber das funktioniert nicht.

Auweia. Flossen weg von fatbuf[]. Der gehört nicht zur Datei!
Da stehen Clusternummern drin. Wenn du da was einträgst kannst
du die Karte gleich wieder formatieren.

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich glaub ich verstehs jetzt...lesen bildet^^ und ein Oszi zu 
verwenden hilft auch^^
Der fatbuf wird in den Funktionen verwendet. Mit dem Aufruf von FWrite 
wird noch nicht auf die SD Karte geschrieben, erst mit dem Aufruf von 
fflush oder dann fclose.

Bei übertragen eines Bytes wie z.B. testbuf[3] hab ich das mit den 
Zeigern durcheinander gebracht.
Es muss folglich heißen:

Fwrite(&testbuf[3],1);

Dacht ich poste meine "Erkenntnis" fall jemand mal vor dem gleichen 
Problem steht...

Grüße

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Holger!

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.