Forum: Mikrocontroller und Digitale Elektronik Auf MMC/SD-Karte Datei schreiben (Routine von Holger Klabunde)


von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo @all

Habe mir von Holger Klabunde’s Homepage die Routinen für die 
MMC/SD-Karte runtergeladen.
Das wäre der link dafür: 
http://www.holger-klabunde.de/avr/FATSingleOpt41.zip
Ich verwende einen ATmega32, AVRStudio (WINAVR), 16MHz Quarz und eine 
SD-Karte von Panasonic mit 16MB.

Habe mir aus den Routinen ein Programm zusammen gestellt das eine Datei 
„Test.htm“ erstellen soll und in diese „Hello World“ schreiben soll.
Habe das Hex-File erstellt und auf meinen ATmega32 geflasht. Atmega 
angeschlossen ausprobiert. Es wird weder eine Datei erstellt noch auf 
eine vorhandene Geschrieben.

Habe mal mein Komplettes Programm als Zip-File angehängt und auch ein 
Bild von der Beschaltung beigelegt. Die nicht verwendeten Header und 
Source Files habe ich mal mit drin gelassen. Könnte ja sein das ich 
vergessen habe etwas einzubinden.

Vielleicht nimmt sich ja mal einer die Zeit und guckt sich das mal an. 
Wüsste nicht was ich sonst Falsch gemacht haben könnte.

Gruß Alex

von holger (Gast)


Lesenswert?

Du hast vergessen die Karte zu initialisieren!
Am Anfang von main() muss das hier stehen:

 MMC_IO_Init();

 if(GetDriveInformation()!=F_OK) // get drive parameters
  {
   // Gib hier eine Fehlermeldung raus
   while(1);
  }

von Alex (Gast)


Lesenswert?

Danke für die Hilfe.
Hat super Funktioniert.
Ich krieg jetzt den Text gespeichert. Allerdings sind auch noch andere 
Zeichen dabei. Wenn ich jetzt zu Beispiel "Hello World" speichern möchte 
macht er das auch aber er schreibt dahinter noch seltsamme Zeichen ist 
das normal?

Wenn ja wie bekomme ich die weg? Wollte nämlich nur den Text speichern 
ohne die Zeichen.
Kann das an dem Dateiformat liegen? Denn wenn ich eine Textdatei 
schreibe sind nur diese komischen Zeichen da. Aber bei .htm kommt der 
Text und die Zeichen.

Gruß Alex

von holger (Gast)


Lesenswert?

>Wenn ich jetzt zu Beispiel "Hello World" speichern möchte
>macht er das auch aber er schreibt dahinter noch seltsamme Zeichen ist
>das normal?

Ja, wenn du diese Zeichen selber schreibst:

  written=Fwrite(&by,1);     // Achte auf das & vor by !

Lösch die Zeile.

von Alex (Gast)


Lesenswert?

Ach so.
Danke.

Gruß Alex

