Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Grundlagen zu seriellen Schnittstellen (RS232)
#1
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.
  • Signalisieren die Spannungen wirklich Daten? Ist es "zufällig" eine Störspannung?
  • Welche Spannung stellt die binäre "0" dar? Welche die binäre "1"?
  • Aus wie vielen Bit besteht ein Zeichen (5-8)?
  • Kommt der größte Bitwert zuerst (MSB-Bit) oder der kleinste (LSB-Bit).
  • Wie erkennt man Übertragungsfehler?

  • Weitere Herausforderungen:
  • Aussendungen der Gegenseite anhalten/ganz stoppen?
  • Daten von Steuerzeichen unterscheiden?
  • Zeichen werden mit welchem Bitmuster dargestellt?

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 
  • START-Bit (MARK)
  • gefolgt von den (n=5..9) Daten-Bits
  • einem optionalen Parity-Bit
  • und ein / anderthalb / zwei STOP-Bits (SPACE)
wird als Frame bezeichnet.

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 
  • 1 Start
  • 8 Daten
  • (optional) ein Parity
  • mindestens ein STOP-Bit 

(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:
  • Exakt zwei Teilnehmer (Punkt-zu-Punkt)
  • FULL-Duplex
  • asymmetrische Spannungsübertragung mit Massebezug

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
  • 8250
  • 16450
  • 16550

Als Z80-SIO
  • Z8440

ACIA vielfach in Homecomputern
  • 6551
  • 6850

Level-Shifter / Pegelwandler
  • MAX232
  • MC1488
  • MC1489
  • SN75188
  • SN75189
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste