Forum: Mikrocontroller und Digitale Elektronik MMC an AVR (Data start token problem)


von Wiesi (Gast)


Lesenswert?

Wie der Betreff schon sagt, versuche ich eine MMC an einem AVR (Mega32) 
zu betreiben.

MMC deshalb, weil ich keine SD Karte da habe und ich erst morgen eine 
besorgen kann.

Die Initialisierung funktioniert (CMD0, CMD1).

Wenn ich aber versuche das CID oder CSD register zu lesen, dann erhalte 
ich statt des 0xfe Start-Tokens immer 0xfc.
Danach kommen Daten, die Menge könnte sogar passen (sind 15 oder 16 
byte, wenn ich mich nicht verzählt habe).

Ein Lesetest mit einer (mit dd) mit Testdaten gefüllten Karte zeigt, 
dass zwar irgendetwas gelesen wird (ebenfalls kommt 0xfc statt 0xfe) 
aber es ist nur Müll, allerdings reproduzierbar immer der gleiche.

AVR an 5V, Spannungsteiler sind 560 Ohm und 1kOhm (sollte bei 5V 3.2V 
ergeben).

In einem Thread habe ich gelesen, dass das Verhalten durch 
unzuverlässige Betriebsspannung hervorgerufen werden kann. Ich kann mir 
das aber nicht vorstellen - die Karte hängt an einem 3.3V 
Spannungsregler (317er) und hat direkt am Slot 10uF Elko parallel 1uF 
Tantal parallel 100nF Kerko.

Die Empfangenen Daten sind übrigens korrekt (insofern, als dass über SPI 
das richtige gelesen wird), Oszi bestätigt die ominösen 0xfc.

Software ist Marke Eigenbau.

Vielleicht hat irgendwer eine Idee, was falsch laufen könnte.

   Wiesi

von Wiesi (Gast)


Lesenswert?

So. Ich hab jetzt mal Ulrich Radigs Software probiert und 
erwartungsgemäß
hat die das gleiche Problem wie meine, sie hängt an der Stelle wo auf 
0xfe gewartet wird.

Den Spannungsteiler hab ich sicherheitshalber auch noch mal geändert, 
sodass jetzt 3.4V (lt. Rechnung und auch Oszi) am Eingang der MMC Karte 
liegen.

Ich hab hier 2 MMCs zum Test: Eine aus einem Medion PocketPC und eine 
aus einer Canon Digicam (steht Canon drauf, auf der MMC).

Das Timingproblem wie in Beitrag "MMC zeigt im SPI-Modus seltsames Verhalten" 
beschrieben habe ich übrigens nicht, die MMC ändert den Ausgang brav bei 
der fallenden Flanke.

Ich hoffe die SD-Karten funktionieren, hab aber da nicht allzu viel 
Hoffnung.

  Wiesi

von Wiesi (Gast)


Lesenswert?

Nun ja. Ich hab jetzt mal die Versorgung direkt an der MMC gemessen. 
Mehr als +-100mV Störungen sind da nicht drauf, das sollte passen.

Die Signal (auch an der MMC gemessen) haben eine rise/fall time von ca 
30ns. Eigentlich recht schnell trotz der 50cm Flachbandkabel und 
SPannungsteiler (Spannungsteiler am MMC-Karten-Ende).

Funktionieren tuts immer noch nicht. Ich gebs auf....

von holger (Gast)


Lesenswert?

>Funktionieren tuts immer noch nicht. Ich gebs auf....

Kürze dein Kabel auf 10cm. Das könnte helfen.

von Wiesi (Gast)


Lesenswert?

@holger
Das Problem ist, das ich das nicht (vernünftig) kann, weil es sich durch 
dasd Gehäuse so ergibt.

Außerdem (ich möchte jetzt nicht zwar trotzig sein, ...) sehen die 
Signale gut aus, daher kann ich mir nicht vorstellen dass es was bringt.

Falls es morgen mit SD-Karte auch nicht geht, werde ich das aber testen.

Achja SPI ist auf 125kHz eingestellt, das kleinste was bei dem Quarz 
möglich ist.

von Wiesi (Gast)


Lesenswert?

Soda. Natürlich hat es mit der SD-Karte auch nicht funktioniert, war ja 
klar (Murphy).

Ich hab die Kabel gekürzt und jetzt funktionierts.

Wäre nett, wenn mit jemand erklären könnte warum, weil ich kann auf dem 
Oszi beim besten Willen keinen Unterschied im Timing feststellen.

@holger: Danke.

  Wiesi

von olaf (Gast)


Lesenswert?

> Wäre nett, wenn mit jemand erklären könnte warum, weil ich kann
> auf dem Oszi beim besten Willen keinen Unterschied im Timing
> feststellen.

Ist das Ossi auch gut? Also Digital und so mindestens 1Gs?

Ich hab uebrigens auch 50cm Kabel laufen. Sind aber an beiden Seiten 
Bustreiber und Terminierung dran.

Oh...und 100mV Stoerung auf VCC finde ich auch schon heftig....

Olaf

von Wiesi (Gast)


Lesenswert?

