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ß
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.
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...
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.
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?)
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.