Forum: Mikrocontroller und Digitale Elektronik Unterschied UART <--> SPI


von Neulin_g (Gast)


Lesenswert?

Hallo,

ich versuche zu verstehe den Unterschied zwischen UAST und SPI zu 
verstehen und wäre Dankbar wenn mir Jemand "KONKRETT" helfen könnte!

1. wenn ich 2 IC über UART verbinden der einer mit 48Mhz getaktet und 
der
   anderer mit 150 Mhz.
   spielt hier deren Frequenz eine Rolle oder ist hier nur die Baudrate
   wichtig?

2. wenn ich NUN die 2 IC über SPI verbinden der einer mit 48Mhz getaktet
   und der anderer mit 150 Mhz. spielt DANN hier deren Frequenz eine 
Rolle
   oder ist hier AUCH nur die Baudrate wichtig?


MfG

von Severino R. (severino)


Lesenswert?

Neulin_g wrote:
> Hallo,
>
> ich versuche zu verstehe den Unterschied zwischen UAST und SPI zu
> verstehen und wäre Dankbar wenn mir Jemand "KONKRETT" helfen könnte!
>
> 1. wenn ich 2 IC über UART verbinden der einer mit 48Mhz getaktet und
> der
>    anderer mit 150 Mhz.
>    spielt hier deren Frequenz eine Rolle oder ist hier nur die Baudrate
>    wichtig?
Nur die Baudrate ist wichtig. Allerdings leitet sie sich meist vom 
Haupttakt ab, sodass für die beiden ICs jeweils andere Einstellungen 
(Vorteiler oder Baurdare-Generator) nötig sind.

So ist es z.B. möglich, zwei PCs über die serielle Schnittstelle (die 
auch einen UART benützt) erfolgreich zu verbinden, wobei von den PCs 
einer z.B. ein 25MHz 386er und der andere ein 3GHz Pentium sein kann.

>
> 2. wenn ich NUN die 2 IC über SPI verbinden der einer mit 48Mhz getaktet
>    und der anderer mit 150 Mhz. spielt DANN hier deren Frequenz eine
> Rolle
>    oder ist hier AUCH nur die Baudrate wichtig?

Hier ist eigentlich nicht mal die Baudrate wichtig, da der Takt über 
eine eigene Leitung gesendet wird.

Natürlich sind immer die maximalen Geschwindigkeiten ein limitierender 
Faktor.

P.S.: Konkret schreibt man mit nur einem "T" am Ende.

von Falk B. (falk)


Lesenswert?

@  Neulin_g (Gast)

>ich versuche zu verstehe den Unterschied zwischen UAST und SPI zu
>verstehen und wäre Dankbar wenn mir Jemand "KONKRETT" helfen könnte!

UART
SPI

>1. wenn ich 2 IC über UART verbinden der einer mit 48Mhz getaktet und

Es ist nur die Baudrate wichtig, die kann man einstellen.

>2. wenn ich NUN die 2 IC über SPI verbinden der einer mit 48Mhz getaktet
>   und der anderer mit 150 Mhz. spielt DANN hier deren Frequenz eine
>Rolle
>   oder ist hier AUCH nur die Baudrate wichtig?

Den Takt (Baudrate) der SPI kann man auch einstellen. Welchen Takt die 
ICs haben ist (fast) egal.

MFg
Falk

von 1293 (Gast)


Lesenswert?

Ein UART arbeitet Asynchron, das bedeutet, die Bitrate ist weit 
unterhalb des Taktes, in einem Beliebigen Verhaeltnis, beim Empfang 
werden die einzelnen Bits aus mehreren Samples zusammengesetzt und der 
Takt selbst wird nicht uebertragen. Beim SPI ist die Uebertragungsrate 
ueblicherweise eine Zweierpotenz kleiner als der Takt und der geteilte 
Takt wird mit uebertragen. Die Daten sind dann synchron zum geteilten 
Takt. Die Bits werden an der flanke des geteilten, uebertragenen Taktes 
gelesen. Beide Teilnehmen muessen dann synchron laufen, was bei der 
asynchronen UART Uebertragung nicht der Fall ist.

