SPI, 2 Master und 1 Slave möglich?

#2953256
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.
#2953275
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.
Gast #2953278
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?)
Gast #2953317
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.
Gast #2953356
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.

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