Erinnern Sie sich noch, als Drucker, Mäuse und Modems dicke Kabel mit diesen riesigen klobigen Steckern hatten? Diejenigen, die buchstäblich in Ihren Computer geschraubt werden mussten? Diese Geräte benutzten wahrscheinlich UARTs, um mit Ihrem Computer zu kommunizieren. Während USB diese alten Kabel und Stecker fast vollständig ersetzt hat, gehören UARTs definitiv noch nicht der Vergangenheit an. Sie finden UARTs in vielen DIY-Elektronikprojekten, um GPS-Module, Bluetooth-Module und RFID-Kartenlesemodule mit Ihrem Raspberry Pi, Arduino oder anderen Mikrocontrollern zu verbinden.
UART steht für Universal Asynchronous Receiver/Transmitter. Es handelt sich dabei nicht um ein Kommunikationsprotokoll wie SPI und I2C, sondern um eine physikalische Schaltung in einem Mikrocontroller oder einem Stand-alone-IC. Der Hauptzweck eines UARTs ist das Senden und Empfangen von seriellen Daten.
Eines der besten Dinge an UART ist, dass es nur zwei Drähte verwendet, um Daten zwischen Geräten zu übertragen. Die Prinzipien hinter UART sind leicht zu verstehen, aber wenn Sie den ersten Teil dieser Serie, Grundlagen des SPI-Kommunikationsprotokolls, noch nicht gelesen haben, wäre das ein guter Anfang.
Einführung in die UART-Kommunikation
Bei der UART-Kommunikation kommunizieren zwei UARTs direkt miteinander. Der sendende UART wandelt parallele Daten von einem steuernden Gerät wie einer CPU in serielle Form um, überträgt sie seriell an den empfangenden UART, der dann die seriellen Daten wieder in parallele Daten für das empfangende Gerät umwandelt. Für die Übertragung von Daten zwischen zwei UARTs werden nur zwei Drähte benötigt. Die Daten fließen vom Tx-Pin des sendenden UARTs zum Rx-Pin des empfangenden UARTs:
UARTs übertragen Daten asynchron, d.h. es gibt kein Taktsignal, um die Ausgabe von Bits vom sendenden UART mit dem Abtasten von Bits durch den empfangenden UART zu synchronisieren. Anstelle eines Taktsignals fügt der sendende UART dem zu übertragenden Datenpaket Start- und Stoppbits hinzu. Diese Bits definieren den Anfang und das Ende des Datenpakets, so dass der empfangende UART weiß, wann er mit dem Lesen der Bits beginnen muss.
Wenn der empfangende UART ein Startbit erkennt, beginnt er, die eingehenden Bits mit einer bestimmten Frequenz, der Baudrate, zu lesen. Die Baudrate ist ein Maß für die Geschwindigkeit der Datenübertragung, ausgedrückt in Bits pro Sekunde (bps). Beide UARTs müssen mit etwa der gleichen Baudrate arbeiten. Die Baudrate zwischen dem sendenden und dem empfangenden UART darf sich nur um etwa 10 % unterscheiden, bevor das Timing der Bits zu weit abweicht.
Beide UARTs müssen außerdem so konfiguriert sein, dass sie die gleiche Datenpaketstruktur senden und empfangen.
Wie UART funktioniert
Der UART, der Daten senden soll, erhält die Daten von einem Datenbus. Der Datenbus wird verwendet, um Daten von einem anderen Gerät wie einer CPU, einem Speicher oder einem Mikrocontroller an den UART zu senden. Die Daten werden vom Datenbus zum sendenden UART in paralleler Form übertragen. Nachdem der sendende UART die parallelen Daten vom Datenbus erhalten hat, fügt er ein Startbit, ein Paritätsbit und ein Stoppbit hinzu, wodurch das Datenpaket entsteht. Anschließend wird das Datenpaket seriell, Bit für Bit, am Tx-Pin ausgegeben. Der empfangende UART liest das Datenpaket Bit für Bit an seinem Rx-Pin. Der empfangende UART wandelt dann die Daten wieder in die parallele Form um und entfernt das Startbit, das Paritätsbit und die Stoppbits. Schließlich überträgt der empfangende UART das Datenpaket parallel zum Datenbus auf der Empfangsseite:
Die von UART übertragenen Daten sind in Paketen organisiert. Jedes Paket enthält 1 Startbit, 5 bis 9 Datenbits (je nach UART), ein optionales Paritätsbit und 1 oder 2 Stoppbits:
Startbit
Die UART-Datenübertragungsleitung wird normalerweise auf einem hohen Spannungspegel gehalten, wenn sie keine Daten überträgt. Um die Übertragung von Daten zu starten, zieht der sendende UART die Übertragungsleitung für einen Taktzyklus von High auf Low. Wenn der empfangende UART den Übergang von High zu Low erkennt, beginnt er, die Bits im Datenrahmen mit der Frequenz der Baudrate zu lesen.
Datenrahmen
Der Datenrahmen enthält die tatsächlich übertragenen Daten. Er kann 5 Bit bis zu 8 Bit lang sein, wenn ein Paritätsbit verwendet wird. Wenn kein Paritätsbit verwendet wird, kann der Datenrahmen 9 Bit lang sein. In den meisten Fällen werden die Daten mit dem niederwertigsten Bit zuerst gesendet.
Parität
Parität beschreibt die Geradzahligkeit oder Ungeradzahligkeit einer Zahl. Das Paritätsbit ist eine Möglichkeit für den empfangenden UART zu erkennen, ob sich die Daten während der Übertragung geändert haben. Bits können durch elektromagnetische Strahlung, nicht angepasste Baudraten oder Datenübertragungen über große Entfernungen verändert werden. Nachdem der empfangende UART den Datenrahmen gelesen hat, zählt er die Anzahl der Bits mit einem Wert von 1 und prüft, ob die Summe eine gerade oder ungerade Zahl ist. Wenn das Paritätsbit eine 0 ist (gerade Parität), sollte die Summe der 1-Bits im Datenrahmen eine gerade Zahl ergeben. Wenn das Paritätsbit eine 1 ist (ungerade Parität), sollte die Summe der 1-Bits im Datenrahmen eine ungerade Zahl ergeben. Wenn das Paritätsbit mit den Daten übereinstimmt, weiß der UART, dass die Übertragung frei von Fehlern war. Aber wenn das Paritätsbit eine 0 ist und die Summe ungerade ist; oder das Paritätsbit eine 1 ist und die Summe gerade ist, weiß der UART, dass sich Bits im Datenrahmen geändert haben.
Stop Bits
Um das Ende des Datenpakets zu signalisieren, treibt der sendende UART die Datenübertragungsleitung von einer niedrigen Spannung zu einer hohen Spannung für mindestens zwei Bitdauern.
Schritte der UART-Übertragung
1. Der sendende UART empfängt parallel Daten vom Datenbus:
2. Der sendende UART fügt das Startbit, das Paritätsbit und das/die Stoppbit(s) zum Datenrahmen hinzu:
3. Das gesamte Paket wird seriell vom sendenden UART zum empfangenden UART gesendet. Der empfangende UART tastet die Datenleitung mit der vorkonfigurierten Baudrate ab:
4. Der empfangende UART verwirft das Startbit, Paritätsbit und Stoppbit aus dem Datenrahmen:
5. Der empfangende UART wandelt die seriellen Daten wieder in parallele um und überträgt sie an den Datenbus auf der Empfangsseite:
Vorteile und Nachteile von UARTs
Kein Kommunikationsprotokoll ist perfekt, aber UARTs sind ziemlich gut in dem, was sie tun. Hier sind einige Vor- und Nachteile, die Ihnen bei der Entscheidung helfen, ob sie für Ihr Projekt geeignet sind oder nicht:
Vorteile
- Benutzt nur zwei Drähte
- Ein Taktsignal ist nicht notwendig
- Hat ein Paritätsbit, um eine Fehlerprüfung zu ermöglichen
- Die Struktur des Datenpakets kann geändert werden, solange beide Seiten dafür eingerichtet sind
- Gut dokumentierte und weit verbreitete Methode
Nachteile
- Die Größe des Datenrahmens ist auf maximal 9 Bit begrenzt
- Unterstützt keine Multiple Slave- oder Multiple Master-Systeme
- Die Baudraten der einzelnen UARTs müssen innerhalb von 10 % voneinander liegen
Weiter geht es mit Teil drei dieser Serie, Grundlagen des I2C-Kommunikationsprotokolls, um mehr über eine andere Art der Kommunikation elektronischer Geräte zu erfahren. Oder, wenn Sie es noch nicht getan haben, lesen Sie Teil 1, Grundlagen des SPI-Kommunikationsprotokolls.