Hallo, ich versuche im Moment von der SD-Karte zu lesen. Das Problem ist, dass ich kein Startbyte von der Karte bekomme. Das erste Byte, das ich nach dem Lesebefehl bekomme und das nicht 0xff ist, lautet 0xfc. Das Startbyte sollte eigentlich 0xfe sein. Nach dem 0xfc kommen dann aber tatsächlich 512 Bytes, die aber leider nicht stimmen. (Ich hab die SD-Karte unter Linux mit dd ausgelesen zum Vergleich). Die Daten stimmen soweit überein, dass an den Stellen, an denen 0x00 steht auch 0x00 gelesen wird. An den anderen Stellen liest mein Mikrocontroller falsche Werte. Ausprobiert habe ich das mit 3 verschiedenen Karten (8 MB). Immer das gleiche Ergebnis. Mein Mikrocontroller ist der ATmega162. Ich programmiere in Assembler und verwende den Hardware-SPI, Mode 0. Ich betreibe Karte und Mikrocontroller mit 3.6V. Das Initialisieren der SD-Karte funktioniert ohne Probleme (74+ clocks am Anfang, dann CMD0, Response=1, dann CMD1 bis Response=0). Auch der Lesebefehl scheint akzeptiert worden zu sein (CMD17, Response=0). Ich hab versucht den 1. Sektor der Karte auszulesen (also Adresse 0x00000000). Nach der Response auf CMD17 müsste nach ein paar Takten das Starttoken 0xfe kommen, bei mir kommt aber 0xfc. Weiß vielleicht jemand, was ich hier falsch mache? Grüße, Andreas Dangel
Hi! sowas blödes hatte ich auch schon mal, hatte aber ein 3/5Volt System und die Flankensteilheit war zu schlecht. Aktiver Treiber und alles war weg. Du hast 3,6V? Schon zu hoch kann es nicht sein? Ist sonst noch irgendwas am SPI-Port? ...ISP eventuell? Sind irgendwo R's als Schutz drinn? Tippe jedenfalls auf schlechte Flanken, suche mal in diese Richtung. Viel Erfolg, Uwe
Hi! Der ATmega162 steckt im STK500. Ich verwende außerdem den In-Circuit-Emulator JTAG ICE mkII. Über den programmiere ich auch den ATmega162. Anfangs habe ich mit 3,0V gearbeitet, hab aber gelesen, dass manche Karten dann langsamer sind als mit maximaler Spannung (3,6V). Mit 3,0V hatte ich genau dasselbe Ergebnis. Widerstände verwende ich keine. Meinst du mit aktiver Treiber die Anbindung, die z.B. Ulrich Radig beschreibt? (http://www.ulrichradig.de/site/atmel/avr_mmcsd/gfx/MMC_Optimal.JPG) Später will ich auf jeden Fall von 3 auf 5 Volt wechseln. Die 3V wollte ich nur zum Entwickeln der SD-Karten-Software verwenden. Danke für den Tipp, Gruß, Andreas
Hi, das selbe Problem (Auch immer 0xFC) hatte ich auch schon. Ist es zufälligerweise eine Karte von Apacer? Mit meiner SanDisk-Karte hatte ich das Problem nicht. Es scheint auch nicht immer aufzutreten. Einen Tag später ging's plötzlich wieder... Es könnte aber einen Zusammenhang mit dem Powerup-Wait haben.
Hi! STK500, habe ich nicht, aber untersuche mal ob die Signale am AVR genauso aussehen wie an der Karte. Beim STK200 sind zb. noch R's dazwischen um vom ISP eine Trennung zu haben. Aktiver Treiber? Habe ich einfach mit 2 Transist +3 R's erschlagen. Ob es Ulrich Radig genauso macht kann ich noch nichtmal sagen. Was mir gerade noch einfällt, ich hatte mal beim brennen (ISP) die Karte drinn, dann kam auch nur noch Mist. Irgendwann habe ich mir die Eigenschaften der Karte anzeigen lassen, das sah alles gut aus, seither sind in den Schreib/Lesezeiten unsinnige Werte drinn, aber die Karte geht. Tippe aber trotzdem auf Signalfehler, weil wenn ich zufällig das ISP noch drannhabe komme ich auch nur bis CMD1, dann ist Sense. Viel Erfolg, Uwe
Hi, das SPI-Interface sollte ich eigentlich richtig konfiguriert haben. Mode 0 (CPOL=0, CPHA=0), Master, beim Initialsieren habe ich als Clock-Frequenz f/128 (f=3.69MHz). Und die Initialisierung der SD-Karte funktioniert ja eigentlich auch (ich bekomme zumindest verfünftige Antworten). Es sind zwei Karten von Canon, und eine von JVC. Alle drei zeigen das gleiche Verhalten. Dann wird's wohl am Signal liegen. Später soll der ATmega sowieso mit 5 Volt laufen, da noch ein LCD angeschlossen wird. Dann muss ich mich halt jetzt gleich mit der Pegelwandlung 3V<->5V beschäftigen. Ich hab hier auch schon ein paar Threads gesehen, wo das diskutiert wurde. Nochmal Danke für die Tipps! Andreas
Hi! Clock-Frequenz f/128 (f=3.69MHz) ist das nicht ein wenig zu langsam? War da nicht irgendwas von 100-400KHz? Versuche mal: ldi temp,(1<<MSTR|1<<SPE|1<<SPR0);// enable SPI interface (4MHz/16=250kHz) out SPCR,temp Nach dem Init kannst du bis auf 25MHz rauf. MFG Uwe
Hi, hab's jetzt mal mit ca. 250kHz beim Initialisieren versucht. Die Karte verhält sich immer noch gleich. Daran liegt's also nicht. Gruß, Andreas
So, die SD-Karte läuft inzwischen. Ich habe einen Spannungsregler von 5V auf 3.3V verwendet und einen Pegelwandler (74HC4050). Damit funktioniert die Karte wie erwartet. Der Atmega läuft dann mit 5V, die SD-Karte mit 3.3V.
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.