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
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.
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.
SD-Karten verwenden kein FAT32, das tun nur SDHC-Karten, weil sie größer sind als die mit FAT16 verwendbaren 2 GiB.
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.
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
Was spricht gegen Holgers Code? http://www.holger-klabunde.de/avr/avrboard.htm#FullFAT oder http://elm-chan.org/fsw/ff/00index_e.html
>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 ?
> 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.
> 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.
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
Leichter wirst du dich tun, wenn du mit FAT16 (was Windows nur als FAT bezeichnet) beginnst. FAT32 ist noch komplexer.
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
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
1 | unsigned char buf[]="Lars Test"; |
2 | unsigned char testbuf[6]; |
3 | |
4 | //get drive Info....
|
5 | |
6 | //schreiben auf SD Karte
|
7 | testbuf[0]=0x20; |
8 | testbuf[1]=0x21; |
9 | testbuf[2]=0x22; |
10 | testbuf[3]=0x23; |
11 | testbuf[4]=0x24; |
12 | testbuf[5]=0x25; |
13 | |
14 | result=Fopen("test.txt", F_WRITE); |
15 | if(result==F_OK) |
16 | {
|
17 | result=Fwrite(buf,8); |
18 | if(result!=8){break;} |
19 | |
20 | result=Fwrite(testbuf,9); |
21 | if(result!=9){break;} |
22 | }
|
23 | Fclose; |
Das funktioniert soweit auch. Wiso kann ich aber z.B. nicht
1 | 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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.