Spezeller Bus Expander (SPI)

Gast #5665302
Lesenswert?

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
Angehängte Dateien:
Gast #5665375
Lesenswert?

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)
Gast #5666747
Lesenswert?

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).
#5667598
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren