UART=Hardware, SPI=Protokoll?

Ich habe an einigen Stellen gelesen, einer davon ist dieser , dass einer der Hauptunterschiede zwischen UART und SPI darin besteht, dass ersteres eine Art Hardware und letzteres ein Protokoll ist.

Es fällt mir schwer, diesen Begriff vollständig zu begreifen. Dies ist kurz, was ich bisher aus dem Lesematerial herausgefunden habe, das ich beim Googeln gefunden habe, eingebettet in einige Fragen:

UART

UART ist eine Hardware, die zur Kommunikation zwischen zwei Komponenten verwendet wird. Der UART wandelt parallele Daten, die er von einem Datenbus empfängt, in einen seriellen Strom von Bits um, die nur über eine Leitung übertragen werden, und umgekehrt. Ein UART verwendet nur 2 Drähte - einen zum Empfangen und einen zum Senden. Der Rest der Details ist für die Art und Weise dieser Diskussion nicht wichtig.

SPI

SPI ist ein synchrones (da es eine Uhr verwendet) Kommunikationsprotokoll, das zwischen Geräten verwendet wird.
Dieses Protokoll verwendet 4 Kabel (wenn nur ein Slave vorhanden ist):

  • MOSI (Master Out/Slave In) – wird verwendet, um Daten vom Master zum Slave zu übertragen
  • MISO (Master In/Slave Out) – wird verwendet, um Daten vom Slave zum Master zu übertragen
  • SCLK – (Clock) – verwendet, um die Datenübertragung zu synchronisieren.
  • SS/CS - (Slave Select/Chip Select) - Wenn es auf Low gezogen wird, signalisiert es dem Chip, zu kommunizieren.

Im Gegensatz zu UART überträgt es Bits in einem Strom, der nicht in Pakete unterteilt ist (hier beginnt die Verwirrung - es wird mit UART verglichen). Geräte, die über SPI kommunizieren, befinden sich in einer Master-Slave-Beziehung. Der Master ist das steuernde Gerät – normalerweise ein Mikrocontroller – während der Slave – normalerweise so etwas wie ein Display, ein Sensor oder ein Speicherchip – Anweisungen vom Master entgegennimmt. (Zuverlässigkeitsprüfung - Wenn wir sagen, dass der Master den Slave kontrolliert , meinen wir lediglich die Auswahl des Slaves durch die SS/CS-Leitung und die Taktsignalisierung?)

Unterschiede zwischen UART und SPI

  • Anzahl der Drähte - UART verwendet 2, SPI verwendet mindestens 4
  • Keine Start-/Stoppbits – Daten werden kontinuierlich ohne Unterbrechungen gesendet.
  • Anzahl der Geräte - UART kann nur 2 haben, SPI kann praktisch eine unbegrenzte Anzahl von Slaves mit einem Master verbinden
  • Hardware vs. Protokoll - UART ist eine Art Hardware, während SPI ein Protokoll ist.

Schließlich - die Frage

Was mich hauptsächlich verwirrt, ist dieser letzte Unterschied - Hardware vs. Protokoll. Es scheint, dass diese beiden Kommunikationsschemata in denselben Parametern (Anzahl der Pins, Start- / Stoppbits, Geschwindigkeit usw.) nebeneinander verglichen werden - Sie können nicht zwei im Wesentlichen unterschiedliche Einheiten basierend auf denselben Parametern vergleichen, oder?

Besteht der Unterschied darin, dass UART ein dediziertes Stück Hardware ist und SPI allgemeine GPIOs des Mikrocontrollers verwendet?

Ich würde SPI nicht als Protokoll bezeichnen, für mich sind UART, SPI und I²C alles nur physikalische Schichten für die serielle Kommunikation. Aber dann taucht das Wort Protokoll in den SPI-Artikeln auf und nicht in den UART-Artikeln. Für mich ist ein Protokoll, wie die Bytes angeordnet werden müssen, damit sie für die Kommunikation sinnvoll sind. Die physische Schicht muss nur sicherstellen, dass sie rübergebracht werden ... Aber das ist nur meine Meinung.
Ein UART verwendet ein asynchrones serielles Kommunikationsprotokoll. Wenn Sie also Äpfel mit Äpfeln vergleichen möchten, vergleichen Sie asynchrone serielle Kommunikation mit SPI. en.wikipedia.org/wiki/Asynchronous_serial_communication Leider ist keines davon ein strenger Standard.
Das Kommunikationsprotokoll ist nur eine Reihe von Regeln für die Kommunikation zwischen zwei Einheiten. UART hat eine Reihe von Regeln (z. B.: Startbit sollte da sein .... usw.). SPI hat eine Reihe von Regeln (z. B.: Daten sollten an dieser Kante gestartet, an dieser Kante abgetastet werden usw.). Beide sind also Protokolle.
Das Wichtigste, woran Sie sich erinnern sollten, ist, dass "UART" und "RS-232" nicht dasselbe sind.
@Arsenal, aber UART, SPI, I2C sind keine physischen Schichten. Sie sind logische Protokolle, wie Bits übertragen werden. I2C ist nur eine, die auch eine physikalische Schicht definiert, UART und SPI jedoch nicht, sie sind nur eine logische Art, Bits zu übertragen. Sie verwenden einfach Standard-TTL- oder CMOS-Logik-IO als physikalische Schicht. Sie können UART mit vielen verschiedenen physikalischen Schichten verwenden, indem Sie einen PHY-Chip wie RS232, RS485, Optokoppler wie MIDI, CAN oder Glasfaser verwenden, um Ihre Schnittstelle aufzubauen.
@Justme ja das macht Sinn. Ich muss mein Denken neu ordnen. Im Grunde haben Sie also ein Protokoll auf Geräteebene, das behandelt, welche Bytes was bedeuten, und Sie haben ein Übertragungsprotokoll (?), das Ihnen sagt, welches Signal was bedeutet (um zu den Bytes zu gelangen). Ist das eine bessere Art, darüber nachzudenken?

Antworten (4)

Nein, UART ist nicht unbedingt ein Stück Hardware, noch SPI. Sie können beide in Software auf einem Gerät implementieren, das keinen Hardware-UART oder SPI hat. Üblicherweise finden sich beide in MCUs als Hardware-Peripheriegeräte.

Ein UART bedeutet einfach Universal Asynchronous Receiver Transmitter. Es verwendet das asynchrone Start-Stop-Framing-Protokoll, um Datensymbole mit wählbarer Anzahl von Bits und Paritätsbits zur Fehlerprüfung zu übertragen. Nehmen wir der Einfachheit halber an, dass es 8-Bit-Datensymbole sendet, die als Bytes bezeichnet werden. Ein UART stellt also einfach eine asynchrone serielle Schnittstelle auf Bitebene bereit.

SPI war ursprünglich ein einfaches Hardware-Peripheriegerät zum Anschließen von TTL-Chips mit getakteten seriellen Schnittstellen. Es entlastet einfach die Byte-Übertragung von der Software zur Hardware, mit wählbarer Taktpolarität und Phaseneinstellung. Ein SPI bietet also einfach eine byteorientierte synchrone serielle Schnittstelle auf Bitebene.

Letztendlich handelt es sich bei beiden also um Protokolle zum Senden von Bits und Bytes.

Aber das unterscheidet sich von einem Protokoll, das definiert, was diese Bytes bedeuten. Beispielsweise definiert ein SPI-Flash-Chip ein Protokoll, wie die Chipauswahl verwendet wird, um Befehle abzugrenzen und welche Bytes Befehle und welche Daten sind, und wie sie zum Lesen und Schreiben des Flash-Speichers über den SPI-Bus auf hoher Ebene verwendet werden. Gleiches gilt beispielsweise für das YModem-Protokoll, das definiert, was diese Bytes bedeuten, um Dateien über UART auf hoher Ebene senden zu können.

Die meisten Ihrer Aussagen sind falsch und hier gibt es viele Missverständnisse ...

Einer der Hauptunterschiede zwischen UART und SPI besteht darin, dass ersteres eine Art Hardware und letzteres ein Protokoll ist.

Nein das ist Unsinn. Beides ist kein Protokoll. Sie sind sowohl physische als auch Data-Link-Layer-Standards. Konsultieren Sie das "OSI-Modell" , das in jedem Anfängerkurs für Datenkommunikation gelehrt wird.

Es fällt mir schwer, diesen Begriff vollständig zu begreifen.

Kein Wunder, denn es ist falscher Unsinn ...

