mikrocontroller.net

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


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

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

Autor: holger (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so.
Danke.

Gruß Alex

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

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

Autor: holger (Gast)
Datum:

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

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

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

Autor: Klaus Schröder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein Plan

Autor: holger (Gast)
Datum:

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

Autor: Jan (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

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.