Hallo Zusammen ich hab da eine spezielle Anforderung eventuell kann mir einer von euch weiterhelfen. Normalerweise mache ich das teilen eines SPI Busses an einer MCU über die CS Pins. Dummer weise haben meine beiden Slave die ich an die SPI hängen möchte keine CS Pins. Jetzt sagen bestimmt die meisten benutze doch einen Multiplexer und Steuer die CS Leitungen per GPIO. Ja könnte man machen, aber in meinem jugendlichen Leichtsinn möchte ich die HW Funktionalität meines MCU maximal Ausnutzen. Daher schaut euch doch mal mein Bild 1. an. Gibt es für das dort dargestellte Prinzip eine Lösung bzw. IC den man verwenden könnte. Gerade bei schreiben dieses Beitags kommt mir die Idee kann man nicht einfach zwei Switches benutzen und die Enable Leitung an den CS1 und CS2 der MCU Hardware (siehe Bild 2.). Hat jemand von euch hierfür eine Bauteil Empfehlung? Danke und euch eine schöne Weihnachtszeit und einen guten Rutsch ins neue Jahr Gruß Detlev
Detlev Neumann schrieb: > Dummer weise haben meine beiden Slave die > ich an die SPI hängen möchte keine CS Pins. Wie synchronisieren sie sich dann auf den Bitstrom. Warten sie auf ein führendes 1-Bit als Starterkennung (wie z.B. der MM5450).
Ja die Synchronisation erfolgt über denn Bitstrom und eine Zeit Bedingung
Schreiben in die Slaves: Takte kombinatorisch gaten. SlaveTakt = MasterTakt & /CS Lesen aus den Slaves: MISO Leitungen über Tristate Buffer an den Master führen, die über CS gesteuert werden.
Ein 74HC257 ist geeignet. Ein MUX führt die beiden MISO zusammen und 2 MUXe erzeugen die beiden SCK. Ob der inaktive 0 oder 1 ist, kann man festlegen. Sie dürfen nur nicht beim Umschalten wackeln. MOSI kann man direkt an beide Slave führen, ohne SCK-Flanke ist der egal.
:
Bearbeitet durch User
Ein CD4053 erledigt das Umschalten der drei Signalleitungen über ein GPIO-Pin. Einer der beiden Slaves ist dann zwar immer mit deinem µC verbunden, aber solange Du nichts sendest ist das ja egal.
Nils P. schrieb: > Ein CD4053 erledigt das Umschalten der drei Signalleitungen über ein > GPIO-Pin. Ganz schlechte Idee. Das ist ein Analogschalter, d.h. der abgeschaltete Slave floatet lustig vor sich hin und macht Unsinn.
Ergänzend: In dem konkreten Fall sind beide Lösungen (MUX oder "Gating") gleichwertig. Sollten es allerdings einmal mehr als 2 Slaves sein, dann ist man mit der Methode des "Gating" besser beraten. Da diese Schaltung einfach beliebig erweitert werden kann. Beim MUXen hingegen muss dann komplett umdesigned werden (nur so als Ergänzung)
Oder zwei xx126. So etwa, nur 126: https://i.stack.imgur.com/EW1aZ.png Dann ist alles was nicht selektiert ist, hochohmig und nicht invertiert.
Peter D. schrieb: > der abgeschaltete > Slave floatet lustig vor sich hin Das ist natürlich richtig und muss mit PU und PD verhindert werden.
pegel schrieb: > So etwa, nur 126: > https://i.stack.imgur.com/EW1aZ.png > > Dann ist alles was nicht selektiert ist, hochohmig Und genau das ist das Problem. Mindestens SCK muß mit dem Ruhepegel getrieben werden. Man braucht also noch zusätzliche Pullups oder Puldowns je Slave.
Detlev Neumann schrieb: > Dummer weise haben meine beiden Slave die > ich an die SPI hängen möchte keine CS Pins. Okay, was für Chips sind das genau?
Rudolph R. schrieb: > Okay, was für Chips sind das genau? Das sind genau genommen zwei eigene Kreationen MCU mit MISO/MOSI Interface Leider hat der Frühere Entwickler kein CS Leitung herausgeführt und ich kann am Design nichts ändern. Reicht dir das?
Hallo, 1.) Du brauchst nicht alle 3 Leitungen umzuschalten. CLK und MISO reicht. Da SPI ein CLK-synchrones Protokoll ist, 'verarbeitet' der Slave nur MOSI Daten, wenn er dazu auch eine CLK-Flanke sieht. 2.) Die Richtung von CLK und MISO ist entgegengesetzt. D.h deine Bilder sind falsch (außer bei analog Switches, die das Signal in beide Richtungen Übertragen. 3.) Für die Slave-Clks reicht jeweils ein UND-Gatter mit 2 Eingängen. An den einen Eingang kommt Master-CLK an den anderen der Slave-CS. Der Ausgang geht zum CLK-Eingang des Slaves. Für den Rückweg (MISO), nimmt man die schon angesprochenen Tristate-Treiber 74xx126!. Alle Ausgänge verbinden und an MISO vom uC. An die Eingänge kommen dann MISOs der Slaves. Mit dem CS-Signal wird das UND Gatter und der OE-Pin des jeweiligen Tristate-Treibers verbunden. Das gilt nur für high-aktive CS Signale. Typischerweise sind die aber low-aktiv. Dann tut's ein 74xx125 und ein NOR-Gatter. 4.) Wenn du noch mehr Slaves ansteuern willst, solltest du über einen 2:4 Mux für die CS-Signale nachdenken (z.B. 74xx138 139 146 155 156).
Detlev Neumann schrieb: > Das sind genau genommen zwei eigene Kreationen MCU mit MISO/MOSI > Interface > Leider hat der Frühere Entwickler kein CS Leitung herausgeführt und ich > kann am Design nichts ändern. Reicht dir das? Sicher, das reicht, ich war im wesentlichen neugierig und so kann ja kaum sonst noch jemand über das Problem stolpern. :-)
Detlev Neumann schrieb: > Das sind genau genommen zwei eigene Kreationen MCU mit MISO/MOSI > Interface > Leider hat der Frühere Entwickler kein CS Leitung herausgeführt und ich > kann am Design nichts ändern. Reicht dir das? Das ist natürlich eine riesen Dummheit, da würde ich alles wegschmeißen, denn zuverlässig kann das kaum laufen. Das SPI eines MC kann nicht auf ein Startbit triggern, sondern braucht zwingend das /SS zur Synchronisation. Man kann als absolute Notlösung von hinten durch die Brust ins Auge einen Würgaround machen. Der Slave enabled SCK mit als Interruptpin und dieser wiederum stößt einen Timerinterrupt an. Wird dann eine Zeitlang keine SCK-Flanke erkannt, geht man davon aus, daß ein Byte zuende ist und disabled/enabled das SPI. Das SPI-Disable ist nämlich die einzige weitere Möglichkeit, den Bitzähler zurück zu setzen, wenn das /SS es nicht tut.
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.