Probleme mit MMC

G

Günther Jehle

Guest
Hallo!

Wir machen gerade ein Projekt, indem wir eine MMC als Speicher verwenden
möchten. Dazu haben wir uns die Spezifikation von SanDisk
(http://www.sandisk.com/pdf/oem/ProdManualMMCv5.2.pdf) und einige Projekte
angeschaut. Wir möchten auf jeden Fall die SPI Schnittstelle der MMC
verwenden, da diese wesentlich einfacher anzuwenden ist.

Was wir bis jetzt erreicht haben:
Wir können die Karte initialisieren (Kommando 0). Wir warten, bis die Karte
im Idle Zustand ist (bis Kommando 1 den Wert 0 liefert). Wir können
eigentlich alle Befehle anwenden, bis auf Lesen und Schreiben eines Sektors.

Problem:
Beim Lesen und Schreiben eines Sektors haben wir arge Probleme. Wir haben
einen Logikanalyser zur Verfügung und haben uns da das Timing angeschaut.
Beim Einlesen und Schreiben, scheint die Karte in einen anderen Zustand zu
gehen. Die Daten sind normalerweise byte-aligned, d.h. wenn wir 8 Takte
rausschreiben, bekommen wir beim ersten Takt das MSB und beim letzten das
LSB. Beim Ein- und Auslesen kommt uns aber vor, ist die Karte nicht mehr
byte-aligned. Schreiben eines Sektors geht (per Kartenleser nachgeprüft),
die Statusantwort ist dann aber falsch. Gelesen wird irgendwie Blödsinn
(aber ungefähr 512 Byte Blödsinn...). Dieser Blödsinn kann man
interpretieren wie man will (durch bitweise verschieben), es sind nicht die
geforderten Daten. Im Groben haben wir uns an
http://home.wtal.de/Mischka/MMC/ gehalten. Verschiedene andere Projekte sind
im Groben gleich. Mit Chipselect und 0xFF Bytes ( quasi NOP- Bytes) haben
wir so ziemlich alle Möglichkeiten durchprobiert.

Sollten wir hier nicht alle nötigen Daten zur Verfügung gestellt haben,
bitte Nachfragen. Mittlerweile glauben wir, dass die phsyikalische
Verbindung zur MMC nicht richtig ist. Hier haben wir einen 5 Volt AVR, eine
3.3 Volt Versorgung für MMC und die Signale von AVR zur MMC sind per
Spannungsteiler heruntergeteilt. Im Oszi sind die Signale schön steilflankig
und ohne Überschwinger.

Wer hat schon MMC per SPI angesprochen? Was könnten wir falsch gemacht
haben? Wir sind für jeden Hinweis sehr Dankbar!

Bis bald
Günther Jehle, Anton Zöchbauer, Siegfried Brandstätter, Walter Duda und
Christian Zillner
 
Hallo,

Problem hat sich jetzt endlich nach zwei Wochen gelöst. Problem waren die
Flanken (des Taktes). Wir hatten am Oszi schöne Flanken. Bei genauerem
Hinsehen hatten diese Flanken eine Anstiegszeit von 100ns. Unser Takt lauft
zur Zeit probehalber mit 20kHz, also weit von solchen Dimensionen
entfernt... hätten wir gedacht. Laut Datenblatt braucht die MMC eine
Flankenanstiegszeit von <10ns. Wenn das beachtet wird, läuft MMC echt super
und einfach. Ein idealer Speicher! Inwiefern sind SD-Cards kompatibel? Kann
man in unserer Konfiguration einfach so eine SD-Karte reinstecken und
funktioniert die dann (über SPI)?

Wieso muss die Flanke so steil sein? Ist hinter dem Pin ein Hochpass und die
Karte arbeitet intern asynchron?

Bis bald
Das Team
 
Hallo Günhter!
Wir hatten zwei Probleme in den Jahren mit den MMC:
1) Das Timing ist exakt einzuhalten (rasiermesserscharf).
2) Irgendwann hatten wir auf einmal Probleme mit der Taktflanke. Wir
übernahmen dann die Daten mit der anderen Flanke, auf einmal ging
alles wieder.

Leider habe ich genauere Hintergründe vergessen, alles zu lange her.
HTH
lg
Peter
 
"Günther Jehle" <aon.912972004@aon.at> wrote in
news:40a970ce$0$19096$91cee783@newsreader01.highway.telekom.at:

Inwiefern sind SD-Cards kompatibel? Kann
man in unserer Konfiguration einfach so eine SD-Karte reinstecken und
funktioniert die dann (über SPI)?
Normalerweise schon (bis auf irgendwelche Timingprobleme ;-). Am besten
SD-card slots bestücken, dann passen MMC und SDcards gleichermassen
(die SD ist dicker).

M.
--
Bitte auf mwnews2@pentax.boerde.de antworten.
 
Hallo,

Günther Jehle schrieb:

Ein idealer Speicher! Inwiefern sind SD-Cards kompatibel? Kann
man in unserer Konfiguration einfach so eine SD-Karte reinstecken und
funktioniert die dann (über SPI)?
Jain, es kommt auf die Initialisierung an, die ist etwas unterschiedlich.
soweit ich mich erinnere braucht eine Sorte einen bestimmten Pegel(wechsel)
an der CS-Leitung, bei der anderen kann man die auch fest verdrahten
(wenn man es nur mit einer Karte zu tun hat).

Wieso muss die Flanke so steil sein? Ist hinter dem Pin ein Hochpass und die
Karte arbeitet intern asynchron?
Ist doch wurscht, so sind die Specs und die sind eben nicht immer mit
gebastelten Lösungen (Spannungsteiler an Clock) einzuhalten.

Bei niedrigen Takraten kommt man mit einem Phillips 74LVC125 als
bidir. Pegelwandler aus wenn man nicht unbedingt die SOut-Leitung
tristaten muss.

Ich halte allerdings das Timing für alles andere als kritisch,
laut specs kann man sogar den Takt in weiten Grenzen während der
Übertragung varieren, hab ich aber nicht ausprobiert.

Viel wichtiger ist das man nicht auf die Idee kommt das 3,3V Ausgangs-
signal an einen 5V-CMOS-Eingang zu legen der min. 3,6V als High
sehen will. Dann funktioniert es vielleicht, vielleicht auch öfter,
aber eben nicht immer.
 
Hallo.

Wir haben auch ein Problem mit MMC/SPI.
Unsere Aufgabe ist es, ein Programm zu schreiben für einen
Microcontroller (ADUC 824) um eine MMC per SPI zu schreiben bzw. lesen.
Hat damit schon jemand Erfahrungen gesammelt? Muß nicht unbedingt mit
genau diesem Controller sein - alle Hinweise würden uns helfen.
Günther: Ist der Source Code von eurem Projekt irgendwo online?

Tobias.
 

Welcome to EDABoard.com

Sponsor

Back
Top