Hallo, ich möchte mehrere Module miteinander verbinden. Nehme ich dafür UART oder SPI? Wo genau sind da die Unterschiede? Alle Module werden per einfacher Steckverbinder relativ kurze Wege zur Hauptplatine besitzen und alle Module sollen auf derselben BUS-Verbindung lauschen und nur innerhalb einer strickten Master-Slave-Kommunikation sprechen dürfen, d.h. auf Anforderung.
Wie schnell ? UART ist relaxter, weil ein Buffer mehr vorhanden ist. Das Handling ist einfacher. Der SPI Slave ist beschissen. Der muss extrem schnell reagieren koennen. Master Slave bedeutet, der eine bleibt der Master. Im Falle von SPI, gibt der Master den Clock vor. Wie weiss der, dass der Slave gelesen & geschrieben hat ? Eine Handshake Leitung ?
> Der SPI Slave ist beschissen. Kommt wohl auf den konkreten Chip an. > ich möchte mehrere Module miteinander verbinden Eine direkt UART Verbindung entfällt dann. Aber mit RS485 Treibern kannst du einen Bus bauen. Die Frage ist, ob du den zusätzlichen Aufwand treiben willst. I2C und SPI sind schon ohne zusätzliche IC's bus tauglich. SPI ist einfacher zu programmieren, finde ich. Benötigt jedoch mehr Leitungen.
Stefan U. schrieb: > SPI ist einfacher zu programmieren, finde ich. Dann hast Du entweder nur sehr langsamen Takt oder nur den SPI Master programmiert. SPI Slave ist aufwändiger weil der innerhalb definierter Zeit reagieren muss.
SPI Slave und Atxmega ist nicht beschissen :-) Das Stichwort lautet dabei DMA, super geeignet dafür.
:
Bearbeitet durch User
Jim M. schrieb: > Dann hast Du entweder nur sehr langsamen Takt oder nur den SPI Master > programmiert. SPI Slave ist aufwändiger weil der innerhalb definierter > Zeit reagieren muss. Wer sagt das ? SPI ist schneller und zuverlässiger als UART - bei kurzen Leitungen. Wenn man weiss wie, ist 1 Byte overhead nicht zu merken. Allerdings: a) Pro Modul eine SS-Leitung zusätzlich. b) Slave kann von alleine nichts melden. Aber bei 8Mb kann man die Module ziemlich schnell abfragen, oder ?
Stefan U. schrieb: > Eine direkt UART Verbindung entfällt dann. Eine direkte (=simple) UART-Verbindung geht in dem Fall auch, wenn diese entweder mit Open-Drain Ausgängen realisiert wird, oder die Slaves jeweils ihren Ausgangstreiber nur beim Senden einschalten. Ein Pull-Up, um den Bus im ungetriebenen Zustand auf definiertes High zu ziehen, muss dann ggf. natürlich vorhanden sein, nur nicht so klein, wie bei OD. Dann reicht für den gesamten "Bus" auch nur eine einzige, gemeinsame Leitung für Tx und Rx.
:
Bearbeitet durch User
Thomas E. schrieb: > oder die Slaves > jeweils ihren Ausgangstreiber nur beim Senden einschalten. Das muss man auch erst mal synchronisiert bekommen.... Man könnte sich beim TokenRing was abschauen. Ich wills mal positiv formulieren: Wenn der Ring läuft, hat man die Gewähr, dass alle Partner "wach" sind.
U. C. schrieb: > Das muss man auch erst mal synchronisiert bekommen.... Der "Kommunikus" kat ja schon im Eingangspost erwähnt, daß die Slaves jeweils strikt nur nach Anforderung durch den (vmtl. einzigen) Master antworten - da sehe ich eigentlich kein Problem, weil ja immer nur einer auf dem Bus quatschen kann und keiner unaufgefordert seinen Senf dazu gibt.
:
Bearbeitet durch User
>Der SPI Slave ist beschissen. Ja, bei AVR! Und das seit Jahren! (es gibt andere Controller die selbst bei Kosten von einigen Cents bessere SPI-IF haben)
>SPI Slave und Atxmega ist nicht beschissen :-) >Das Stichwort lautet dabei DMA, super geeignet dafür. Nö. Auch mit DMA erlaubt dieser uC (wegen des fehlenden SPI-WR-Buffers) keinen ununterbrochenen Datenfluss!
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.