Hallo - ich habe ein Problem mit der Initialisierung einer SD-Karte. Die Karte ist ueber einfache Spannungsteiler (1.8k+3.3k) an einen Atmel (Vsup=5V) gehaengt. Die 3.3V fuer die Karte kommen aus einem Spannungsregler. MISO aus der Karte geht direkt zum Atmel. Prinzipiell laeuft die Routine, eine alte SD-Karte konnte ich erfolgreich lesen und beschreiben. Mit einer neuen SD-Karte tritt folgendes Problem auf: Die Karte antwortet korrekt und will 0x01 ausgeben, da die Kanten allerdings sehr (!) ausgeschliffen sind kommt beim uC (Atmel) nur noch 0x00 an. Das Hardware-SPI-Timing ist schon auf minimaler Geschwindigkeit ((1<<SPR0)|(1<<SPR1),(0<<SPI2X)). Beim Messen mit dem Oszi sehe ich die Flanken der Karte: Mehr als 10us Anstiegszeit! Bei 3.3V und wenn ich einen Widerstand gegen Masse haette von ca. 1kOhm wuerde mir irgendwo eine Kapazitaet von 1nF (!) so eine Flanke ergeben. Es haengt nur der uC und die Karte am MISO (naja... und das Oszi). Die Leitung ist <10cm. Das hat mit den Specs nun wirklich nix mehr zu tun. Kann doch garnicht sein - In den Specs heisst es, dass der Init langsamer sein muss als 400kHz. Wo in meiner Schaltung so eine Kapazitaet sitzen sollte ist mir voellig schleierhaft. Der angehaengte Oszi-Screenshot zeigt folgendes: CLK (5V, am AVR) und MISO (an SD-Karte) * links: Reste von der Init-Sequenz (...0x95) * kurz warten * 1 Dummy write (ich schreibe 0xFF) * dann kommt eine Antwort von der SD-Karte - ich erwarte ein 0x01, d.h. Idle-Mode ready. 0x01 kommt - total ausgewaschen - Atmel erkennt 0x00. * danach kommt fast SPI zum Display schreiben Nun einige Fragen: Gibt es irgendwie die Moeglichkeit den Hardware-SPI noch langsamer zu schalten? Oder muss ich dann 'von Hand' nen Software SPI bauen? Ich habe bereits den Pull-Up am MISO ein- und ausgeschaltet - kein Unterschied. Wenn Levelshifter: Welcher laeuft gut an der SD-Karte? Reicht es, dass ich nur MISO ueber nen Levelshifter laufen lasse? Gibt's nen einfachen Weg die aktuelle Flanke irgendwie zu verkuerzen? Sowas wie PullUp oder PullDown auf GND? Meine Versuche MISO mit 1kOhm auf 5V zu ziehen waren leider nicht erfolgreich... Die anderen Implementationen mit ner SD-Karte direkt am MISO von nem 5V-Atmel laufen ja auch... Uebersehe ich was? Gruesse - Ilja
Das mit den Widerständen haut in den seltensten Fällen immer gut hin. Wenn schon Pegelshifter, dann ALLE Signale shiften; idealerweise noch einer, der die Pins tristate schalten kann. Wird z.B MISO weiterhin direkt an den AVR gelegt, ist die Karte hin, wenn der ISP-Programmer dranhängt und kommuniziert. Es gibt u.a. für ca. 20 EUR nen fertigen Slot, der bereits alles draufhat bei Display3000. Der funktioniert bei mir perfekt und hat noch nie Probleme bereitet.
Hast du für die Messung einen 1:1 Tastkopf verwendet? Der schlägt mit erheblicher kapazitiver Last zu Buche. Sieht so aus, als ob der MISO-Ausgang dieser SD etwas schwach auf der Brust ist.
Ja, is nen 1:1 Tastkopf (Rigol-Trash). Die CLK habe ich am Atmel abgegriffen (sieht man ja: 5V) das MISO ist direkt von der Karte (sieht man ja auch die ~3.nochwas V). Die Level sind okay, denn wenn ich spaeter lese, kommen auch brav die 0xFF zurueck (trotz 3.3V out). Cheers Ilja
Guest schrieb:
> Das mit den Widerständen haut in den seltensten Fällen immer gut hin.
Hier geht es um die MISO-Leitung, also 3,3V raus 5V rein. Diese Leitung
hat (hoffentlich) keine Spannungsteiler dran ;-).
Ilja schrieb:
> Ja, is nen 1:1 Tastkopf (Rigol-Trash).
Dann schalte um auf 10:1. Tastköpfe in 1:1 Einstellung sind nur selten
wirklich sinnvoll zu gebrauchen, oft beeinflusst dessen niedrige
Geschwindigkeit und hohe kapazitive Last erheblich die Messung.
Apropos Trash: Die Testecs sind zwar besser, aber für den hier
betrachteten Zeitrahmen sind die Rigols ok.
Hi A.K. - Yup - ich habe jetzt nochmal 1kOhm zwischen MISO und +5V gehaengt und den Tastkopf auf 10:1 umgestellt. Leider immer noch das gleiche Ergebnis (siehe Screenshot). Aber die Init funktioniert ja leider auch nicht wenn ich den Tastkopf abklemme. Welchen Levelshifter benutzt den Display 3000. Gibt's nen Plan von deren Board? Was ist das mit dem Tristate auf deren Website. Ist das wirklich noetig? Habt ihr nen Levelshifter den ihr empfehlen koennt? Gruesse Ilja
Ilja schrieb:
> Yup - ich habe jetzt nochmal 1kOhm zwischen MISO und +5V gehaengt
Lass das lieber. Denn so fliesst Strom in den Ausgang der mit 3,3V
betriebenen SD rein. Das muss die nicht unbedingt mögen.
Wenn bereits das nackte unverfälschte MISO-Signal der SD so verquast
aussieht, dann ist ein besserer Levelshifter auch keine Lösung. Denn
auch der wird aus Scheisse kein Gold machen.
Hi A.K. Klar - sicherlich kann ich aus der Flanke nicht eine Anstiegszeit von 1ns rauszaubern. Das sehe ich ja ein... Die Frage ist nur was ich jetzt idealerweise machen soll. Die Erlaeuterungen zur Flankensteilheit auf Display3000 zum Levelshifter sind schon plausibel - also wuerde ich dann doch mal vermuten, dass nen Levelshifter was bringen koennte. (huestel... welcher Levelshifter?) Ich habe auch schon versucht den Atmel beim SPI auf die hintere Flanke detektieren zu lassen ((1<CPHA)) - das hat's leider auch nicht gebracht. Im Moment sehe ich nur alles noch langsamer zu machen, d.h. irgendwie einen Software-SPI 'zu Fuss' zu implementieren. Komisch, dass es aber scheinbar bei vielen Implementationen gut laeuft... und ich habe auch schon zwei verschiedene Karten die so ein 'flachbruestiges' MISO ausspucken. Ich habe auch nochmal die 3.3V mit 10nF an direkt an der Karte gebuffert. Hmm. Fuer Tipps und Tricks bin ich jetzt also mehr als offen... Ilja
Ilja schrieb: > Hi A.K. > > Klar - sicherlich kann ich aus der Flanke nicht eine Anstiegszeit von > 1ns rauszaubern. Das sehe ich ja ein... Die Flankensteilheit zu erhöhen ist kein bischen schwierig. Die Frage ist eher der Zeitpunkt der Flanke, denn wenn das Datensignal dem Taktsignal nur mit 5µs Verzögerung folgen kann, dann wird das nix mit einer ordentlichen Datenrate.
Naja - ich hoffe ja eigentlich, dass die Initialisierung lahm ist und spaeter das Schreiben und lesen ein wenig schneller. (So verstehe ich das wenigstens aus den SD-Specs) Gruesse Ilja
Hmm - hier also nochmal ein Screenshot von einer anderen SD-Karte: Die Flanke ist Faktor 10 kuerzer! Scheinbar liegt es nicht an der Platine oder sonstwas - es scheint NUR an der SD-Karte zu haengen. Irgendwelche Ideen da nochmal ein wenig langsamer zu lesen oder irgendwelche Delays einzubauen? Ich habe natuerlich schon Beitrag "SD-Card über SPI - manche gehen, manche nicht." angeschaut, aber leider bringt mich das auch nicht weiter. Gruesse Ilja
Wie siehts denn mit der Funktionalität der "langsamen" Karte in anderen Geräten aus? Digicam etc. Funktioniert die da? Wenn ja, genau so schnell wie ne andere?
Ja, alles kuschelig. Die Karten sind schnell und gut.. Ich denke aber. dass die Karten die nicht laufen (Sandisk Ultra II 15MB/s und eine NoName (disk2go.com)) im Compi ohnehin nicht im SPI Mode laufen. Die Karte die laeuft ist vermutlich von 1999, eine Canon 16MB. Gruesse Ilja
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.