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...
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.
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. :-)