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
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
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....
@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.
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
> 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
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
> 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
> 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
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
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
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?
@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