Forum: Mikrocontroller und Digitale Elektronik SPI, 2 Master und 1 Slave möglich?


von Tim (Gast)


Lesenswert?

Hallo,

kann man über SPI mit 2 Master (2 AVR's) auf 1 Slave (SPI Flash)
ohne weiteres zugreifen? Muss nicht gleichzeitig sein.

Ich habe an einen Multiplexer gedacht, aber vielleicht geht es
einfacher. Hat jemand schon sowas gemacht?

Gruß

von (prx) A. K. (prx)


Lesenswert?

Wenn du es schaffst, die beiden Master zeitlich exklusiv zu betreiben, 
dann ist das kein Problem. Ein inaktiver Master kann seine SCK/MOSI-Pins 
als Input definieren und damit aus dem Rennen nehmen. Die CS-Leitung 
kann als OpenDrain mit Pullup-Widerstand betrieben werden (Input vs 
Output=0). Bei SCK ist ebenfalls ein Pullup oder -down Widerstand 
erforderlich.

Komplizierter wird es, wenn die zeitliche Ausschliessung nicht 
gewährleistet werden kann.

von Tim (Gast)


Lesenswert?

Danke,

Ich wollte beide AVR's über 2 zusätzliche Pins verbinden. Wenn eine SPI
aktiviert, dann zieht der eine Pin auf '1'. So können diese sich
gegenseitig beobachten.

Ich werde es einfach versuchen...

von (prx) A. K. (prx)


Lesenswert?

Tim schrieb:
> Ich werde es einfach versuchen...

Falscher Ansatz. Eine Arbitrationmethode muss man vorher gründlich 
durchdenken, weil Konflikte, die nur etwas unwahrscheinlich aber nicht 
unmöglich sind, irgendwann garantiert auftreten. Aber nach Murphy 
garantiert nicht, während du das Verfahren testest.

Du musst den Fall betrachten, dass beide diesen Versuch gleichzeitig 
unternehmen. Oder fast gleichzeitig.

von Nachtaktiver (Gast)


Lesenswert?

Das geht durchaus aber die beiden Master müssen in der Lage sein über 
eine andere Leitung miteinander zu Kommunizieren. Du müsstest dann halt 
ein Protokoll entwerfen in welcher sich ein Master "anmeldet" den 
Datenvekehr annimmt und seine Daten empfängt und sich entsprechend 
wieder abmeldet. Der Zweite Master am SPI Bus geht währen dieser Zeit 
auf Standby und wartet so lange bis die andere Kommunikation 
abgeschlossen ist und den Datenvekehr für sich wieder übernehmen kann.

Es ist aber wahrscheinlich das es zu Zeitlichen Problemen gibt und die 
gesamte Kommunikation baden geht wenn in der Kommunikation zwischen 
beiden Mastern etwas schief läuft.

Vielleicht kannst du ja beide AVRs am selben Quarz 
betreiben/syncronisieren wodurch Timingprobleme ein wenig reduziert 
werden.


Was ist der Grund das du explizit 2 Master am Bussystem brauchst? (Kann 
es sein das die Datensätze im Flash mit der Zeit verändert werden und 
beide µCs Applikationsbedingt Zugriff auf diese haben müssen?)

von Sam P. (Gast)


Lesenswert?

Vielleicht macht eine Kette AVR1 -> AVR2 -> Slave mehr Sinn? AVR2 ist 
dann Slave für den AVR1 und reicht dessen Anfragen einfach transparent 
durch. Das macht die Synchronisation erheblich einfacher.

Synchronisation von parallelen Abläufen ist ein Arschloch, wenn man 
damit keine Erfahrungen hat. Unterschätze das nicht. Und wenn du diesen 
Rat befolgst, wirst du die Probleme trotzdem noch unterschätzen.

von (prx) A. K. (prx)


Lesenswert?

Sam P. schrieb:
> Vielleicht macht eine Kette AVR1 -> AVR2 -> Slave mehr Sinn?

Blöderweise wechseln die Pins ihre Richtung abhängig davon ob Master 
oder Slave.

von amateur (Gast)


Lesenswert?

Ist es denn wirklich unumgänglich 2 Master zu implementieren?

Beispiel:
Ich will wissen wie's Dir geht - also frage ich.
Bei der Gelegenheit sage ich Dir gleich wie's mir geht.
Sowohl für die Senderoutine (Master) als auch für die Empfangsroutine 
gibt es Unterbrechungen. Somit bekommt dein eigentliches Programm gar 
nichts von der Quasselei mit. Natürlich musst Du auf der Masterseite, am 
Besten durch einen Timer, sicherstellen, dass regelmäßig die beiden 
Zustände aktualisiert werden.
Darüber hinaus: Wollen beide mit einem Dritten Quatschen, so hilft nur 
das Durchreichen der Daten durch den ersten Slave. Da müsste dann, 
notfalls ein Software Master implementiert werden. Wie auch S.P. 
geschrieben hat.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Guck ob du an nen I2C Flash kommst, der I2C/TWI kann schon Multimaster.
Ansonsten quasseln beide AVRs per I2C Untereinnader und einer hat den 
SPI Flash anner Backe.

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.