mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MMC in SPI Mode schreiben


Autor: DieterW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wer hat Eerfahrung mit dem Beschreiben von MMC Karten im SPI Mode? Das
lesen einzelner Sektoren funktioniert einwandrei. Bei dem Versuch einen
Sektor (512B) zu schreiben wird zwar der korrekte Response der Karte
ausgewertet aber wenn ich den gleichen Sektor anschließend lese ist
dieser nur mit 0 gefüllt. Hat jemand eine Idee?
Danke

Grüße
Dieter

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltung? Programmcode?

Hatte erst genau dasselbe Problem, bei mir war es ein kleiner
Schaltungsfehler in den Pegelwandlern.

Autor: DieterW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,
das ganze ist an U.Radig Beispiel orientiert. Spannungversorgung über
Dioden 3,4V. Als "Pegelwandler dienen die Spannungsteiler bzw. DOUT
der Karte über eine Transistorschaltung.
Die Kommunkation läuft über Portpins des Mega8. Ich habe es auch schon
mit der CRC versucht, da in einer Doku von Hitachi steht das die Daten
bei falscher CRC nie gespeichert werden. Dies scheint aber auch nicht
die Ursache zu sein, zumal die Beispiel im WWW immer ohne die CRC
arbeiten.
Wie sah Dein Schaltungfehler aus?
Danke!

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei CRC muss wahrscheinlich nicht gesucht werden, im SPI-Modus wird nur
bei der Initialisierung eine Pruefsumme benoetigt, spaeter werden nur
noch "Dummy-Bytes" statt Pruefsumme gesendet.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der wird dir nicht helfen, habe einen MAX3378E dafür verwendet.

Ein 74LVX125 kann ich dir auch dafür empfehlen.

Mich hat die Suche auf jeden Fall mehrere Tage und massig Nerven
gekostet :-/

Autor: Togger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Dieter,
nur ne Idee: Sektor wurde nicht komplett geschrieben.
Nach den 512 Bytes schreibst du 2 Dummy CRC´s z.b. "FF".
Danach empfängst du ein Responsebyte.
Es muss XXXXX101 sein, sonst wurden die Daten nicht geschrieben!
Klappt bei mir prima, arbeite auch mit 3 Dioden an 5V.
Aber um künftig Fehler auszuschliessen werde ich auch einen
Festspannungsregler einsetzen, weil Alex hat Recht: die Fehlersuche
kann sehr nervig sein ;-)

lg Ralf

Autor: DieterW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Antworten.
Bisher konnte ich den Fehler nicht finden. Das von Togger beschriebene
Responsebyte werte ich aus und es enspricht auch den Vorgaben. xx101
bedeutet CRC Fehler und Busy. Sollte also stimmen.
Wie sieht der Aufbau der Lese und Schreibadresse aus? Der ist doch
identisch oder gibt es dort Unterschiede?
Braucht die Karte evtl. einen weiteren Befehl um die Daten entgültig
abzulegen?
Danke!
Grüße
Dieter

Autor: Togger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein Dieter,
XX101 bedeutet, dass die Daten (korrekt) übernommen wurden, dh. es
kamen auch 512 Bytes an, weil erst dann wird geschrieben.
Die Adresse muß am Sektoranfang beginnen, also 0, 512, 1024, ...
Nach dem Responsebyte würde ich empfehlen noch in einer Schleife auf
"FF" (not busy) zu warten.
Bei manchen Karten geht es auch ohne, ist aber sicherer und könnte auch
der Fehler sein.

lg Ralf

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an Togger,
hast du dein code mit IAR ( spi) von msp430?
ich brache paar tips.
danke

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den Datenblaettern steht das sich direkt an der Karte ein Kondensator
von 1uF befinden soll. Viele Karten funktionieren auch wenn man das
etwas lockerer sieht. Manche dagegen nicht.

Ausserdem kann man bei SPI auch CRC einschalten. Danach schlaeft man
deutlich besser. .-)

Olaf

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wofür sind die PINS: WP und CD, ?

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WriteProtect - kann man problemlos ignorieren
CardDetect - für "mechanisch gefundene Karte"

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Rolf.
ich habe diese Pins nicht angeschlossen. beim senden den ersten block
512 bytes, was bekomme ich als antwort? ein 0101? ist das richtig?

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt drauf an. Zunächst sollte 0 zurückkommen und der erste Wert
ungleich 0 ist die Antwort der Karte.

Autor: Hans Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir jemand aushelfen mit einer SPI Library in C ?

Danke!

Autor: didi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
halo klaus,
schau einfach in :
www.ti.com
dann aus microcontroller gehen, da sind paar exempel

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.