UART ist eine Hardware, die zur Kommunikation zwischen zwei Komponenten verwendet wird.

Vielmehr gibt es den UART-Bus – die Datenverbindungsschicht – und die physische UART-Komponente, die zur Kommunikation über diesen Bus verwendet wird. In den Tagen, als Dinosaurier auf der Erde lebten, gab es eine Komponente namens 16550, die von National Semi entwickelt wurde, die „der UART“ war und in jedem PC-Computer installiert war.

Ebenso benötigen Sie ein SPI-Hardware-Peripheriegerät. Obwohl es im Grunde nur ein verherrlichtes Schieberegister ist, das an eine Reihe von Signalen angeschlossen ist.

Der UART wandelt parallele Daten um, die er von einem Datenbus empfängt

Wie Sie den UART ansprechen, hängt vom System ab. Bei modernen Mikrocontrollern wird dies intern gehandhabt und wir brauchen uns keine Gedanken darüber zu machen, wie. Es könnte parallel sein, es geht darum, wie die MCU entworfen ist, hat nichts mit UART zu tun.

SPI ist synchron (da es eine Uhr verwendet)

Vielmehr ist es synchron, da es zusammen mit den Daten ein Taktsignal verwendet. UART taktet auch seine Daten, aber es kann unendliche Verzögerungen zwischen Datenbytes geben. Die Begriffe synchron oder asynchron sind nicht wirklich hilfreich, es sind hauptsächlich nur Schlagworte.

Im Gegensatz zu UART überträgt es Bits in einem Strom, der nicht in Pakete unterteilt ist

Nein, genau wie UART überträgt es mindestens 8 Bit. Wenn irgendeine Art von Protokoll einer höheren Schicht vorhanden ist, diktiert es die Paketformate. Aber das ist nicht auf der Datenverbindungsschicht vorhanden, sondern auf der Anwendungsschicht.

Plausibilitätsprüfung - Wenn wir sagen, dass der Master den Slave kontrolliert, meinen wir lediglich die Auswahl des Slaves durch die SS/CS-Leitung und die Taktsignalisierung?)

Das bedeutet, dass es sowohl /SS als auch die Uhr steuert. Dabei steuert der Master, wann die Datenübertragung beginnt und wie schnell sie ist. Der Sklave muss sich nur einreihen. Und das bedeutet in der Regel, dass der Slave die Daten jederzeit parat haben muss, da er oft nicht weiß, wann es Zeit ist, sie zu senden. Es gibt viele Variationen davon, da SPI nicht wirklich so gut standardisiert ist.

UART kann nur 2 haben

Mit höheren Layer-Standards wie RS-485 können Sie größere Netzwerke erstellen. Üblicherweise „Sternnetze“, bei denen alle Informationen einen Master passieren, der sie dann weiterleitet. Aber Sie können auch eine Art Multi-Drop-Netzwerk haben, solange zwei Knoten nicht gleichzeitig senden. Es ist möglich, aber insgesamt ziemlich grob.

Protokoll kann leider viele Bedeutungen haben. en.wikipedia.org/wiki/Category:Physical_layer_protocols
@ Mattman944 ​​Nun ja, aber die de facto Bedeutung ist ein Konzept auf höherer Ebene. Wo Sie Sync-Bytes, Größenbytes, Payload, Prüfsumme usw. haben. Auf der Sicherungsschicht sprechen wir von Frames und dies ist ein weit verbreiteter standardisierter Begriff, der auch Teil des erwähnten "OSI-Modells" ist. Auf dieser unteren Ebene sprechen wir also über UART- Frames , SPI- Frames , CAN- Frames oder was auch immer.
Wenn Sie wissen, wo es eine Tabelle gibt, die SPI in das OSI-Modell abbildet, wäre dies für das OP sehr hilfreich.
@ Mattman944 ​​SPI wird speziell nicht oft mit Protokollen höherer Schichten verwendet, da es sich fast immer nur um eine On-Board-Kommunikation handelt. Meistens handelt es sich um ein Komponentendatenblatt mit der Aufschrift "2 Bytes für die Adresse senden, dann 2 Bytes für die Daten, mit Big Endian". Das ist ein Protokoll einer höheren Ebene, auch wenn es sehr grob ist. UART hingegen kann komplexe Anwendungsebenen haben.
Ich finde die Antwort verwirrend. Zuerst sagen Sie, dass beides kein Protokoll ist, und dann sagen Sie, dass beide zur Datenverbindung und zur physischen Schicht des ISO-Modells gehören. Diese Schichten des ISO-Modells definieren ein Protokoll, wie Bits oder Frames zwischen Geräten übertragen werden. Wenn es also eine gegenseitige Vereinbarung zwischen zwei Geräten gibt, wie Bits gesendet und empfangen werden sollen, wie ist das dann kein Protokoll? Ich stimme zu, UART ist kein Protokoll, sondern ein Gerät, das die Übertragung und den Empfang von Daten mit einem asynchronen Start-Stopp-Protokoll implementiert.

