RS232 - Interface


zurück zu Interfaces , Elektronik , Homepage


 
Einleitung

Grundlagen

Datenleitungen

Handshake DTE-DCE

Handshake DTE-DTE







zurück


Einleitung

Die aus dem Jahre 1962 stammende RS232-Schnittstelle ist zwar mittlerweile ein Veteran unter den seriellen Schnittstellen in der Computertechnik, aber unter Bastlern und bei industriellen Anwenden ist sie nach wie vor sehr beliebt. Die Ursache dafür sind ihre geringen Ansprüche an Hardware und Software.
nach oben

Grundlagen

RS232 benutzt für die Datenübertragung ein einfaches asynchrones serielles Verfahren.

Seriell bedeutet, dass die einzelnen Bits des zu übertragenden Bytes nacheinander über eine einzige Datenleitung geschoben werden. Asynchron heißt, dass es keine Taktleitung gibt, die dem Datenempfänger genau sagt, wann das nächste Bit auf der Datenleitung liegt. So ein Verfahren kann nur funktionierten, wenn Sender und Empfänger mit genau dem gleichen internen Takt arbeiten, und wenn der Empfänger gesagt bekommt, wann das erste Bit genau anfängt (Synchronisation).

Alle RS232-Leitungen (mit Ausnahme der Masseleitung) arbeiten mit den Spannungspegeln +12V (für eine logische '0') und -12V (für eine logische '1'). (Erlaubt sind jeweils 5V..15V.) Der Datenempfänger erwartet eine Spannung von über +3V für eine 0 und von unter -3V für eine 1.
Für die Steuerleitungen (Handshakeleitungen) bedeutet ON einen hohen Pegel (+5V .. +15V) und OFF einen negativen Pegel (-5V ... -15V).

Da sich diese Spannungspegel nicht besonders gut mit den heutzutage meist verwendeten TTL-Pegeln vertragen, werden in der Regel spezielle Treiberschaltkreise eingesetzt, um diese Pegel auf TTL-Pegel anzupassen ('1' = OFF = 5V; '0' = ON = 0V). Solche Treiberschaltkreise sind z.B. der MAX232 und seine Familienangehörigen.

Um Daten minimalistisch von einer Datenquelle zu einem Datenempfänger zu übertragen, werden eigentlich nur 2 Drähte benötigt - eine Masseleitung und eine Datenleitung. Für eine bidirektionale Verbindung reichen also 3 Leitungen.

Um zu vermeiden, dass der Sender Daten sendet, obwohl der Empfänger noch nicht bereit ist, werden 2 bis 4 zusätzliche Handshakeleitungen benötigt, die weiter unten beschrieben sind.
 

Sampling:
Ich wurde darauf hingewiesen, dass angeblich die Takte von Sender und Empfänger nicht exakt gleich sein müssen, und dass der Empfänger das Signal mit einem Mehrfachen des Bittaktes abtastet, um sich laufend zu synchronisieren. Dem kann ich so nicht ganz zustimmen. Ein solches Oversampling zur Synchronisation ist nur bei seriellen Verbindungen üblich, bei denen sich der Takt auch sicher wieder aus dem Datenstrom rekonstruieren lässt (z.B. Manchestercodierung oder CAN-Bus). Da das bei RS-232 aber nicht gewährleistet ist, wird so etwas hier meistens auch gar nicht versucht. (Ausnahmen bestätigen natürlich auch hier die Regel.)
Allerdings wird von vielen Empfängern die Signalleitung innerhalb eines Bits schnell mehrfach hintereinander abgetastet, und dann der Pegel des Bits aufgrund einer "Mehrheitsentscheidung" bestimmt. Die USART der PICs misst beispielsweise den Pegel eines jeden Bits drei mal. Danach wird schließlich der Pegel eingelesen, der bei den Messungen am häufigsten auftrat (also mindestens zwei mal). Eine Synchronisierung zwischen Sender und Empfänger erfolgt dabei aber nicht.

nach oben

Datenleitungen

Die Daten-Ausgangs-Leitung des Senders (Computers/Terminals)  wird als TXD out (transmit data; manchmal als TX) bezeichnet. Sie wird mit der Daten-Eingangs-Leitung des Empfängers (z.B. Modem) TXD in  direkt verbunden.

einfachste RS232 Verbindung

Die Datenleitung liegt im Ruhezustand auf -12V, also auf dem logischen Pegel '1'. Die Datenübertragung erfolgt byteweise. Bevor ein Byte übertragen werden kann, muss der Empfänger mit dem Sender synchronisiert werden. Das erfolgt durch das Senden eines dem Datenbyte vorgesetzten Startbits mit dem Wert '0'.

