Forum: Mikrocontroller und Digitale Elektronik Mal wieder SD-Karte


von Andreas D. (andreasdangel)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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

von Andreas D. (andreasdangel)


Lesenswert?

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

von Philipp B. (philipp_burch)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Es kann eventuell noch sein, dass das SPI Interface im AVR falsch 
konfiguriert ist.

von Uwe (Gast)


Lesenswert?

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

von Andreas D. (andreasdangel)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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

von Andreas D. (andreasdangel)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Spiel mal ein wenig mit CPOL/CPHA rum.

von Andreas D. (andreasdangel)


Lesenswert?

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
Noch kein Account? Hier anmelden.