von Pierre (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

genau wie Alex versuche ich, mit den Routinen von Holger Klabunde eine 
SD Karte anzusprechen.
Ich benutze ebenfalls einen ATmega32 mit 16Mhz Quarz.

Pinbelegung sieht bei mir so aus:
DAT0/DO --> PB0
CLK     --> PB2
CMD/DI  --> PB1
DAT3/CS --> PB4

Leider bekomme ich als Rückgabewert der Funktion
1
GetDriveInformation()
 die Fehlermeldung.
Woran könnte das liegen?

Die kompletten Dateien sind im Anhang, vielleicht kann sich jemand von 
euch die Mühe machen und mal drüber gucken.
Wäre super!

Danke im Voraus,
Pierre

von holger (Gast)


Lesenswert?

>Pinbelegung sieht bei mir so aus:
>DAT0/DO --> PB0
>CLK     --> PB2
>CMD/DI  --> PB1
>DAT3/CS --> PB4

Das liegt daran das die Routinen kein
SoftSPI benutzen und die SPI Schnittstelle
beim ATMega32 auf PB4-PB7 liegt.

von Pierre (Gast)


Angehängte Dateien:

Lesenswert?

N'abend zusammen,

also, ich habe meine Beschaltung jetzt geändert:

DAT0/DO --> PB6
CLK     --> PB7
CMD/DI  --> PB5
DAT3/CS --> PB4

Soweit so gut, allerdings bekomme ich noch immer als Rückgabewert der 
Funktion GetDriveInformation() eine Fehlermeldung.
Bei der genaueren Fehleranalyse verlässt er die Funktion an der Stelle 
mit dem Kommentar "CF gives no answer".

Um dem Fehler weiter auf den Grund zu gehen, habe ich in der Funktion 
IdentifyMedia() bzw. CFIdentify() direkt zu Beginn eine Ausgabe auf 
meinem Display eingefügt. Diese wird allerdings nicht angezeigt. :-(
Daraus schließe ich, dass die Funktion, warum auch immer nicht 
aufgerufen wird?!

Hat vielleicht jemand von euch einen Tipp für mich?
Ich weiß nicht weiter.

Danke & Grüße
Pierre

von Klaus Schröder (Gast)


Lesenswert?

kein Plan

von holger (Gast)


Lesenswert?

>Um dem Fehler weiter auf den Grund zu gehen, habe ich in der Funktion
>IdentifyMedia() bzw. CFIdentify() direkt zu Beginn eine Ausgabe auf
>meinem Display eingefügt. Diese wird allerdings nicht angezeigt. :-(
>Daraus schließe ich, dass die Funktion, warum auch immer nicht
>aufgerufen wird?!

CFIdentify() wird nur bei CompactFlash Karten aufgerufen.
Das Gegenstück für MMC/SD heisst MMCIdentify().

von Jan (Gast)


Lesenswert?

Bei Funktioniert das Erstellen der text.htm auf der SD-Karte soweit, ich 
habe jedoch noch noch 2 Fragen:

1. Ich möchte nun in der nächsten Zeile ebenfalls "Hello World" 
schreiben, bis jetzt hab ich es aber noch nicht hinbekommen in die 
nächste Zeile zu springen

2. Wie kann ich eine bereits geöffnete Datei öffnen und beschreiben. 
Wenn ich die Text.htm bzw bei mir die text.txt nicht lösche und dann 
wieder mit dem Controller beschreibe, sehe ich anschließend nur 
Datenmüll.

von Daniel (Gast)


Lesenswert?

Hat zu Jans frage niemand eine Antwort? Das würde mich nämlich im moment 
auch brennend interessieren.

von holger (Gast)


Lesenswert?

>Hat zu Jans frage niemand eine Antwort?

Leider hat Jan seinen Code nicht gepostet.
Na gut ich versuchs, auch wenn da noch einiges unklar ist.

>2. Wie kann ich eine bereits geöffnete Datei öffnen und beschreiben.

Eine geöffnete Datei kann man nicht zweimal öffnen,
bzw. sollte man das nicht tun. Das FAT System checkt das nicht ab.
Dann kann es durchaus Datensalat geben.
Das müsste quasi per Dateinamenvergleich geschehen.
Und das ist nicht vorgesehen.

>Wenn ich die Text.htm bzw bei mir die text.txt nicht lösche und dann
>wieder mit dem Controller beschreibe, sehe ich anschließend nur
>Datenmüll.

Interessant wäre wie der Datenmüll aussieht.

Wenn man die Datei nicht löscht hat man zwei Möglichkeiten:
1) Mit 'a' öffnen. Daten an die Datei dranhängen. Das geht problemlos.
2) Mit 'w' öffnen. Daten vom Anfang der Datei schreiben.
   Alte Daten werden dabei überschrieben.
   Schreibt man nicht bis an das Ende der Datei bleiben alte
   Daten weiterhin erhalten. Die Datei wird also nicht automatisch
   kleiner gemacht! Wer das möchte, löscht die Datei und erzeugt
   einfach eine neue mit demselben Namen, und alles ist in Butter.

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.