Nun, Das oszi ist ein Tek 2014 mit 1GS, 100MHz BW.

Das Problem ist natürlich, dass ich (weil die Speichertiefe nicht so 
groß ist) immer nur entweder eine flanke oder das Ganze byte anschauen 
kann.

Bustreiber hab ich keine dran. Die eine Hälfte vom Spannungsteiler ist 
auf der Platine mit dem ATMega der andere Widerstand ist beim Cardslot. 
- Das sollte etwas als Terminierung wirken.

Ich muss schauen, ob ich noch irgendwo 74HC14 rumliegen hab, dann bastel 
ich die am Card-Slot Ende noch rein. Mal schauen obs dann geht.

PS: Ich hätte nicht gedacht, dass SPI so kritisch ist, wobei ich mich 
frage, was da jetzt wirlich der kritische Teil ist, denn 125Khz Spi 
Frequenz ist ja nicht die Welt, da gehen sich die Bitzellen leicht aus 
(bestätigt das oszi).

Oder müssen die Flanken unbedingt so steil sein? Das verstehe ich aber 
dann auch nicht, weil die "optimale" Pegelwandlerschaltung mit 2 
Transistoren/Leitung (a la Ulrich) bringt sicher auch nicht mehr 
Flakensteilheit (weil bei Bip. geht ohne Speedup Kondensator usw. 
normalerweise nichts weiter...).
Außerdem hab ich da ja auch fast keinen Unterschied gemessen (vllt. 
+-5ns).

  Wiesi

von olaf (Gast)


Lesenswert?

> Nun, Das oszi ist ein Tek 2014 mit 1GS, 100MHz BW.

HM..gut. Falls du nicht gerade einen 1:1 Tastkopf benutzt sollte man da 
eigentlich schon was sehen. Oder rauscht die Muehle auch so uebel wie 
die billigen Gurkenteile von Tek?

> Das Problem ist natürlich, dass ich (weil die Speichertiefe nicht so
> groß ist) immer nur entweder eine flanke oder das Ganze byte anschauen
> kann.

Eine Flanke sollte reichen. Schliesslich sind die es ja die stoeren. Und 
schau dir auch mal an wie die anderen Signale ausschauen wenn im 
Nachbarkabel die Flanke hochgeht. Oh..und ich hoffe du hast die Signale 
im Kabel halbwegs intelligent verteilt. Also z.B einmal Masse zwischen 
SCK und den Datenleitungen.

Schau dir mal CLK an und haeng da mal 100R + 100pF dran. Das habe ich 
bei mir an jeder Leitung auf beiden Seiten des Busses.

> Bustreiber hab ich keine dran. Die eine Hälfte vom Spannungsteiler ist
> auf der Platine mit dem ATMega der andere Widerstand ist beim Cardslot.
> - Das sollte etwas als Terminierung wirken.

Also mit so einem Murks wuerd ich garnicht erst anfangen. Mach da ein
74LVX125 mit 3.3V als Pegelwandler zwischen.

> denn 125Khz Spi Frequenz

Die Frequenz ist nicht so entscheidend, die Flankensteilheit stoert. Ich 
denke mal besonders der Datenausgang der Karte wird auch sehr kritisch 
sein weil die heutigen Karten ja sehr schnell sein sollen. Und es ist 
dabei vollkommen egal ob du das ausnutzt oder nicht.
Du kannst natuerlich die Frequenz runternehmen und dann die Flanken mit 
ordentlich C runterpruegeln, aber ob das so gesund ist....

> "optimale" Pegelwandlerschaltung mit 2
> Transistoren/Leitung (a la Ulrich)

Kenn ich nicht. Aber es gibt eine alte Applikation von Sandisk wo sie 
das in der Tat mal mit Transistoren gemacht haben. Habe ich mal 
probiert. Hat mich aber nicht vom Hocker gehauen. Ausserdem ist ein TTL 
Ic schoener als soviel Huehnerfutter auf der Platine.


Olaf

von Simon K. (simon) Benutzerseite


Lesenswert?

Schonmal dran gedacht, dass es auch Probleme mit der Synchronität bei 
Clk/Daten/CS geben kann?

von olaf (Gast)


Lesenswert?

> Schonmal dran gedacht, dass es auch Probleme mit der Synchronität
> bei Clk/Daten/CS geben kann?

Da sollte man aber bei genuegend langsamen Takt in den Griff bekommen.

Man koennte vielleicht noch die Frage aufwerfen ob der OP am ende seines 
langen Kabels auch einen 100nF an der Karte hat. Aber das wuerde ich 
niemals machen weil man damit ja unterstuellen wuerde das er keine 
Ahnung hat. :-]

Olaf

von Wiesi (Gast)


Lesenswert?

Naja, bei CLK/Daten/CS ist vorne und hinten laut oszi eine schöne halbe 
Bitzelle Zeit, da ist also nichts knapp.

Ich hab jetzt eine 74HC14 auf dem Kartenslot-Ende nach dem 
Spannugnsteiler reingelötet und es funktioniert jetzt auch mit dem 
langen Kabel.