UART steht für Universal Asynchronous Receiver-Transmitter, was Wikipedia definiert als Ein universeller asynchroner Receiver-Transmitter ist ein Computerhardwaregerät für die asynchrone serielle Kommunikation, bei dem das Datenformat und die Übertragungsgeschwindigkeiten konfigurierbar sind.

Justme bezieht sich vielleicht auf eine serielle Verbindung, die über einen UART oder auch über Software erfolgen kann.

Der UART auf Hardwareebene ist ein System, das Daten serialisiert und sie Bit für Bit auf einer Leitung sendet. Es selbst implementiert kein Protokoll, weder Hardware noch Software, und kann mit Transceivern und Protokollen verwendet werden, um Busse wie RS232, RS485, MODBUS, DMX usw. zu generieren.

UART wird häufig verwendet, um diese Busse zu erstellen, um dann zwischen verschiedenen Systemen zu kommunizieren. Es wird manchmal auch verwendet, um mit Hardwaremodulen zu kommunizieren, wie es oft bei Bluetooth-Modulen der Fall ist.

UART sendet Daten ohne Taktleitung und erfordert, dass die Geräte die gleiche Baudrate haben, was eine Konfiguration auf beiden Seiten erfordert und auch einen Oszillator (eine Art Taktgeber) erfordert.

UART hat keine Slave/Master-Seite, kann aber in Software implementiert werden.

SPI (Serial Peripheral Interface) selbst ist ebenfalls eine Hardwareimplementierung und enthält kein Softwareprotokoll. Es hat einige Regeln, wie die Datenleitungen und eine Aktivierungsleitung und mindestens eine Uhr.

Es berücksichtigt auch, dass es einen Master und einen Slave gibt, wobei der Master die Uhr und die Freigabeleitung steuert.

SPI hat keine Regeln für die logische Ebene der Leitungen, daher können einige Chips unterschiedliche logische Ebenen verwenden.

Das über SPI gesendete Datenformat ist ebenfalls nicht spezifiziert und wird durch Software implementiert, je nachdem, womit es kommuniziert.

SPI wird normalerweise innerhalb einer Leiterplatte verwendet, um mit anderen ICs zu kommunizieren.

Da der SPI über eine Taktleitung verfügt, ist auf der Slave-Seite keine Konfiguration erforderlich, was auch bedeutet, dass der Slave keinen Oszillator haben muss.

Es gibt auch einige Busse, die auf SPI basieren, die mehr Regeln wie SPI_RX oder andere herstellerabhängige Regeln definieren.

SPI wird hauptsächlich für die Kommunikation zwischen Chips innerhalb einer Leiterplatte verwendet.

UART wird hauptsächlich für die Kommunikation über Kabel verwendet, manchmal aber auch mit einigen Modulen innerhalb einer Leiterplatte.

SPI und UART allein haben wohl ähnliche Geschwindigkeiten. Uart arbeitet normalerweise mit einer langsameren Geschwindigkeit, da es über größere Entfernungen und aufgrund der Oszillatorfrequenztoleranzen verwendet wird, während SPI nicht von der Taktsynchronisierung abhängig ist.

Ich denke nicht, dass es hilfreich ist, beispielsweise RS-232 und Modbus zu verwechseln. RS-232 usw. sind physische Erweiterungen von UART, während Modbus eine Anwendungsschicht ganz oben ist.
Um Daten zwischen zwei UARTs zu übertragen, müssen sich beide darauf einigen, wie Daten zwischen ihnen serialisiert werden, und wenn eine Vereinbarung, wie Daten zwischen zwei Geräten serialisiert werden, kein Protokoll ist, was ist es dann? Ich würde sagen, der UART implementiert ein bestimmtes Protokoll zur Serialisierung der Daten, das asynchrone Start-Stopp-Protokoll.

