Forum: Mikrocontroller und Digitale Elektronik Spezeller Bus Expander (SPI)


von Detlev Neumann (Gast)


Angehängte Dateien:

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

von Dirk F (Gast)


Lesenswert?

47HCT125

von Peter D. (peda)


Lesenswert?

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

von Dirk F (Gast)


Lesenswert?


von Detlev Neumann (Gast)


Lesenswert?

Ja die Synchronisation erfolgt über denn Bitstrom und eine Zeit 
Bedingung

von Schlumpf (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
von Nils P. (torus)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Schlumpf (Gast)


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)

von pegel (Gast)


Lesenswert?

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.

von pegel (Gast)


Lesenswert?

Peter D. schrieb:
> der abgeschaltete
> Slave floatet lustig vor sich hin

Das ist natürlich richtig und muss mit PU und PD verhindert werden.

von Peter D. (peda)


Lesenswert?

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.

von pegel (Gast)


Lesenswert?

Das meinte ich mit PU und PD.

von Rudolph R. (rudolph)


Lesenswert?

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?

von Detlev Neumann (Gast)


Lesenswert?

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?

von SPI Guru (Gast)


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

von Rudolph R. (rudolph)


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?

Sicher, das reicht, ich war im wesentlichen neugierig und so kann ja 
kaum sonst noch jemand über das Problem stolpern. :-)

von Peter D. (peda)


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.

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
Noch kein Account? Hier anmelden.