von Neulin_g (Gast)


Lesenswert?

Danke Leute!

Also wenn in den beiden Fälle NUR die Baudrate von bedeutung ist!
WO LIEGT DENN DA DEN UNTERSCHIED (bezogen auf die Frequenz)????

PS:(von der Definition her weiß ich :
UART : kein Synchronisation notwendig
SPI: Slave werden synchronisiert --> weil mehrere)

von Falk B. (falk)


Lesenswert?

@ Neulin_g (Gast)

>WO LIEGT DENN DA DEN UNTERSCHIED (bezogen auf die Frequenz)????

UART: asynchrone Schnittstelle ohne extra Taktleitung
SPI: synchrone Schnittstelle mit extra Taktleitung und Slave-Select 
Leitung

>UART : kein Synchronisation notwendig
>SPI: Slave werden synchronisiert --> weil mehrere)

Falsch, synchronisiert werden muss imer, nur passiert das 
unterschiedlich.

MfG
Falk

von Johannes M. (johnny-m)


Lesenswert?

UART ist zunächst mal nur für Punkt-zu-Punkt-Verbindungen geeignet, 
während SPI auch als Bus (also mit mehreren Slaves) arbeiten kann (und 
bevor jetzt wieder jemand kommt und sagt "Mit UART kann man das aber 
auch...": Ja, man kann so etwas auch mit UART implementieren, 
allerdings ist das Slave Select dann in Software zu machen und das ist 
eher unüblich).

Außerdem arbeitet SPI 100%ig synchron, d.h. es wird nicht nur der Takt 
mit übertragen, sondern ein Slave kann auch nur dann senden, wenn er 
gleichzeitig Daten vom Master empfängt. Beim UART arbeiten Sender und 
Empfänger unabhängig voneinander.

SPI ist ein reines Master-Slave-System, d.h. es gibt immer genau einen 
Master, der die Slaves (oder den Slave, man kann schließlich auch mit 
SPI eine Punkt-zu-Punkt-Verbindung aufbauen) zum Reden auffordert. Beim 
UART gibt es keinen echten Master-Slave-Betrieb, da beide Teilnehmer im 
Prinzip quasseln können, wenn sie wollen (außer es ist ein Protokoll 
vereinbart, das einen der Teilnehmer nur dann reden lässt, wenn der 
andere das erlaubt).

Und, wie andere oben schon angedeutet haben, lässt SPI aufgrund der 
wesentlich steiferen Hardware-Architektur i.d.R. deutlich höhere 
Datenraten (in Bezug auf den Prozessortakt) zu als UART (eben weil beim 
UART aufgrund des fehlenden Übertragungstaktes ein bestimmtes Timing 
einzuhalten ist, um die Synchronisation von Sender und Empfänger zu 
ermöglichen).

Und zu Deinem Verständnisproblem mit der "Frequenz":
Bei SPI ist es schnuppe, mit welcher Frequenz die einzelnen 
Teilnehmer-CPUs getaktet werden. Der Master gibt den Takt für die 
Übertragung aus und der Empfänger empfängt diesen Takt und kann die 
Signalflanken des ein- und abgehenden Datenstromes darauf 
synchronisieren. Im Prinzip ist eine Datenübertragung per SPI nichts 
anderes als ein zyklisches Schieberegister, das vom Master seinen 
Schiebetakt bekommt.

Beim UART hingegen müssen beide Teilnehmer den vorher vereinbarten 
Übertragungstakt selbst generieren, und zwar mit einer ausreichenden 
Genauigkeit, um zu gewährleisten, dass es keine Übertragungsfehler durch 
falsch zugeordnete Flanken gibt. Da sich nicht sämtliche üblichen 
Baudraten mit allen Ausgangsfrequenzen mit der erforderlichen 
Genauigkeit erzeugen lassen und außerdem bestimmte Oszillatortypen wegen 
ihrer grundsätzlichen Ungenauigkeit und/oder Temperaturdrift nicht zur 
Baudratengenerierung für asynchrone Übertragung geeignet sind, sind dem 
UART wesentlich engere Grenzen gesetzt als dem SPI.

