Uart oder SPI

Gast #4472871
Lesenswert?

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.
#4472891
Lesenswert?

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 ?
Gast #4472930
Lesenswert?

> 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.
(Firma: Vescomp) #4473736
Lesenswert?

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 ?
#4473754
Lesenswert?

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.
Gast #4473777
Lesenswert?

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.
#4473787
Lesenswert?

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.
Gast #4481635
Lesenswert?

>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!

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