Forum: Mikrocontroller und Digitale Elektronik Uart oder SPI


von Kommunikus (Gast)


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.

von Pandur S. (jetztnicht)


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 ?

von U. C. (Gast)


Lesenswert?

Kommunikus schrieb:
> Nehme ich dafür UART
> oder SPI?

Warum steht I2C nicht zur Wahl....?

von Stefan F. (Gast)


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.

von Jim M. (turboj)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Stimmt, bisher habe ich nur SPI Master programmiert.

von G. S. (varda)


Lesenswert?

SPI Slave und Atxmega ist nicht beschissen :-)

Das Stichwort lautet dabei DMA, super geeignet dafür.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


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 ?

von Thomas E. (picalic)


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.

: Bearbeitet durch User
von U. C. (Gast)


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.

von Thomas E. (picalic)


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.

: Bearbeitet durch User
von MCUA (Gast)


Lesenswert?

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

von MCUA (Gast)


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!

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.