Für mich sieht es so aus, als ob die SD-Karte einfach eine enorme 
Flakensteilheit auf dem CLK braucht. (Sowas kennt man ja von CPLD/FPGAs 
die da zuweilen auch zickig sein können).

Das ganze sieht jetzt so aus:

     .--- 2.7k --.
     |           |                             '14   '14
Mcu -*--- 560 ---*----....   Kabel ....-----*--|>o---|>o---- MMC
                                            |
                                           1k
                                            |
                                           ---

Wobei ich mir die 2.7K wahrscheinlich hätte sparen können, aber ich hab 
sie drin lassen (hab ich mal reintan, weil ich dachte die Pegel wären zu 
knapp).

Der Daten-Output Der MMC wird nicht ge-repeatet, sondern geht direkt 
über das Kabel zum ATMega.

Bei der CS-Leitung befinden sich die 560 und 2.7k Widerstände auch auf 
dem MMC Slot. (Weil ursprünglich die 560 Ohm Schutzwiderstände waren und 
nur
auf dem SPI Leitungen vorgesehen waren).

  Wiesi

von Wiesi (Gast)


Lesenswert?

@olaf:

Aus meinem gaaanz ersten Post:
... hat direkt am Slot 10uF Elko parallel 1uF Tantal parallel 100nF 
Kerko ...
 :-)

von Wiesi (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang ein Bild vom Oszi, nur für den Fall dass es jemanden 
interessiert:

Die weißen kurven sind mit langem Kabel die anderen mit kurzem.
Türkies Di, geld CLk, alles am Karten-Ende gemessen. Wie man sieht, ist 
überall genug luft.

Das Bild ist noch ohne '14er, sieht aber bei der Zeitbasis auch mit 
nicht anders aus.

  Wiesi

von Simon K. (simon) Benutzerseite


Lesenswert?

Ähem, du solltest unmittelbar an der SD-Karte messen. Nach dem 
Spannungsteiler.

von Wiesi (Gast)


Lesenswert?

Hab ich ja. Das war mit "am Karten-Ende" gemeint.

von Simon K. (simon) Benutzerseite


Lesenswert?

Wiesi wrote:
> Hab ich ja. Das war mit "am Karten-Ende" gemeint.

Ups, sorry. Stimmt natürlich. Habe die unteren Flanken mit der 
Einstellung 5V/Div als 5V/0V Flanken gelesen. Nicht lange genug aufs 
Bild geschaut ;)

PS: Dann ist es in der Tat komisch, warum deine SD-Karte nicht läuft. 
Was sagen denn die Störungen auf VCC jetzt? 100mV ist in der Tat nicht 
so wenig - wobei mit deiner Kondensatorgruppe das fast nicht sein kann.. 
Oder irre ich?

von Wiesi (Gast)


Lesenswert?

@Simon und allgemein um die Sache etwas aufzuklären:

Nun da die Masse-Klemme des Oszis nicht direkt an der MMC gehangen hat 
sondern am zentralen Massepunkt habe ich da natürlich den Spannunsabfall 
über die Leitung mitgemessen.
Aber das kann es nicht gewesen sein weil es jetzt (mit 7414 dazwischen) 
geht.

Da die Initialisierung immer funktioniert hat, interpretiere ich das 
ganze so:

Für die Initialisierung darf man den Takt bekanntlich höchstens mit 
400kHz takten, weil in einem Bus-System mit mehreren Karten zu diesem 
Zeitpunkt mit Pullups gearbeitet wird. Folglich muss die Karte auch 
"nicht so perfekte" Signale akzeptieren, um arbeiten zu können.

Nach der Initialisierung werden in der Karte aber die Push/Pull Ausgänge 
aktiviert und man kann schneller takten, etc.
In diesem Betriebszustand verlangt sie anscheinend extrem steile 
Flanken.

Diesen Verdacht erhärten auch diverse Datenblätter von SD/MMC Karten
(z.B. http://www.kingmaxdigi.com/product/MMC.pdf S.9), wo z.T. eine 
maximale (!) rise/fall time von 10ns (!) verlangt wird, üblicher sind 
anscheinend eher 30ns. Das ist nicht mehr lasch, das bringt die HC Logik 
gerade so.
Ob das für den SD oder SPI Modus oder beides gilt kann ich dem 
Datenblatt nicht entnehmen.

Ich vermute, dass ich mit den kurzen Kabel einfach knapp unter der 
Grenze war und mit dem langen knapp darüber. (Weil, siehe oberes Post 
nur ein paar ns Unterschied waren.)

Fazit:
Wenn ich sowas nochmal mache, dann baue ich gleich richtige Pegelwandler 
ein. Da ich aber keine da habe, habe ich eben die oben skizzierte 
Spannungsteiler+7414 Variante die auch mit 50cm Kabel recht gut zu 
funktionieren scheint, soweit ich bei meinen Tests jetzt gesehen habe.

Alles andere, also nur Spannungsteiler oder die diskrete Variante mit 
Bip-Transistoren (die ist auch nicht sehr schnell) würde ich meiden, da
ist man hart am Limit.

  Wiesi

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.