UART (Universal Asynchronous Transmitter Receiver), das ist das am häufigsten verwendete Protokoll für die serielle Vollduplex-Kommunikation. Es ist ein einzelner LSI-Chip (Large Scale Integration), der für die asynchrone Kommunikation ausgelegt ist. Dieses Gerät sendet und empfängt Daten von einem System zu einem anderen System.
In diesem Lernprogramm lernen Sie die Grundlagen der UART-Kommunikation und die Funktionsweise des UART.
Was ist UART?
„UART“ steht für Universal Asynchronous Receiver-Transmitter. Es ist eine Hardware-Peripherie, die in einem Mikrocontroller vorhanden ist. Die Funktion von UART ist es, die ein- und ausgehenden Daten in den seriellen Binärstrom zu konvertieren. Die vom Peripheriegerät empfangenen seriellen 8-Bit-Daten werden mit Hilfe der Seriell-Parallel-Wandlung in die parallele Form umgewandelt, und die von der CPU empfangenen parallelen Daten werden mit Hilfe der Seriell-Parallel-Wandlung umgewandelt. Diese Daten liegen in modulierender Form vor und werden mit einer definierten Baudrate übertragen.
Warum wird UART verwendet?
Protokolle wie SPI (Serial Peripheral Interface) und USB (Universal Serial Bus) werden für die schnelle Kommunikation verwendet. Wenn die Hochgeschwindigkeitsdatenübertragung nicht erforderlich ist, wird UART verwendet. Es ist ein preiswertes Kommunikationsgerät mit einem einzelnen Sender/Empfänger. Es benötigt einen einzelnen Draht zum Senden der Daten und einen weiteren Draht zum Empfangen.
UART-Schnittstelle
Es kann mit Hilfe eines RS232-TTL-Wandlers oder USB-TTL-Wandlers an einen PC (Personal Computer) angeschlossen werden. Die Gemeinsamkeit zwischen RS232 und UART ist, dass sie beide keinen Takt benötigen, um Daten zu senden und zu empfangen. Der Uart-Rahmen besteht aus 1 Startbit, 1 oder 2 Stoppbits und einem Paritätsbit für die serielle Datenübertragung.
Blockschaltbild
Der UART besteht aus den folgenden Kernkomponenten. Sie sind der Sender und der Empfänger. Der Sender besteht aus dem Transmit-Hold-Register, dem Transmit-Schieberegister und der Steuerlogik. Analog dazu besteht der Empfänger aus einem Empfangs-Halteregister, einem Empfangs-Schieberegister und einer Steuerlogik. Gemeinsam haben Sender und Empfänger einen Baudratengenerator.
UART-Blockdiagramm
Der Baudratengenerator erzeugt die Geschwindigkeit, mit der Sender und Empfänger die Daten senden/empfangen müssen. Das Transmit-Hold-Register enthält das zu übertragende Datenbyte. Das Sende-Schieberegister und das Empfangs-Schieberegister schieben die Bits nach links oder rechts, bis ein Datenbyte gesendet/empfangen wird.
Zusätzlich dazu gibt es eine Steuerlogik, die sagt, wann gelesen/geschrieben werden soll. Der Baudratengenerator erzeugt Geschwindigkeiten von 110 bps (Bits pro Sekunde) bis 230400. Meistens kommen Mikrocontroller mit höheren Baudraten wie 115200 und 57600 für eine schnellere Datenübertragung daher. Geräte wie GPS und GSM verwenden langsamere Baudraten in 4800 und 9600.
Wie funktioniert UART?
Um die Funktionsweise von UART zu verstehen, müssen Sie die grundlegende Funktionalität der seriellen Kommunikation verstehen. Kurz gesagt, verwenden Sender und Empfänger Startbit, Stoppbit und Timing-Parameter, um sich miteinander zu synchronisieren. Die Originaldaten liegen in paralleler Form vor. Um beispielsweise 4-Bit-Daten in die serielle Form umzuwandeln, benötigen wir einen Parallel-Seriell-Wandler. Im Allgemeinen werden D-Flip-Flops oder Latches verwendet, um die Konverter zu entwerfen.
Arbeitsweise eines D-Flip-Flops
Basisches D-Flip-Flop
D-Flip-Flop, auch bekannt als Daten-Flip-Flop, verschiebt ein Bit von der Eingangsseite zur Ausgangsseite, wenn und nur dann, wenn der Takt den Übergang von einem High-Zustand zu einem Low-Zustand oder von einem Low-Zustand zu einem High-Zustand ändert. Wenn Sie also vier Datenbits übertragen wollen, benötigen Sie 4 Flipflops.
Anmerkung: Hier steht,
‚D‘ für Eingangsdaten.
‚CLK‘ für Taktimpulse.
‚Q‘ für Ausgangsdaten. Nun wollen wir einen Parallel-Seriell- und einen Seriell-Parallel-Wandler entwerfen.
Parallel-Seriell-Wandler
Parallel-Seriell-Wandler
Kaskadenschaltung – Parallel zu Seriell
Schritt#1:
Nehmen Sie 4 Flip-Flops. Die Anzahl der Flipflops entspricht der Anzahl der zu übertragenden Bits. Setzen Sie in ähnlicher Weise Multiplexer vor jedes Flipflop, jedoch ohne das erste. Ein Multiplexer wird platziert, um die Daten zu kombinieren und in serielle Bits zu konvertieren. Er hat zwei Eingänge, ein paralleles Bit Daten und ein weiteres vom vorherigen Flipflop.
Schritt#2:
Nun laden Sie die Daten auf einmal in die D-Flipflops. Es werden die parallelen Daten gezogen und das letzte Bit des letzten Flipflops (vier), dann das dritte Bit, das zweite Bit und schließlich das erste Bit verschoben. Um nun die parallelen Daten wieder in eine serielle Form zu bringen, wird ein Seriell-Parallel-Wandler verwendet.
Seriell-Parallel-Wandlung
Seriell-Parallel-Wandlung
Kaskadenschaltung – Seriell-Parallel-Wandlung
Schritt#1:
Nehmen Sie 4 Flip-Flops. Die Anzahl der Flip-Flops entspricht der Anzahl der zu übertragenden Bits.
Schritt#2:
Zunächst deaktivieren Sie den parallelen Bus. Aktivieren Sie ihn erst, wenn alle Bits geladen sind. Speichern Sie die Daten am Eingang des ersten Flipflops. Machen Sie nun den Takt hoch, dadurch wird das niederwertigste Bit an den Eingang des zweiten Flipflops und den Ausgang des ersten Flipflops geschoben. In ähnlicher Weise verschieben Sie alle Bits um eins, indem Sie den Takt auf high setzen. Der Wandler befindet sich im Haltezustand, bis alle Bits an den Ausgang übertragen sind.
Schritt#3:
Jetzt enthält jedes Flip-Flop ein Bit der seriellen Daten. Erst wenn alle Bits an den Flipflop-Ausgang übertragen sind, geben Sie den Bus frei. Dadurch kann der Wandler alle Bits auf einmal senden.
Protokollformat
Der UART beginnt die Kommunikation mit einem Startbit ‚0‘. Das Startbit leitet die Übertragung der seriellen Daten ein und das Stopbit beendet die Datentransaktion.
Protokollformat
Es ist auch mit einem Paritätsbit (gerade oder ungerade) versehen. Das gerade Paritätsbit wird durch ‚0‘ (gerade Anzahl von 1en) und das ungerade Paritätsbit durch ‚1‘ (ungerade Anzahl von 1en) dargestellt.
Übertragung
Die Übertragung der Daten erfolgt über eine einzelne Übertragungsleitung (TxD). Dabei gilt ‚0‘ als Leerzeichen und ‚1‘ als Markierungszustand.
Transmission Frame
Der Sender sendet jeweils ein einzelnes Bit. Nachdem ein Bit gesendet wurde, wird das nächste Bit gesendet. Auf diese Weise werden alle Datenbits mit einer vordefinierten Baudrate an den Empfänger gesendet. Jedes Bit wird mit einer gewissen Verzögerung übertragen. Um z. B. ein Byte Daten mit einer Baudrate von 9600 zu senden, wird jedes Bit mit einer Verzögerung von 108 µs gesendet. Die Daten werden mit einem Paritätsbit addiert. Es werden also 10 Datenbits benötigt, um 7 Datenbits zu senden.
Hinweis: Beim Senden wird immer das LSB (Least Significant Bit) zuerst gesendet.
Empfang
Beim Empfang wird die RxD-Leitung (Receiver) zum Empfangen der Daten verwendet.
Empfangsrahmen
Beispiel der UART-Anbindung
Dieses Beispiel demonstriert die Anbindung des ESP8266 UART an den MAX232. Aber bevor ich mich in die Details des Interfacing stürze, lassen Sie mich die Pin-Details des Max232-Treibers erläutern.
MAX232 Pinout
Das MAX232 IC wird mit einer 5V-Versorgung betrieben, die einen kapazitiven Spannungsgenerator enthält, um 232 Pegelspannungen zu erzeugen. Es kommt mit zwei Sendern, die auch Treiber (TIN, TOUT) und Empfänger (RIN und ROUT) genannt werden.
Hier habe ich ESP8266 (32-Bit-Mikrocontroller) verwendet, der einen eingebauten UART hat. Die Kommunikation mit dem ESP8266 kann mit AT-Befehlen über einen RS232-zu-TTL-Pegelwandler (MAX232) erfolgen. Die folgende Abbildung zeigt die Verbindung des ESP8266 mit dem PC (Personal Computer).
ESP8266 interfacing with UART
Bei der Abfrage von gültigen AT-Befehlen durch den PC antwortet der Wi-Fi-Chip mit einer Rückmeldung. Ich möchte hier nicht in die Tiefe gehen und werde das Thema ESP8266 in den zukünftigen Tutorials erklären.
Hier sind die Schritte zur Implementierung der seriellen Kommunikation mit dem PC.
- Verbinden Sie den Sender (TX) des ESP8266 mit dem Empfänger (TX) des RS232 zu TTL Pegelwandlers (MAX232) und dem RX des PCs.
- Verbinden Sie den Empfänger (RX) des ESP8266 mit dem TX des PCs und dem RX des TTL-Wandlers.
ESP8266-Befehle
AT-Befehl (gesendet vom PC) | ESP8266-Antwort (empfangen vom PC) |
---|---|
AT<CR><LF> | OK<CR><LF> |
AT+CIPMUX=1 | OK<CR><LF> |
AT+CIPSERVER=1,23<CR><LF> | OK<CR><LF> |
Der folgende Screenshot zeigt die Antwort des ESP8266-Moduls.
ESP8266 Befehle – Docklight Programm
UART vs USART
USART ist die Grundform von UART. Technisch gesehen sind sie nicht das Gleiche. Aber die Definition ist für beide gleich. Es handelt sich um Mikrocontroller-Peripheriegeräte, die parallele Daten in serielle Bits umwandeln und umgekehrt.
Der Hauptunterschied zwischen UART und USART ist, dass UART nur asynchrone Kommunikation unterstützt, während USART sowohl synchrone als auch asynchrone Kommunikation unterstützt. Zum besseren Verständnis hier der Vergleich zwischen USART und UART.
UART | USART |
---|---|
Der Takt wird intern vom Mikrocontroller erzeugt. | Der Takt wird vom sendenden Gerät generiert. |
Die Datenrate ist langsam. | Die Datenrate ist durch den externen Takt höher. |
Standalone Protokoll | Unterstützt mehrere Protokolle wie LIN, RS-485, IrDA, Smart Card etc. |
Die Baudrate sollte vor der Übertragung bekannt sein. | Die Baudrate muss nicht vorher bekannt sein. |
Geeignet für Kommunikation mit niedriger Geschwindigkeit | Geeignet für Kommunikation mit hoher Geschwindigkeit. |
Reduzierter Energiebedarf. | Handhabt serielle Kommunikation bei hohem Energieverbrauch |
RS232 und UART
Die Spannungspegel stellen die Betriebsspannungspegel dar, die ein Gerät aushalten kann, um in einer sicheren Zone zu arbeiten. Hier sind die Spannungspegel für RS232 und TTL.
RS232 Logik:
RS232 Spannungspegel
Logikpegel | Spannungsbereich |
---|---|
Logikausgang High oder OFF | -5V bis -.15V |
Logik Low oder EIN-Ausgang | +5V bis +15V | Logik High oder AUS-Eingang | -3V bis -15V |
Logic Low oder EIN-Eingang | +3V bis +15V |
In den meisten Fällen reichen die RS232-Pegel von -12V bis +12V. Zum Beispiel ist ein ASCII-Wert für ein Zeichen ‚A‘ in RS232 65 und 41 in Hexadezimal. In einem 8-Bit-Binärformat ist es also 0100 0001. Hier die Darstellung der RS232 Logikpegel für ASCII ‚A‘.
RS232 Signal für ASCII Buchstabe A
TTL/CMOS Logik:
Der UART arbeitet auf TTL Logik.
TTL-CMOS-Signal für ASCI-Buchstabe A
- Zunächst befindet sich die serielle Leitung im Ruhezustand, der allgemein als Mark-Zustand (logisch 1) bezeichnet wird. Nun beginnt die Datenübertragung mit einem Startbit (logisch 0).
- Weiterhin werden acht Datenbits über die serielle Leitung gesendet, eines nach dem anderen, mit dem LSB (Least Significant Bit) zuerst.
- Nachdem die gesamte Übertragung vorbei ist, wird ein Stopbit (logisch 1) angetroffen.
Vorteile
Der Vorteil von UART ist, dass es Vollduplex-Kommunikation mit zwei Drähten unterstützt. Außerdem benötigt er keinen externen Takt für die Datenkommunikation. Er unterstützt die Fehlerprüfung mit einem Paritätsbit und die Länge der Daten kann leicht geändert werden.
Nachteile
Der größte Nachteil von UART ist, dass er keine Multi-Slave- oder Multi-Master-Konfiguration unterstützt. Und, die Größe des Datenpakets ist auf 9 Bit begrenzt. Der UART ist nicht geeignet für schwere serielle Kommunikation bei hohem Energieverbrauch.
Anwendungen
- Der serielle Debug-Port verwendet den UART-Treiber, um die von der Außenwelt kommenden Daten auszugeben.
- Wir können es verwenden, um Befehle an und von den eingebetteten Geräten zu senden und zu empfangen.
- Die Kommunikation in GPS, GSM/GPRS-Modem, Wi-Fi-Chips, etc. arbeitet mit UART.
- Verwendet in Mainframe-Zugang zu verschiedenen Computern zu verbinden.