Hallo liebe Leute, ich habe eine kurze Frage und bin mir sicher, dass hier jemand eine Antwort weiß. Leider habe ich über die Suche nichts passendes gefunden. Ich habe eine Schaltung in der ein ATMEGA zwei(!) SD-Karten über SPI ansteuert. Diese werden aber nicht immer gebraucht. Wegen Akkubetrieb ist es mit dem Controller möglich beide Karten von VCC zu trennen (GND bleibt bestehen). Jetzt meine Frage: Was tun mit der CS-Leitung? Ist diese HIGH bedeutet das, dass die Karte nicht gewählt ist. Ist es aber sinnvoll den CS auf "1" zu lassen, wenn die Karte von VCC getrennt ist, oder könnte dies die Karte zerstören? Beide CS-Leitungen einfach auf "0" zu setzen ist aber vielleicht auch kritisch da ja dann eigentlich beide ausgewählt sind. Ok, sie sind von VCC getrennt, weshalb das eigentlich nichts machen sollte. Nur muss ich dann ja aufpassen beide CS (bzw. einer reicht) wieder auf "1" zu setzen BEVOR VCC wieder durchgeschaltet wird, da es ja sonst kracht... Man könnte sogar die Leitungen des Controllers während die Karte von VCC getrennt ist auf INPUT und somit hochohmig schalten... Was wäre also am Sinnvollsten? Danke für eure Antworten und viele Grüße, Erik
CS auf low bevor vcc weggenommen wird und zuerst wieder vcc und dann cs high, alles ndere wird dir die SD-Kartn zerstören. Und wenn kein Taktsignal kommt sind die karten ohnehin taub...
Wenn VCC der Karte weg ist dürfen keine Highpegel an ihren Pins liegen. Also CS, SCK, SI und SO. Die müssen per Multiplexer weggeschaltet werden. Macht man das nicht, stört das den gesamten SPI Bus weil mögliche interne Schutzdioden Leitungen mit High Pegel einfach auf Low ziehen.
Multiplexer? Den brauche ich glaube ich nicht...??? Ich habe am SPI nur die beiden Karten und VCC kann auch nur bei beiden gleichzeitig weggenommen werden. Es sollte doch dann reichen CS vor Spannungswegnahme per Controller auf "0" zu legen. SCK, SI sollten ja "0" sein, da der SPI nichts mehr überträgt. S0 sollte "0" sein, da die Karten aus sind, bzw. keinen CLK mehr bekommen. Oder stehe ich da aufm Schlauch?
>Oder stehe ich da aufm Schlauch?
Nö, du hast nur vergessen zu sagen das beide Karten
weggeschaltet werden. Ok, zieh erst CS auf low,
schalte SCK und SI auf Input. Dann Vcc weg.
Ok, vielen Dank.
Aber noch ne kleine Frage:
> schalte SCK und SI auf Input.
Sind die für MMC/SD-SPI nicht automatisch "0", wenn keine Übertragung
stattfindet? Warum dann noch auf Eingang schalten?
Danke...
>Sind die für MMC/SD-SPI nicht automatisch "0", wenn keine Übertragung >stattfindet? Warum dann noch auf Eingang schalten? Sicher ist sicher ;)
Nachtrag: und wenn ich nochmal drüber nachdenke solltest du CS vieleicht doch nicht auf low ziehen vorm ausschalten. Einfach auch als Input konfigurieren. Beim Einschalten hast du dann wieder ungefähr den Zustand wie nach einem Reset des uC. Gruss Holger
Hmmm... Danke holger. Ich denke, es sollte in beiden Fällen nichts passieren. Welchen Zustdand hat der SPI-Bus denn nun eigentlich, wenn keine Übetragung stattfindet?
>Welchen Zustdand hat der SPI-Bus denn nun eigentlich, wenn keine >Übetragung stattfindet? Gute Frage. Es gibt ja auch SPI Modi mit SCK IDLE High. Und wenn ich da noch mal drüber nachdenke ist es wohl eine gute Idee das SPI Modul komplett abzuschalten vor VCC weg. Also alle Highpegel weg von der Karte bevor VCC runtergeht. Nicht drüber nachdenken ;) Einfach machen. Wie gesagt: Sicher ist sicher.
Mal noch ne dumme Frage: Wenn ich jetzt alles auf Eingang schalte und es gäbe eine Datenübertragung auf dem SPI-Bus, d.h. es erscheint ne "1". Dann wäre das ja mit einer Aktivierung der internen Pullups gleichzusetzen. Gehe ich richtig, wenn ich behaupte, dass dann ja aber ein Strom durch den Pullup über die Karte nach GND fließen würde (=Zerstörung der Karten?)? Dies könnte mit CS als INPUT doch auch passieren, sollten deshalb die CS nicht doch vorher noch zusätzlich auf "0" gesetzt werden, oder?
Nein, die Pullups haben mehrere 100 Kiloohm. Da geht nix kaputt. Ausserdem hast du den SPI Bus doch gerade abgeschaltet !
>Nein, die Pullups haben mehrere 100 Kiloohm. Da geht nix kaputt. Laut Datenblatt i. d. R. 47 kOhm, aber trotzdem unkritisch >Wenn ich jetzt alles auf Eingang schalte und es gäbe eine >Datenübertragung auf dem SPI-Bus Naja, das liegt in Deiner Hand, du solltest natürlich schon wissen was Dein Programm macht; wenn ich die Hand im Toaster habe und dann einschalte... Stefan
Danke Stefan... ;-) Ich weiß schon was das Programm macht. Die Komplexität steigt aber stetig. Ich mache mir nur eben Gedanken darüber was passieren würde, wenn ich die Karten aus habe und dennoch irgendwo im Programm versehentlich versuche eine Karte per CS=1 zu adressieren. Laut eurer Aussage passiert nix, was ich beruhigend finde. Danke, jetzt kann ich besser schlafen ;-)
Nur mal ein paar Denkanstöße 1.Ist es wirklich notwendig Vcc auszuschalten? Wenn CS=high, dann brauchen die Karten doch nur ein paar µA. 2.Die Eingänge der Karte durch einen 74LVX puffern. Soweit ich weiß, vertragen die 74LVX auch bei Vcc=0V eine Eingangsspannung von bis zu 5V. 3.Die Eingänge der Karte mit einem Open Drain steuern und entsprechend Pullup-Widerstände auf Vcc der Karte legen. Wenn Vcc der Karte weg ist liegt damit an den Eingänger der Karte auch keine Spannung an.
@Obelix: Vielen Dank für deine Anregungen. > 1.Ist es wirklich notwendig Vcc auszuschalten? Wenn CS=high, dann > brauchen die Karten doch nur ein paar µA. Ich hatte den Fall, dass eine angeschlossene Karte obwohl CS="1" war im mA-Bereich Strom gezogen hat, eine andere verhielt sich korrekt. Es scheint also durchaus von den Karten abzuhängen. Mit dem Trennen von VCC bin ich auf der sicheren Seite. > 2.Die Eingänge der Karte durch einen 74LVX puffern. Soweit ich weiß, > vertragen die 74LVX auch bei Vcc=0V eine Eingangsspannung von bis zu 5V. Leider ist die Platine soweit schon fertig. Außerdem kommt es auf den minimalen Platz an. Ich muss versuchen jedes zusätzliche Bauteil zu vermeiden. Was ist denn an den zuvor beschriebenen Vorschlägen falsch? Da ich ja sowieso immer beide Karten zusammen ein- und ausschalte und sonst nichts am Bus hängt sehe ich da kein Problem. Mir kommt da aber noch eine ganz andere Idee... Den Controller in Tiefschlaf schicken. Dann sind doch eh alle PINs des Busses soweit abgeschaltet, oder? Wecken kann man ihn z.B. per Taster, also Interrupt. Wäre das was?
Ich habe die anderen Beiträge nur schnell überflogen. Ich kann dir also nicht sagen, ob da was falsch ist. Ich wollte nur ein paar Alternativer aufführen. :-)
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.