UART wurde in den 70er Jahren geboren, während SPI in den 90er Jahren entstand.

Sowohl die Schnittstellen UART als auch SPI haben eine Fülle von CMOS-Transistoren im Inneren, daher sind sie Hardwareschnittstellen. Die Gesamtheit dieser CMOS-Transistoren wird als "Hardware-Controller" bezeichnet.

UART hat 2 Pins: TX, RX

SPI hat 4 Pins: TX, RX, CLOCK, ENABLE

Beide senden und empfangen jeweils ein Byte, also eines nach dem anderen.

SPI ist viel schneller als UART, da Bits an der steigenden oder fallenden Flanke des CLOCK-Signals geschrieben und gelesen werden. Sie beschleunigen die Taktrate, Sie beschleunigen die Kommunikation.

UART hat keine Taktunterstützung, daher muss das empfangende Gerät ein lokales Taktsignal erzeugen, das nicht mit dem sendenden synchron sein kann. Das bedeutet, dass die Taktrate nicht zu hoch sein darf und die Kommunikation ziemlich langsam ist.


Zur Beantwortung Ihrer Frage:

Ein Protokoll ist in der Informatik ein Satz von Regeln.

Hardware in der Elektronik ist eine Reihe von Transistoren, Dioden, Widerständen usw., die miteinander verbunden sind.


Hardware ist darauf ausgelegt, Protokolle auszuführen.

Async Serial gab es schon lange vor den 70er Jahren und Spi war in den 80er Jahren als Hardware-Peripherie verfügbar.
Ich denke, Ihre Jahre sind um mindestens ein oder zwei Jahrzehnte zurück. Der erste UART als IC war möglicherweise Anfang der 70er Jahre verfügbar, aber davor wurden UARTs aus diskreten Logikgattern gebaut, und die ersten waren elektromechanische Geräte. SPI als MCU-Peripherie wurde erstmals in den 80er Jahren eingeführt, aber es änderte sich kaum, da synchrone serielle Kommunikation bereits eine Sache war.
Sie haben nicht standardmäßige Namen für SPI-Pins verwendet, und die Verwendung von TX und RX ist besonders verwirrend, da diese Pin-Namen eine andere Bedeutung haben als bei einem UART.
In der Tat. SPI ist nicht standardisiert, aber die De-facto-Standardnamen sind MOSI, MISO und /SS (invertiert) und diese sollten verwendet werden. Die Uhr kann anders heißen, SCLK usw.
"Sie beschleunigen die Taktrate, Sie beschleunigen die Kommunikation." Das gilt auch sehr für UART.
Die UART-Geschwindigkeit ist auf 1 Mbit/s begrenzt. Die SPI-Geschwindigkeit kann 10-mal schneller werden.
Das stimmt nicht, moderne µC unterstützen 20 MBaud über UART, der Bootloader meines Smartphones arbeitet mit 5 MBaud. Ja, SPI kann immer noch schneller gehen. Aber der Satz, den ich zitiert habe, gilt grundsätzlich für jede Kommunikation – es kommt nur darauf an, wo man damit an die Decke geht.
SPI ist eine isochrone Schnittstelle und wird immer 10-mal schneller sein als UART. 75-MHz-SPI ist bei vielen seriellen Flash-Geräten üblich.
@EnricoMigliore Weder die UART- noch die SPI-Geschwindigkeit wird durch etwas anderes als die Implementierung begrenzt. Ich habe jahrelang UART-Kommunikation mit einem PC mit 3 Mbit / s verwendet, hauptsächlich weil dies die schnellste Rate war, zu der der serielle USB-Port-Chip fähig war. Von Schnittstellen, die UARTs wie RS-485 oder RS-422 verwenden, wird normalerweise angenommen, dass sie für viele Meter bis zu 10 Mbit / s erreichen. SPI kann schneller gehen, aber da es synchron ist, hat es das Problem, dass der Master auf die Flugzeit warten muss, bis die uhrsynchronisierten Daten vom Slave zurückkommen. Sie können also keinen 75-MHz-SPI-Bus haben, es sei denn, der Abstand ist extrem gering, z. B. wenige Zentimeter.