Am Beginn des Startbits ändert sich der Pegel der Datenleitung von -12V auf +12V. Das ist für den Empfänger das Zeichen dafür, dass der Datentransfer beginnt. Der Sender legt nun in einem festen Zeitabstand die einzelnen Datenbits des Datenbytes auf die Datenleitung. Am Ende fügt er mindestens ein Stopbit mit dem Wert 1 an. Damit ist die Datenleitung wieder im Ruhezustand.
Im oben dargestellten Bild wird die Bitfolge '10110100' übertragen, da die Übertragung mit dem LSB (also dem letzten Bit) voran erfolgt, ist die wirklich übertragene binäre Zahl B'00101101' oder im hexadezimalen Code 0x2D bzw. 2Dh.

Der Empfänger liest immer in der Mitte der Bits den Spannungspegel aus der Datenleitung, und empfängt so das Byte Bit für Bit.

Das funktioniert natürlich nur, wenn Sender und Empfänger mit der gleichen Geschwindigkeit die Bits schreiben und lesen. Deshalb ist es unbedingt erforderlich, dass Sender und Empfänger vorab auf eine gleiche Datenrate eingestellt werden. Eine Abweichung der Datenraten um mehr als 5% führt zu Lesefehlern, da der Empfänger dann bei den letzten Bits vor bzw nach dem Bit liest.

Die Datenrate wird in Baud (also in Bit pro Sekunde) angegeben. Dabei werden alle Bits (auch Start- und Stopp-Bit) gezählt, und Lücken zwischen den Bytetransfers ignoriert. Deshalb ist die Baudrate der reziproke Wert der Länge eines Bits.  Als Datenraten sind folgende Werte üblich:
 
Datenrate [baud]
300
2400
4800
9600
19200
38400
57600
115200
Bitlänge
3,33 ms
417 µs
208 µs
104 µs
52,08 µs
26,04 µs
17,36 µs
8,68 µs
maximale Kabellänge

3000 ft / 900 m
1000 ft / 300 m 500 ft / 150 m
50 ft / 15 m

15 ft / 5 m
<2 m
maximale Kabelkapazität




2500 pF



Der Standard war ursprünglich für bis zu 19200 Baud spezifiziert worden, und als Standardbaudrate hatte sich 9600 etabliert. Mit moderner Hardware ist aber inzwischen bis zu 1.500.000 Baud technisch realisierbar. Die maximal erreichbare Datenrate nimmt aber auch mit der Leitungslänge ab. Ursprünglich waren maximal 17 Meter (50 Fuß) vorgesehen, und bei dieser Kabellänge sind die ursprünglich geplanten 19200 Baud erlaubt. Deutlich längere Kabel sind machbar, wenn man die Baudrate reduziert. Dabei ermöglicht eine halbierte Datenrate eine 10 mal längere Übertragungsstrecke. Bei 2400 Baud ergibt das eine Kabellänge von 1 km. Versuch das mal mit USB :-)
Einen deutlichen Einfluss auf die erreichbare Kabellänge hat die Kapazität des verwendeten Datenkabels. So sind die 50 Fuß Kabellänge bei 20000 Baud nur bis zu einer Kabelkapazität von 2500 pF spezifiziert.

Nach dem Stopbit kann sofort wieder eine neue Übertragung mit einem Startbit beginnen. Man kann dem Empfänger aber auch etwas mehr Zeit geben, indem man 1,5 oder 2 Stopbits sendet.


Falls der Empfänger seinerseits Daten  zurück senden soll, wird dafür eine weitere Leitung benötigt. Die Daten-Ausgangs-Leitung des Empfängers (Modems)  wird als RXD out (transmit data; manchmal als RX) bezeichnet. Sie wird mit der Daten-Eingangs-Leitung des Senders (Computers) RXD in  direkt verbunden.

An der Namensgebung erkennt man, dass alle Pins aus der Sicht des Computers/Terminals bezeichnet wurden. Auch ist die Bezeichnung Sender und Empfänger bei bidirektionalen Verbindungen nicht ideal. Besser ist es, z.B. von Computer und Modem zu sprechen. In der Praxis nennt man den schnellen Computer DTE und das langsame Modem DCE.

einfache bidirektionale Verbindung
 
 

nach oben

Handshake DTE-DCE

RS232 wurde ursprünglich geschaffen, um Computerterminals (DTE - data terminal equipment) an langsame Modems (DCE - data communication equipment) anzuschließen. Um beide  Geräte zu unterscheiden, hat das Terminal einen SUB-D9-Stecker und das Modem eine SUB-D-9-Buchse. Verbunden werden beide mit einem normalen seriellen Kabel (kein Null-Modem-Kabel!!)

Bei den damaligen DFÜ-Geschwindigkeiten konnte das Modem die Daten nicht so schnell versenden, wie das Terminal sie liefern konnte. Deshalb gibt es im RS232-Standard zwei Steuerleitungen, mit denen der Datenfluss gesteuert (also bei Bedarf gebremst) werden kann.

Die dafür verwendeten Leitungen heißen RTS und CTS. Am Terminal gibt es einen RTS-Ausgang und einen CTS-Eingang. Am Modem gibt es einen RTS-Eingang und einen CTS-Ausgang.
Wenn Hardwarehandshake verwendet wird, dann aktiviert das Terminal zuerst die RTS-Leitung (request to send - darf ich senden?) und fragt damit beim Modem an, ob es bereit ist Daten zu empfangen. Wenn das Modem bereit ist, aktiviert es nun seinerseits die CTS-Leitung (clear to send - bin bereit). Erst nun sendet der Sender auf der TXD-Datenleitung asynchron das oben beschriebene Datenbyte mit Start- und Stopbits.

Ist das Modem irgendwann nicht mehr in der Lage die vom Terminal eintreffenden Daten schnell genug weiterzuverarbeiten, deaktiviert es die Leitung CTS. Daraufhin unterbricht das Terminal den Datentransport solange, bis CTS wieder vom Modem aktiviert wird. Auf diese Art und Weise verschafft das Modem sich Verschnaufpausen.

Eine gleichartige Bremse für den Datentransfer vom Modem zum Terminal gibt es (eigentlich) nicht. Man ging davon aus, dass das schnelle Terminal immer in der Lage ist, den Datenstrom des langsamen Modems zu verarbeiten.

Es existieren aber noch die beiden Signalleitungen DTR (data terminal ready) und DSR (data set ready). Am Terminal gibt es einen DTR-Ausgang und einen DSR-Eingang. Am Modem gibt es einen DTR-Eingang und einen DSR-Ausgang. Diese Leitungen werden vom Terminal (DTR) und vom Modem (DSR) ständig auf ON gehalten. Sie zeigen dem jeweiligen Partner nur an, dass das andere Gerät angeschlossen und generell zur Arbeit bereit ist. Für die byteweisen Flusskontrolle waren sie ursprünglich nicht vorgesehen. Bei modernen Geräten lassen sie sich aber ähnlich wie RTS und CTS einsetzen, um den Datenfluss vom Modem zum Terminal zu bremsen.

Anschluß mit Handshake-Signalen

Heute sind die DCEs immer noch die Modems, aber auch Mäuse und viele Eigenbau Bastelprojekte.

Die Datenflusskontrolle (Handshake) eines RS232-Ports am PC lässt sich ein- und aus-schalten. Auch wenn das Eigenbaugerät keine Datenflusskontrolle benötigt, sollte man doch immer damit rechnen, dass der PC auf Hardware-Datenflusskontrolle eingestellt ist. In diesem Fall sollte man ihm die richtigen Signale vorgaukeln.

Eine Brücke zwischen RTS und CTS sorgt dafür, dass immer wenn der Computer mit RTS um Sendeerlaubnis fragt, er ein CTS als Erlaubnis zurückbekommt.
Ebenso kann man DSR und DTR untereinander verbinden, um ein angeschlossenes funktionsbereites DCE zu signalisieren.

Anschluß mit vorgetäuschten Handshake-Signalen

Falls Handshake gewünscht wird, dann sind in den meisten Fällen die Signale RTS und CTS dafür ausreichend. In diesem Fall ist die nachfolgende Verkabelung ausreichend.

Anschluß mit  RTS/CTS-Handshake-Signalen

nach oben

Handshake DTE-DTE (Nullmodemkabel)

Auch wenn RS232 geschaffen wurde, um Computer (DTE) an langsame Modems (DCE) anzuschließen, ist es heute durchaus üblich, zwei Computer direkt mit einem RS-232-Kabel zu verbinden. Da beide Computer Stecker (also keine Buchsen) haben, ist ein spezielles Kabel mit zwei Buchsen erforderlich. Da ein Modem nicht vorhanden ist, nennt man dieses Kabel Nullmodemkabel.

Verbindung zweier Computer via Nullmodemkabel

Nun muss jeder Computer seinem Gegenüber ein Modem vortäuschen. Deshalb müssen TXD/RXD, DSR/DTR und CTS/RTS über Kreuz miteinander verbunden werden. Die Flusskontrolle funktioniert in beide Richtungen.

nach oben

zurück zu Interfaces , Elektronik , Homepage

Autor: sprut
erstellt: 09.05.2004
letzte Änderung: 03.11.2010