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....
>Funktionieren tuts immer noch nicht. Ich gebs auf....
Kürze dein Kabel auf 10cm. Das könnte helfen.
@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?
> 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
@olaf: Aus meinem gaaanz ersten Post: ... hat direkt am Slot 10uF Elko parallel 1uF Tantal parallel 100nF Kerko ... :-)
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
Ähem, du solltest unmittelbar an der SD-Karte messen. Nach dem Spannungsteiler.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.