![]() |
|
Grundlagen zu seriellen Schnittstellen (RS232) - Druckversion +- LK0NOD - Forum - Community - CB Funk 11m (https://lk0nod.de/forum) +-- Forum: PACKET RADIO (https://lk0nod.de/forum/forum-193.html) +--- Forum: Grundlagen für Einsteiger Support (https://lk0nod.de/forum/forum-172.html) +--- Thema: Grundlagen zu seriellen Schnittstellen (RS232) (/thread-913.html) |
Grundlagen zu seriellen Schnittstellen (RS232) - Retrofan - 19.04.2026 Grundlagen zu seriellen Schnittstellen (RS232) Serielle Schnittstellen (RS232/RS422) ermöglichen Computern, Daten mit externen Geräten (e.g. TNC / Drucker / Modem) auszutauschen. Im Kontext Packet-Radio geht es hier speziell um die 1:1 Verbindung eines Computer mit einem TNC (Terminal-Network-Controllers). Also um die Digital-Schnittstelle eines TNC. Computer TNC (DTE) (DCE) +--------+ | | COM1 |-------------------- Gerät 1 (meist Maus) | | | COM3 |-------------------- Gerät 2 (TNC-2) | | (ca. 15 Meter) an DB25 +--------+ mit DB9 Als die Schnittstelle (ab 1962) normiert wurde, waren noch mechanische Schreibmaschinendrucker als Terminals üblich. Diese wurden dann über Akustik-Koppler (später Modems) mit weit entfernten Systemen verbunden. Aus dieser Zeit stammen noch Begriffe wie DTE/DCE und Mark und Space. +-----+ +-----+ +-----+ +------+ | DTE | <-> | DCE | ..... (Telefonleitung) .... | DCE | <-> | DTE | +-----+ +-----+ nur Punkt-zu-Punkt +-----+ +------+ Terminal Modem X.25 Modem Terminal Früher: DTE meinte meist Terminal (Data Terminal Equipment) DCE meinte Data Communication Equipement, damals meist Akustik-Koppler (später: Modems) Heute (für Packet-Radio) nutzen wir einen Computer statt Terminal (DTE) einen TNC statt Akkustik-Koppler (DCE) ein Funkgerät (ermöglicht mehrere Funkstrecken / Konversationen gleichzeitig) CB 11m AFU 2m Y ... Y | | Digital Analog | AX.25 | Analog Digital +-----+ RS +------+ +-----------+ +-----------+ +-----+ +------+ | DTE | <-> | DCE | <-> | Funkgerät | 1:n | Funkgerät | <-> | DCE | <-> | DTE | +-----+ 232 +------+ +-----------+ +-----------+ +-----+ +------+ Computer TNC TNC Computer mit mit Modem(s) Modem(s) Die Vereinbarung der RS232 Signalnamen erfolgt immer aus Sicht des Terminals (DTE). Das Aussenden von Daten geht immer nur von DTE (Computer) -> TX -> DCE über die Sendeleitung. Der Empfang von Daten geht immer nur zum DTE (Computer) <- RX <- DCE über die Empfangsleitung. Daten im Computer liegen Byteweise (8 Bit), also parallel, vor. Diese Daten werden im Computer von einem UART-Chip in eine serielle Bitfolge konvertiert. Der UART verträgt in der Regel nur die in einem Computer üblichen Spannungen (0-5V). Die bei der RS232-Norm definierten Spannungspegel sind aber für heutige Computer nicht mehr geeignet. Der direkte Anschluss des UART-Chips an das Partnersystem könnte den UART zerstören! Daher schaltet man einen (Spannungs-)Pegelwandler dazwischen. +---+ zeitliche Reihenfolge der Bit +---+ 1 | U | MSB Bits LSB | U | 1 2 |(S)| STOP-> PARITY-> 8 7 6 5 4 3 2 1 -> START -> |(S)| 2 3 | A | +------------------+ +-------------------+ | A | 3 4 | R | | Pegel-Wandler | ------> | Pegel-Wandler | | R | 4 5 | T | +------------------+ +-------------------+ | T | 5 6 | | RS-232C | | 6 7 | | Bipolare Spannung | | 7 8 | | +/-12V (aber nicht 0V) | | 8 +---+ NEGATIVE SPANNUNG für HIGH bei RS232! +---+ TTL-Spannung TTL-Spannung Unipolar 0-5V Unipolar 0-5V Der TNC kommuniziert mit der digitalen Computerschnittstelle (RS-232/DB25-Stecker) in seriellen Bitfolgen. Der zweite Anschluss am TNC ist eine analoge Funk-Schnittstelle zum Funkgerät. Hardware RS232 Spannungspegel RS232-Schnittstelle (elektrisch): (s. auch europäische Norm V28) Arbeitet spannungsbasiert. Bemerkenswert sind die bipolaren Spannungspegel. SPACE V+ ___________ ___________ Logisch "0"| | + 25V | | (typisch: +12V) | | + 3V [Mindestspannung am Empfänger!] 0V ///////////| |////////// (unused/undefined) | | - 3V [Mindestspannung am Empfänger!] Logisch "1"| MARK | (typisch: -12V) |_______| - 25V V- Informationen bei der RS232-Schnittstelle werden über (heute) ungewöhnliche Spannungen PLUS 12V (Zustand 0 / "Space") und MINUS 12V (Zustand 1 / "Mark") übertragen. (Anmerkung: Spannung / (inverse) Logik) Spannungswerte zwischen -3V und +3V sind UNGÜLTIG und werden absichtlich ignoriert, um den Signalabstand zu vergrößern. Grund: Längere Übertragungsstrecken und weniger Anfälligkeit für externe Störsignale. Vorsicht: Das direkte Anschließen von RS232-Spannungspegeln an die I/O-Pins heutiger Computerchips zerstört diese. CPUs und Mikrocontroller vertragen meist nur 1.8V bis 3.3V (bestenfalls noch 5V) am Eingang. (Lösung für Bastler: Pegelwandler/Level-Shifter verwenden!) Anmerkung: Die hohen Spannungspegel der RS232-Schnittstelle können natürlich auch nützlich sein. Beispielsweise haben die BayCom-Modems daraus früher via Spannungsregler die notwendige Betriebsspannung generiert. Verdrahtungsschema Verbindung Computer <-> TNC: Technisch benötigt man: Eine gemeinsame Signal-Masse (GND=Ground / SG=Signal Ground). Da die Schnittstelle Daten in beide Richtungen transportiert (FULL-duplex), gibt es: TX(D) = Transmit Data RX(D) = Receive Data Für die direkte 1:1 Kopplung (der Signale) Computer mit TNC benötigt man diese Verbindungen: Computer Zubehör wie TNC [TERMINAL] [Telefon-Modem] TX -----> TX RX <----- RX GND <----> GND (Signal-Masse/Signal Ground=SG) Die seit den 1960er-Jahren verwendeten Stecker waren 25-Polige D-Sub-Stecker. Diese werden von der RS232-Norm empfohlen (aber nicht vorgeschrieben). Fünfundzwanzig Adern in einem seriellen Kabel machte diese Kabel "unflexibel" und vor allem teuer in der Herstellung. Diesen (empfohlenen) 25-Poligen Anschluss findet man meist an einem TNC für die digitale Schnittstelle zum Computer. Praktisch reichen für die asynchrone Kommunikation jedoch zwischen drei und sieben Adern. Um beim PC-AT sowohl eine serielle als auch eine parallele Schnittstelle auf das Slotblech einer ISA-Steckkarte zu bekommen, musste ein kleinerer Stecker her. Daher verwendet man am PC meist 9-polige D-Sub-Stecker. Das ist auch einfacher zum Löten und bei der Fehlersuche. Die Nummerierung der "Pins" weicht bei beiden Steckervarianten (DB9 vs. DB25) leicht ab. (Im Zuge weiterer Miniaturisierung werden ggf. auch 8-polige Mini-DIN-Stecker oder RJ45-Stecker genutzt.) Das Prinzip bleibt das gleiche - man verbindet die benötigten Signale. Tipp: Überprüfen Sie mit einem Durchgangsprüfer/Multimeter die Verbindungen. Das für den TNC geeignete 3-Draht Kabel (ohne HW-Handshake) würde beim Durchgangstest eine 1:1 Verbindung besitzen: von TX(D) zu TX(D) hier sendet der Computer Daten an den TNC von RX(D) zu RX(D) hier erwartet der Computer Daten von dem TNC und GND zu GND finden. Sonderfall: Crossover-Kabel Nimmt man das o.g. 1:1 Kabel (DTE <-> DCE) zur Verbindung von zwei Computern, wird die Kommunikation nicht funktionieren. Beide Computer würden Ihre Daten über die gleiche Leitung absenden, aber keine Seite würde den Pin der Empfangsleitung prüfen. Für den Sonderfall gibt es spezielle Crossover-Kabel. Diese sind nur für eine Kommunikation zwischen Computer (DTE) <-> Computer (DTE) gedacht! Computer Computer TX --------> RX RX <------- TX GND <-------> GND (Signal-Masse/Signal Ground=SG) Die Verwendung eines solchen (Crossover-)Kabels für die Kommunikation von Computer zu TNC wird daher nicht erfolgreich sein. Leider kann man die interne Drahtanordnung innerhalb eines Kabels von außen nicht direkt erkennen. Sonderfall: Hardware-Handshake-Kabel Die Verarbeitung von Daten durch ein Gerät benötigt immer Zeit. Ist der Sender zu schnell für den Empfänger, dann können Daten verloren gehen. Viele Chips (UARTS) haben nur sehr kleine Puffer, um Informationen zwischenzuspeichern (e.g. acht Bytes). Wenn der Puffer voll wird, muss man die Datenaussendung der Gegenseite anhalten. Das geht in einigen Fällen nur über Steuerzeichen (XON/XOFF). Konkret, wenn keine Signalleitung verfügbar ist (Stichwort: Modemverbindung über das Telefon-Netz). Andernfalls kann man das auch gleich schaltungstechnisch (in Hardware) realisieren. Dies wird dann Hardware-Handshake genannt. Und Überraschung: Es gibt da wieder mehrere Varianten. Beispiele: RTS/CTS (RTS=Ready-to-send/CTS=Clear-to-send) DSR/DTR (DSR=Data-Set-Ready/DTR=Data-Terminal-Ready) Achtung: Nicht jede Hardware unterstützt ein Hardware-Handshake. Aber es gibt auch Hardware die das zwingend haben möchte. Auch zu beachten: Die Terminal-Software muss ggf. auch erst auf ein Hardware-Handshake konfiguriert werden. Die Herausforderung für eine erfolgreiche Kommunikation: Serielle Daten werden bitweise nacheinander übertragen. Die zwei Geräte tauschen einzelne(!) Zeichen asynchron (d.h. ohne gemeinsamen Takt) aus. D.h. die Uhren der Geräte müssen nicht synchron laufen. Herausforderungen auf Seite des Empfangsgerätes: Es kann zwar den Spannungsabstand der Empfangsleitung (RxD) zur Signalmasse (SG oder GND) feststellen, schwieriger ist es festzustellen, wann zeitlich die einzelnen Bits vorliegen.
Beide Geräte müssen ein gemeinsames Verständnis für das verwendete Kommunikations-PROTOKOLL haben. Ggf. auch noch über die Darstellung von Zeichen/Sonderzeichen. ASYNC-PROTOKOLL (Logische Sicht) Asynchrone (START/STOP-) Kommunikation wird benutzt, wenn man einzelne Zeichen übertragen möchte und die Zeitabstände zwischen den einzelnen Zeichen unterschiedlich sind. Eine separate Taktleitung bei Funkverbindungen ist darüber hinaus nicht realisierbar. 8N1 SPACE _________ ................................__________________ | | | | | | | ^ | IDLE | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | S | IDLE... | | | T | | | O | | | P | | | | |<----------------------------->| 1 | | (8 Daten-Bits) | |_____| | MARK 7E1 SPACE _________ ................................_______________ | | | | | | | | | ^ | IDLE | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | P | S | IDLE... | | | A | T | | | R | O | | | I | P | | | T | | |<------------------------->| Y | 1 | | (7 Daten-Bits) | | |_____| | | MARK |<--------------------------------------->| (Frame enthält ein Zeichen) Frame Die Einheit der Bits vom
Der Start einer Datenübertragung wird zunächst per START-Bit angekündigt. Der Ruhezustand ist definiert (z.B. +12V bei RS232). Die Übertragung startet aus dem definieren Ruhezustand mit einem Flankenwechsel. Wechselt also in den andern definierten Spannungspegel (z.B.von +12V nach -12V). Dieser Spannungspegel wird jetzt für die Zeitdauer der Übertragung einer Signalinformation (also ein Bit) auf einen anderen Zustand gewechselt. Nach erfolgter Ankündigung werden n Bit (Früher 7 Bit heute: 8 Bit) auf die Leitung geschickt. Optional folgt genau ein Prüf-Bit (Parity) Danach kommen noch eventuelle Zeiten zur Übertragung von STOP-Informationen ("STOP-Bits"), d.h. der Zustand wechselt für (mindestens) die Zeitdauer von 1-2 Bit auf SPACE. Der SPACE-Zustand bleibt bestehen, bis das nächste START-Bit ("Mark") empfangen wird und der Vorgang wieder von Neuem startet. Das Empfangsgerät überprüft (im UART) gemäß seiner Einstellungen, ob ein Fehler vorliegen könnte (hierzu wird das Parity-Bit ausgewertet). Sofern ein "vermeintlicher" Fehler vermutet wird, wird das über einen FRAME-ERROR an die Software im Gerät signalisiert. Was die Software damit macht, ist dann eine andere Sache. Konkret heißt das: Man muss sich (beiderseitig) vor der erfolgreichen Kommunikationsaufnahme auf eine gemeinsame Geschwindigkeit (z.B. 9600 Baud) für beide Geräte einigen. Am TNC wird das meist von außen über Mäuseklaviere oder Jumper eingestellt. Für die Kommunikation (Computer <-> TNC) ist die Geschwindigkeit auf der seriellen Leitung entscheidend. (Vorsicht: Bitte nicht mit der Einstellung für die analoge Funk-Geschwindigkeit (1k2 im CB-Funk) verwechseln!) Wie viele Bits werden zur Darstellung eines Zeichen benutzt? 2^7 oder 2^8. Das muss auf beiden Geräten gleich konfiguriert werden. Möchte man nach der Übertragung des letzten Bits eine zeitliche Pause von einem , anderthalb oder zwei STOP-Bits? Auch der Versand eines Kontroll-Bits (Parity) kann konfiguriert werden. Keine Prüfsumme (N=No), Gerade Prüfsumme (E=Even), Ungerade Prüfsumme (O=Odd). Achtung: PC (Betriebssystem/Software) und TNC müssen mit den gleichen Einstellungen arbeiten. Anhand der Skizze oben kann man sich das klar machen. Wenn der Computer mit 8N1 Daten schickt, gibt das mit hoher Wahrscheinlichkeit ungültige Daten beim TNC, wenn der auf 7E1 interpretiert. (-> Frame error im TNC). Wenn der TNC auf 7E1 konfiguriert ist und der Computer 8N1 erwartet, dann zeigt der Computer dagegen unsinnige Zeichen am Terminal (weil die Parity dann die Zeichen verfälscht). Typische Terminal-Emulationseinstellungen Schrittgeschwindigkeit in Baud: 9600 (PC-typisch), 19200 (das kann nicht jede Hardware bzw. Software) Datenbits: 8 (typisch) Prüfsumme: No (typisch) Stop-Bits: 1 (typisch) Die typische Einstellung am Terminal-Emulationsprogramm des Computers: 9600 Baud 8N1 bei TNC mit Host-Mode oder falls man einen TNC noch mit der orginal TAPR-Firmaware im (native) Terminal-Mode betreibt: 9600 Baud 7E1 Anmerkung: Die Geschwindigkeit muss für beide Geräte (Computer und TNC) identisch konfiguriert werden. D.h. man könnte z.B. 1200 / 2400 / 4800 / 9600 verwenden. (Tipp: Die gewählte Zahl durch 75 geteilt sollte eine Zweierpotenz liefern) Die digitale Schnittstelle Computer <-> TNC darf dabei schneller konfiguriert werden, als die im TNC verbauten Funk-Modem(s) (1200 Baud / AFKSK). Eine asychrone Übertragung erzeugt einen gewissen Zusatzaufwand. D.h. um 8 Bit (Netto-Daten) zu übertragen, benötigt man
(Brutto-Daten: 10-12 Bit) Daumenregel: 10 Bit um ein Byte zu übertragen. Zusätzlich kann man für sein Terminal konfigurieren, ob man bestimmte Zeichen zum Anhalten/Fortsetzen der Übertragung nutzen möchte. Die Einstellung heißt meist XON/XOFF (oder Software-Handshake). Die verwendeten Zeichen sind dabei extra so gewählt, dass sie in "normalen" Texten nicht vorkommen. CTRL-S hält die Übertragung an CTRL-Q setzt die Übertragung fort Falle: Bei der Übertragung binärer Daten oder Dateien können diese aber -unabsichtlich- die Übertragung zwischen Computer und TNC anhalten. Es gäbe auch noch die Alternative einer Hardware-Handshake-Konfiguration (entsprechende Geräte und Kabel vorausgesetzt). Eventuell kann man in der Terminal-Emulation auch noch weitere Dinge konfigurieren: Auswahl zwischen mehreren vorhandenen Schnittstellen: COM1 ... COM4 Bei manchen Terminal-Emulationen (e.g. Tera Term) kann man Pausenzeiten zwischen der Übertragung von Zeichen oder Zeilen konfigurieren. Das wird eher selten benötigt. Bei Computern unter DOS Adressregister serieller Schnittstellen, z.B. 2F8h/3F8h/2E8h/3E8h Konfiguration Interrupt-Request (IRQ) Nummer. IRQ können zu Konflikten führen. Praktisch sind daher beim PC nur zwei COM-Ports aktiv nutzbar! COM1 / IRQ4 / Port 3F8h (e.g. für Maus) unter Linux: /dev/ttyS0 (s. man setserial) COM2 / IRQ3 / Port 2f8h (e.g. für TNC) unter Linux: /dev/ttyS1 COM3 / IRQ4 / Port 3E8h unter Linux: /dev/ttyS2 COM4 / IRQ3 / Port 2E8h unter Linux: /dev/ttyS3 --------------------------------------------------------------------------------------------------- Zum Nachschlagen: Begriffe / Erklärungen rund um serielle RS232-Schnittstellen (typischerweise für asynchrone Kommunikation verwendet) Eigenschaften RS232:
logisch "1" der LOW-Pegel (MARK) ist <= - 3 V logisch "0" der HIGH-Pegel (SPACE) ist >= + 3 V maximal +/- ca. 25 Volt (im PC-Bereich typisch: +/- 12V) Kabellänge max. 15-20 Meter Damit bekommt man ca. 20 Kilobits/s (19.200 Baud) hin (im Bereich der Norm). Mit hochwertigen Kabeln ggf. auch bis 115 Kilobits/s Letzteres wird aber von alten Rechnern nicht beherrscht. Normen: RS-232C offiziell EIA-RS232C genannt. Der letzte Buchstabe kennzeichnet die Revision des Standards (aktuell "F" statt "C") RS-422A ähnlich RS-232C arbeitet aber mit differentiellen Signalen (symmetrische Spannungsübertragung) RS-485 verbesserte Version von RS-422 V24 Europäische Norm für RS-232C V28 Europäische Norm für Spannungspegel bzgl. V24/RS-232C DIN66020/66021 UART/ACIA Chip für asynchrone Kommunikation (Universal Asynchronous Receiver)/(Asynchronous Communication Interface Adapters) USART Chip für synchrone oder asynchrone Kommunikation Geschwindigkeit/Datenübertragungsrate: Baud : Anzahl der (maximalen) Signalwechsel zwischen Mark und Space pro Sekunde (1200 Baud entsprechen dabei einem Rechtecksignal von 600 Hz) bps: : Durchsatz (logischer) Bit pro Sekunde Baud ist nicht unbedingt Bit/s (!) Es gibt Modulationsarten die mehr als 1 Bit in einem Schritt übertragen. cps : Chars per Second Netto Übertragung von Zeichen pro Sekunde (meist bps/10 ... w.g. 8N1) TTY : Teletype ein 5 Bit-Code (für 32 Zeichen) EBCD : Ein 6-Bit-Code mit dem man 64 unterschiedliche Zeichen darstellen kann US-ASCII : Amerikanischer Standard um Zeichen zu kodieren. Die (amerikanische) ASCII-Norm verwendet nur 7 Bit und kann 128 Zeichen darstellen. EBCDIC : Mainframe-Standard um Zeichen zu kodieren: Ein 8 Bit-Code COM1-4 : Namen (im BIOS bzw. DOS) für serielle Schnittstellen in Personal-Computern älterer Bauart. Diese werden dort meistens über DB9-Anschlüsse bereitgestellt. FRAME : Start/Daten/Parity/Stop-Bits (in Bezug auf serielle Schnittstellen). Datenbits: 5-9 (heute meist 8, früher auch 7) pro Zeichen Datenflusskontrolle RTS/CTS Signalnamen (aus der Sicht des Computers!) RxD Received data DATEN TxD Transmitted data DATEN SG Signal-Ground Betriebserde RTS Request to send FLOW-Control CTS Clear to send FLOW-Control DTR Data terminal ready DSR Data set ready DCD Data carrier detect RI Ring indicator Chips für serielle Kommunikation UART Chips in PCs
Als Z80-SIO
ACIA vielfach in Homecomputern
Level-Shifter / Pegelwandler
|