www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mal wieder SD-Karte


Autor: Andreas Dangel (andreasdangel)
Datum:

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

Autor: Uwe (Gast)
Datum:

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

Autor: Andreas Dangel (andreasdangel)
Datum:

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

Autor: Philipp Burch (philipp_burch)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Uwe (Gast)
Datum:

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

Autor: Andreas Dangel (andreasdangel)
Datum:

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

Autor: Uwe (Gast)
Datum:

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

Autor: Andreas Dangel (andreasdangel)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spiel mal ein wenig mit CPOL/CPHA rum.

Autor: Andreas Dangel (andreasdangel)
Datum:

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

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.