3.18. UART-Grundlagen¶
Ein UART (Universal Asynchronous Receiver-Transmitter) ist die älteste und einfachste Methode, um Bytes zwischen zwei Mikrocontrollern oder zwischen einem Mikrocontroller und einem Host-PC zu übertragen. Zwei Leitungen transportieren die Daten – eine für jede Richtung – und eine gemeinsame Masse führt das Signal zurück. Keine Seite betreibt einen gemeinsamen Takt; sie einigen sich vorab auf eine Baudrate und gewinnen das Bit-Timing aus der Datenleitung selbst zurück.
3.18.1. Das Frame¶
Jedes Zeichen auf der Leitung wird in ein Frame verpackt: ein Startbit, die Datenbits, ein optionales Paritätsbit und ein oder zwei Stoppbits.
Ein UART-Frame: ein Startbit, acht Datenbits und ein Stoppbit, jeweils eine Bitperiode (1 / baudrate Sekunden) breit.¶
Die Leitung ruht im Leerlauf auf High. Der Empfänger achtet auf eine fallende Flanke, die den Beginn eines neuen Frames markiert. Anschließend tastet er die Datenleitung einmal pro Bitperiode ab – typischerweise in der Mitte jedes Bits – und setzt die Bits wieder zu einem Zeichen zusammen. Das Stoppbit führt die Leitung zurück in den Leerlauf, damit das nächste Startbit erkannt werden kann.
3.18.2. Die Baudrate¶
Die Bitperiode – und damit die Geschwindigkeit der Verbindung – wird durch die Baudrate festgelegt, die Anzahl der Bits pro Sekunde. 9600, 19200, 38400, 57600, 115200, 230400, 460800 und 921600 sind die Standardwerte; 115200 ist der am häufigsten verwendete Standard. Beide Enden müssen sich auf die Baudrate bis auf wenige Prozent genau einigen, sonst tastet der Empfänger die Bits an den falschen Stellen ab und die Daten kommen verstümmelt zurück.
Höhere Baudraten übertragen mehr Daten pro Sekunde, sind aber empfindlicher gegenüber Kabellänge, Kapazität und der Präzision der Takte an beiden Enden. Für kurze Verbindungen zwischen zwei Boards auf derselben Werkbank funktionieren 115200 bis 921600 problemlos.
3.18.3. Verdrahtung¶
Eine UART-Verbindung verwendet drei Leitungen:
UART-Verdrahtung: TX auf einem Board geht zu RX auf dem anderen, und beide Massen werden zusammengeführt.¶
TX → RX, in beide Richtungen. Der Sende-Pin jedes Boards ist der Empfangs-Pin des anderen Boards. Ein häufiger Anfängerfehler ist, TX → TX zu verdrahten – zwei Ausgänge, die gegeneinander arbeiten, ohne dass an einem der Empfänger Daten ankommen.
Gemeinsame Masse. Die Signalpegel beziehen sich auf Masse, daher müssen die beiden Boards eine gemeinsame Masse haben, sonst sieht der Empfänger die falsche Spannung auf der Leitung.
3.18.4. Spannungspegel und physikalische Schichten¶
Die Signalpegel an den UART-Pins der Kamera sind 3,3 V CMOS: Masse für eine logische Null, 3,3 V für eine logische Eins. Alles, was 3,3-V-CMOS-UART spricht – ein anderer Mikrocontroller, ein auf 3,3 V eingestellter USB-zu-Seriell-Adapter, ein 3,3-V-GPS-Modul – kann direkt verdrahtet werden.
Bemerkung
5-V-CMOS-UART-Geräte (ältere Mikrocontroller, bestimmte GPS-Module, einige ältere Sensor-Breakouts) sprechen dasselbe UART-Framing mit 5-V-Logikpegeln. Sie direkt an die Kamera zu verdrahten ist unsicher: Ein 5-V-TX, der den RX der Kamera ansteuert, überschreitet die absolute maximale Eingangsspannung bei Kameras, die nicht 5-V-tolerant sind, und der 3,3-V-TX der Kamera erreicht möglicherweise nicht den High-Schwellenwert des 5-V-Geräts für eine saubere logische Eins.
Die Umsetzung zwischen den beiden Spannungen erfordert einen aktiven Leitungstreiber – einen dedizierten bidirektionalen Pegelwandler-IC mit eigenen Treibertransistoren auf beiden Seiten jeder Leitung. Die passiven MOSFET-und-Pull-up-Wandler aus Pegelumsetzung reichen hier nicht aus: Ihre steigenden Flanken beruhen darauf, die Leitung über einen Widerstand aufzuladen, was bei Schaltgeschwindigkeiten in Ordnung ist, für UART aber viel zu langsam. Bei 115200 Baud dauert jedes Bit etwa 8 µs, und der RC-Anstieg des passiven Wandlers verschmiert ein Bit ins nächste.
Ein aktiver Leitungstreiber erzeugt saubere Flanken in beiden Richtungen bei voller UART-Geschwindigkeit. Wählen Sie ein Bauteil, das für die Baudrate ausgelegt ist, mit der die Verbindung betrieben wird, verdrahten Sie TX und RX der Kamera mit der 3,3-V-Seite des Wandlers und verdrahten Sie TX und RX des 5-V-Geräts mit der 5-V-Seite des Wandlers.
Drei ältere physikalische Schichten verwenden dasselbe Framing, aber unterschiedliche Spannungen und benötigen einen Pegelumsetzer zwischen sich und einem 3,3-V-Mikrocontroller:
RS-232. Wird von seriellen Schnittstellen an Desktop-PCs und einigen Industriegeräten verwendet. Die Leitung schwingt etwa zwischen
±5 Vund±15 V, mit Leerlauf an der negativen Schiene. Invertierte Polarität und hohe Spannung im Vergleich zu CMOS; ein Chip aus der Familie MAX232 / MAX3232 (oder ähnlich) übernimmt die Umsetzung.RS-422. Ein differenzieller Signalstandard für Punkt-zu-Punkt-Verbindungen (ein Treiber, bis zu zehn Empfänger). Der Treiber sendet über ein symmetrisches Leitungspaar; der Empfänger sieht die Differenz zwischen den beiden und ignoriert unterwegs aufgenommenes Gleichtaktrauschen. Vollduplex-Verbindungen verwenden zwei Paare – eines für jede Richtung. RS-422 reicht je nach Baudrate über zehn Meter bis zu einem Kilometer, und ein RS-422-Transceiver-Chip sitzt zwischen TX / RX der Kamera und dem symmetrischen Paar.
RS-485. Der Multidrop-Verwandte von RS-422 – dieselbe differenzielle Signalisierung, aber so ausgelegt, dass bis zu 32 Treiber und Empfänger an einem Bus angeschlossen werden können. Die meisten Verbindungen sind halbduplex auf einem einzigen Paar, wobei sich Treiber und Empfänger jedes Knotens dieselben Leitungen teilen und die Software regelt, wer spricht. Wird in industriellen Automatisierungsbussen (Modbus, DMX512, Profibus) verwendet, wo die Leitungen weit verlaufen und das Rauschen stark ist; ein RS-485-Transceiver-Chip sitzt zwischen TX / RX der Kamera und dem differenziellen Paar.
Beide senden auf der zugrunde liegenden Bit-Ebene weiterhin UART-Frames. Die machine.UART-Konfiguration der Kamera (Baudrate, Bits, Parität, Stoppbits) ist dieselbe, unabhängig davon, welche physikalische Schicht das Signal auf der anderen Seite des Transceivers transportiert.