www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte mit Code von Radig


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe eine 1GB SD Karte erfolgreich mit dem Beispiel Code von Radig 
an meinem Atmega32 initialisiert. Nun möchte ich auf der Karte ein Byte 
schreben. Wie müßte ich da vor gehen? Mit mmc_write_byte (U08 Byte)
schreibe ich z.B. eine 12 rein. Und mit U08 mmc_read_byte (void) möchte 
ich das Byte wieder auslesen und auf dem Uart ausgeben. Aber ich kann 
nix lesen? Was mache ich falsch?
Vielen Dank für Hilfe!
MFG
Frank

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst keine einzelnen Bytes schreiben, sondern nur ganze Sektoren.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Mit den Funktionen
U08 mmc_write_sector (U32 addr,U08 *Buffer) und
U08 mmc_read_sector (U32 addr,U08 *Buffer) habe ich es auch schon 
probiert. Wie müßte es den aussehen, wenn ich ein Sector beschreiben und 
auslesen  will? Ich möchte eigentlich nur Senoer Daten auf der SD Karte 
ablegen.
Frank

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit den von dir genannten Funktionen kannst du jeweils einen Sektor 
beschreiben und lesen. Buffer ist dabei jeweils 512Byte groß.
Du sammelst also solange Daten bis du 512Bytes erreicht hast, dann 
schreibst du diese auf die Karte. Das ist schon alles.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es müßte doch so U08 mmc_write_sector (0,512)zum schreiben  gehen und 
zum auslesen U08 mmc_read_sector (0) gehen. Die letzte Funktion gibt 
doch ein Buffer zurück, so das ich den Buffer auf der Seriellen ausgeben 
kann???
Frank

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, so in etwa. Den Buffer musst du aber erzeugen und der Funktion 
übergeben, die füllt ihn dann mit den entsprechenden Daten.

Autor: JÜrgen Grieshofer (Firma: 4CKnowLedge) (psicom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tschuldigung wenn ich da mal so einfach reinfrage, aber hat den Code 
schon jemand auf dem Mega8 ausprobiert?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab ich.

Autor: JÜrgen Grieshofer (Firma: 4CKnowLedge) (psicom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, perfekt ^^

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ne Frage! Muss ich ein Textfile auf der SD mit dem PC erzeugen in 
dem dann der Sector reingeschrieben wird? Weil so wie ich es beschrieben 
habe schreibt er nichts auf die SD Karte. Weder beim auslesen mit dem 
Atmega noch unter Windows kann ich den Sector wieder auslesen b.z.w. 
sehen.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Hat nicht einer nen Beispiel wie ich ein Sector auf die SD schreibe und 
wieder auslese mit dem Code von Radig?
Danke

Autor: JÜrgen Grieshofer (Firma: 4CKnowLedge) (psicom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So... jetzt bin ich am Ende mit meinem Latein... irgendwas ist heute los 
baer die SPI will und will nichts ausspucken... verwenden tu ich auch 
den Code vom Ulrich... den ich übrigens für sehr übersichtlich und schön 
gecodet halte ^^

ich hab das ganze auf einen Mega8 gepackt... Die einzige kleine Änderung 
die ich vorgenommen hab war in der MMC.h
#if defined (__AVR_ATmega8__)
  #define SPI_DI        4    //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist 
  #define SPI_DO        3    //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
  #define SPI_Clock      5    //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
  #define MMC_Chip_Select    1    //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
  #define SPI_SS        2    //Nicht Benutz muß aber definiert werden
#endif

Derweilen versuche ich noch die MMC.c in das bestehende Projekt 
einzuweben... Ich hab mit dem LA und dem Oszi auf SCK und MOSI gemessen, 
allerdings ohne Erfolg...

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt K:
Sinnenfrei Antworten wie "Ja, hab ich" helfen in diesem Zusammenahng 
meist nicht sonderlich weiter.

Die Frage nach demCodebeispiel möchte ich hier mal wieder aufgreifen, da 
ich mich selbst gerade mit dem Code nach Radig beschäfftige. Bei mir 
funktioniert der Code auch bis zu diesem Punkt:

Karte gefunden!!
0 5d 1 32 13 59 80 e3 76 d9 cf ff 16 40 0 4f
Directory


Directory Ende

FERTIG!!

Soweit scheints zu gehen. Nur das schreiben von Daten hab ich auch noch 
nicht hinbekommen. Muss man nun ein TXT File erstellen, oder wie 
funktioniert das?

Autor: Wolfgang U. (wolle68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na hier muß man keinen Textfile erstellen um was zu lesen oder zu 
schreiben. Soll das denn später in einen Textfile?? Wenn ja dann muß man 
auch noch ein FAT16 System installieren. Nur mit dem Schreiben eines 
Sektors passiert in der Richtung nichts. Im Gegenteil. Oben erwähnt ihr 
das schreiben in Sektor 0. Damit ist dann der MBR oder VBR hin und unter 
Windows kann man die Karte nur noch mit WinHEX o.ä. betrachten.

Frage ist also - was willst du wirklich machen?

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.