|
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.
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:
|
|
|
4800 |
|
|
|
|
|
|
|
|
208 µ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.
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.
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.
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.
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.
Autor: sprut
erstellt: 09.05.2004
letzte Änderung: 03.11.2010