von Falk B. (falk)


Lesenswert?

@ Johannes M. (johnny-m)

>UART ist zunächst mal nur für Punkt-zu-Punkt-Verbindungen geeignet,

Falsch. Die meisten RS485-Busse laufen per UART.

>allerdings ist das Slave Select dann in Software zu machen und das ist
>eher unüblich).

Nöö.

MFG
Falk

von Johannes M. (johnny-m)


Lesenswert?

Falk Brunner wrote:
> @ Johannes M. (johnny-m)
>
>>UART ist zunächst mal nur für Punkt-zu-Punkt-Verbindungen geeignet,
>
> Falsch. Die meisten RS485-Busse laufen per UART.
Ja, mit einem entsprechenden Protokoll. Deshalb steht da auch das 
Wörtchen "zunächst". Übersehen?

>>allerdings ist das Slave Select dann in Software zu machen und das ist
>>eher unüblich).
>
> Nöö.
Ebenfalls übers Protokoll. Dass bei solchen Systemen das ganze "ein 
wenig" komplizierter ist, sollte klar sein.

BTW:
Afaik ist RS-485 immer asynchron (Zumindest wüsste ich jetzt konkret 
nicht, dass der Standard eine Taktleitung vorsieht). "Die meisten" 
müsste also wohl eher "alle" heißen, oder net?

von Falk B. (falk)


Lesenswert?

@ Johannes M. (johnny-m)

>Afaik ist RS-485 immer asynchron

Nöö. RS-485 ist ein reiner IO-Standard wie TTL und CMOS und beinhaltet 
rein gar nichts in Bezug auf die verwendete Logik. Im industrieellen 
Umfeld wird RS422/485 für alles mögliche eingesetzt, auch für 
SPI-ähnliche Dinge über lange Strecken (mit bisweilen erbärmlichen 
Würg-Arounds, warum lassen Maschinenbauer nicht einfach die Finger von 
Elektronik und machen das was sie können, Maschinen bauen?)

MFG
Falk

von Johannes M. (johnny-m)


Lesenswert?

Falk Brunner wrote:
> @ Johannes M. (johnny-m)
>
>>Afaik ist RS-485 immer asynchron
>
> Nöö. RS-485 ist ein reiner IO-Standard wie TTL und CMOS und beinhaltet
> rein gar nichts in Bezug auf die verwendete Logik.
Da haste natürlich Recht...

> Im industrieellen
> Umfeld wird RS422/485 für alles mögliche eingesetzt, auch für
> SPI-ähnliche Dinge über lange Strecken (mit bisweilen erbärmlichen
> Würg-Arounds, warum lassen Maschinenbauer nicht einfach die Finger von
> Elektronik und machen das was sie können, Maschinen bauen?)
>
> MFG
> Falk
Ah, ja. Aber ist natürlich klar. Man kann natürlich den Takt auch mit 
dem selben Prinzip übertragen...

Ich hatte allerdings den Eindruck, dass der OP eher auf die 
grundlegenden Hardware-Geschichten aus war (er spricht von 2 ICs, die er 
verbinden will, was auch immer das für welche sein sollen...), und 
darauf bezog sich auch obige Erläuterung. Auf µC/IC-Ebene wird eben SPI 
eher für Busse und UART für Punkt-zu-Punkt- (Schaltung-zu-PC-) 
Verbindungen benutzt. Mit UART und entsprechenden 
Treibern/Pegelumsetzern kann man eben sehr einfach die üblichen 
Standards, die auch von PCs unterstützt werden, implementieren. SPI und 
I²C sind dagegen hauptsächlich zur Steuerung der unmittelbaren 
Peripherie vorgesehen (Und aufgrund der verwendeten Hardware auch 
deutlich weniger flexibel einsetzbar als das UART). Dass das so üblich 
ist, heißt natürlich nicht, dass der Anwender nicht auch andere Sachen 
damit machen darf;-)

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.