IT-Academy Logo
Sign Up Login Help
Home - Hardware - Anschlüsse - Die serielle Schnitstelle



Die serielle Schnitstelle

Mit der seriellen Schnittstelle beschäftigt sich kaum ein Computerbenutzer. Die Maus oder das Modem werden angeschlossen und sofern es funktioniert, gibt es keinen Grund, sich weiter mit diesem Bauteil auseinanderzusetzen. Unternimmt man das dennoch, dann bemerkt man, dass es gerade bei dieser Schnittstelle feine Unterschiede gibt. Es gibt zwar den Standard der RS232-Schnittstelle, aber die Chips unterscheiden sich trotzdem voneinander. Ein Teil der Chips (meist früheren Baujahres) haben Fehler und eine Weiterentwicklung ermöglicht zum Beispiel höhere Geschwindigkeiten.


Autor: Stefan Schultheis (schulti)
Datum: 16-03-2002, 12:28:42
Referenzen: Keine.
Schwierigkeit: Anfänger
Ansichten: 16049x
Rating: 6.43 (7x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Vorwort

Anfang 1996 kam mir die Idee, meine zwei Computer zu verbinden. Ich wusste von den (abgesehen von einem Netzwerk) zwei üblichen Verbindungsarten.
Man kann eine parallele Verbindung erstellen, also zwei Computer mittels der parallelen Schnittstelle und eines "Laplink"-Kabels zusammenhängen oder man verwendet dazu die seriellen Schnittstellen und ein serielles Nullmodem-Kabel. Erst zu diesem Zeitpunkt habe ich gesehen, wie sehr es auf Schnittstellentypen und -versionen ankommt.

Ich habe mich weiter in die Materie eingearbeitet und bin auf einige sehr interessante Merkmale der seriellen Schnittstelle gestoßen.

Einleitung

Will man Daten über längere Strecken mit hohen Geschwindigkeiten übertragen bietet sich die serielle Schnittstelle ausgezeichnet an. In der Minimalvariante benötigt man nur eine Datenleitung und die "Masse", also zwei Pole. Pro Takt kann ein "Bit" über die Datenleitung übertragen werden.

Ein Bit ist ein Spannungszustand. Ein Bit kann gesetzt sein, d.h. Spannung fließt (1) oder es ist nicht gesetzt (0). So können Daten binär übertragen werden (z.B.: 01101011). Der Sender zerlegt dabei ein Zeichen in seinen eindeutigen binären Code und überträgt ihn. Der Empfänger setzt die empfangene Kette wieder zu demselben Zeichen zusammen und das Zeichen wurde erfolgreich übertragen.

Die Geschwindigkeit der Übertragung hängt vom Takt ab. Nehmen wir zur Vereinfachung an, ein Computer überträgt ein Bit pro Sekunde. Es wird also innerhalb einer Sekunde ein Zustand (Bit) übertragen. Da ein Zeichen 8 Bit hat, benötigen wir 8 Sekunden, um ein Zeichen zu übertragen (dabei vernachlässigen wir, dass bei der Kommunikation mit dem RS232-Protokoll auch Steuerbits (Start-, Stopp- und Paritätbits) übertragen werden (siehe Kapitel 7.1).
Bei der Übertragung mit seriellen Schnittstellen verwendet man den Ausdruck "Baud". Ein Baud ist ein Bit pro Sekunde. Schafft unsere Leitung also 2400 Baud, so werden 2400 Bit pro Sekunde "geschaufelt". 2400Bit : 8 ergeben maximal 300 übertragene Zeichen pro Sekunde. Bei Modems werden meist Baudraten bis zu 33.600 angegeben. Dabei handelt es sich um den Datenstrom nach einer Komprimierung. Modems senden mit einer Geschwindigkeit von maximal 25.000 Baud. Die Daten werden jedoch vor dem versenden komprimiert ("gepackt"). Dadurch scheint es, als könnte das Modem 33.6KBaud übertragen (siehe Kapitel 4.1).

Ähnlich der seriellen Schnittstelle ist die parallele Schnittstelle. Wie der Name schon sagt, laufen hier Daten parallel. Die einfachste Variante einer parallelen Schnittstelle besteht aus 8 Datenleitungen und der Masse. Die Daten werden also 8mal schneller transportiert, da mit einem Takt gleich 8 Zustände parallel (gleichzeitig) übertragen werden.

Warum greift man dann lieber zu einer seriellen Verbindung?
Meist ist die Geschwindigkeit nicht vordergründig. Die von der seriellen Schnittstelle gebotene Übertragungsrate ist ausreichend.
Ein serielles Kabel besteht aus nur zwei Leitungen, was bei längeren Strecken wesentlich billiger ist. Außerdem ist diese Art der Verbindung wesentlich stabiler (d.h. weniger fehleranfällig).

Die RS-232-Schnittstelle - Elektrische und mechanische Daten

Wenn wir von einer seriellen Schnittstelle sprechen, dann meinen wir eine Schnittstelle, die nach dem RS-232-Standard gefertigt ist.
Dieser Standard heißt auf deutsch V.24 und wurde vom Deutschen Institut für Normung (DIN) mit den Nummern DIN66020, 66021 und 66259 festgelegt.

Man unterscheidet - ausgehend von diesen DIN-Normen - zwei Schnittstellentypen:

Der "große" Stecker hat 25 Pole. Der Anschluss besteht aus einem männlichen 25poligen Sub-D-Stecker für den Computeranschluss und einem dazupassenden 25poligen Sub-D-Stecker weiblichen Formats.

Der "kleine" Stecker ist die rationalisierte Variante vom großen Stecker. Dieser Anschluss unterscheidet sich lediglich in der Anzahl der Pole. Er besitzt nur 9 Pins.

Wie ich schon in der Einleitung aufgezeigt habe, besitzen die meisten Computer heutzutage zwei serielle Anschlüsse. Unter Betriebssystemen wie DOS und allen dazu kompatiblen (Microsoft® Windows 95, Windows 97, Windows NT und IBM® OS/2) kann der Computer bis zu vier dieser Schnittstellen verwalten. Diese werden mit COM#:, also COM1: für die erste und COM2: für die zweite Schnittstelle benannt.

In anderen Systemen, wie z.B. UNIX/LINUX, kann der PC - je nach Version - 10, 20 oder mehr Ports verwalten.

Die Kommunikation über diese Schnittstelle ist "systemunabhängig". Normalerweise gibt es Schwierigkeiten, will man Daten von einem Großrechner auf seinen Laptop übertragen. Wenn beide jedoch mit seriellen Schnittstellen ausgerüstet sind (und das sind sie höchstwahrscheinlich), dann kann es keine hardwaremässigen Schwierigkeiten geben. Das einzige, worum sich der Benutzer kümmern muss, ist, dass beide dasselbe Protokoll verwenden. Aber auch das bereitet kaum Probleme, da es ein zur RS232-Schnittstelle passendes gleichnamiges Protokoll gibt, das sich als das Standardprotokoll für diese Schnittstelle etabliert hat und von fast jedem mit einer seriellen Schnittstelle ausgerüsteten Gerät standardmäßig unterstützt wird.

Das Modem- Wie funktioniert es?

Die ursprüngliche Idee der seriellen Schnittstelle war, ein Modem an den Computer zu koppeln.
Ein Modem ist das Bindeglied zwischen Telefonnetz und Computer. Mit Hilfe des Modems hat man die Möglichkeit, mit der ganzen Welt in Verbindung zu treten.
Das Wort Modem setzt sich zusammen aus Modulator/Demodulator. Ein solches Gerät wandelt Computersignale, die es über die serielle Schnittstelle erhält, in Töne um und schickt diese dann über die Telefonleitung zu einem anderen Modem. Das Empfängergerät wandelt wiederum die Töne aus der Telefonleitung in Signale um und sendet sie über die serielle Verbindung in den Empfängercomputer.

Ein Modem ist ein sehr wichtiges und häufig benutztes Gerät. Besonders in letzter Zeit, seit der Popularität des Internets, stieg die Nachfrage nach Modems wieder.
Besonders wichtig beim Kauf eines Modems ist wieder die Geschwindigkeit. Auch hier misst man in Baud. Da eine Telefonleitung jedoch kein ideales Kabel ist bzw. weil die Entfernung wesentlich höher ist, ist die Qualität der Verbindung schlechter. Durchschnittlich kann man annehmen, mit einer Telefonverbindung bis zu ca. 23.000 Bit/Sekunde durch das Kabel jagen zu können.

Es gibt Modems mit Unterstützung für 2.400/9.600/14.400/ 19.600/28.800 und seit neuem für 33.600 Baud, wobei die schnelleren Modems die Daten komprimieren, bevor sie sie in die Leitung schicken.
Bei Modems ab 19.600 hat es nur den Anschein, als hätten sie eine Durchgangsrate von 33.600 Bit/Sekunde. In Wirklichkeit laufen auch hier die Daten mit maximal ca. 23.000 Bit/Sekunde über die Leitung, aber durch die Komprimierung können "scheinbare" Durchgangsraten von bis zu 33.600 Bit/Sekunde erreicht werden.

Das RS-232-Protokoll

Pinbelegung

Ein Computer-Protokoll legt den Ablauf der Übertragung fest. Jedes Programm, das die serielle Schnittstelle benutzen will greift, sofern es vom Programmierer nicht ausdrücklich anders gewünscht ist, auf das RS232-Protokoll zurück. Somit ist ein weltweiter Standard der Datenübertragung geschaffen. Computer in China und Japan übertragen nach den selben Spezifikationen wie Geräte in Amerika, Europa und Afrika.

Im RS-232-Protokoll (auf deutsch V.24-Protokoll) sind sowohl die Funktionen der einzelnen Pole, als auch das Handshaking definiert.
Ein wesentlicher Teil dieses Protokolls ist die Belegung der "Pins". Ein Pin ist ein kleiner Stift am Stecker.
Die Pinbelegungen ersieht man am Besten aus der folgenden Tabelle, die für meine weiteren Ausführungen von entscheidender Bedeutung ist:

Pinnummer Signalbezeichnung Funktion Richtung (vom PC aus betrachtet)
9 pol. 25 pol. RS 232 DIN V24  
1 8 DCD M5 Träger erkannt in
2 3 RXD D2 Empfangsdaten in
3 2 TXD D1 Sendedaten out
4 20 DTR S1 PC bereit out
5 7 GND E2 Signalmasse
6 6 DSR M1 Betriebsbereit in
7 4 RTS S2 Sendeanforderung out
8 5 CTS M2 Sendebereitschaft in
9 22 RI M3 Ankommender Anruf in
1 CG E1 Schutzerde
9 TV+ pos. Prüfspannung out
10 TV- neg. Prüfspannung out
11 CK S5 Hohe Sendefrequenz in
12 2.DCD HM5 HK Träger erkannt in
13 2.CTS HM2 HK Sendebereit in
14 2.TXD HD1 HK Sendedaten out
15 TXC T1 Sendetakt out
16 2.RXD HD2 HK Empfangsdaten in
17 RXC T2 Empfangstakt in
18 nc - (nicht belegt)
19 2.RTS HS2 HK Sendeanforderung out
21 SQD M6 Signalqualität in
23 CH S4 Hohe Empfangsfreq. out
24 nc -
25 nc -

Jeder Pin hat eine genau festgelegte Funktion. Will jemand zwei Computer verbinden, kann er sicher sein, dass das zweite Gerät kompatibel ist.
Die "kleine" serielle Schnittstelle ist rationalisiert. Nur die wichtigsten Funktionen wurden übernommen. Heutzutage wird meist nur mehr mit der kleinen Variante gearbeitet. Selbst wenn ein großer Stecker vorhanden ist, werden nur die 9 "wichtigen" Pole verwendet.

Spannung

Zum Übertragen benutzt der Computer Bit-Signale.
Diese Signale werden über Spannungsstärken übertragen. Will der Computer eine binäre "1" übertragen, so "setzt" er Spannung in die Leitung.

Hierbei hat die serielle RS-232-Schnittstelle eine Besonderheit: Die Übertragung der Daten (dies gilt also nur für die Datenleitungen RXD und TXD) erfolgt mit negativer Logik. Das bedeutet, dass eine "Minus-Spannung" als "Hi" gewertet wird und eine positive Spannung als "Low".
Die Steuersignale sind jedoch nach positiver Logik definiert.

Der untere Spannungsbereich erstreckt sich von -15V bis -3V. Spannungen ab -3V werden als "Hi" erkannt. Für den "Lo"-Spannungsbereich sind Ladungen ab +3V vorgesehen. Normalerweise senden Computer mit +/-12V.
Ladungen von -3V bis +3V werden nicht beachtet und lösen kein Signal aus. Spannungen, die +30V überschreiten führen zur Zerstörung der Treiberbausteine.

Ist die Leitung beim Übertragen einer binären "1", so sagt man, die Leitung ist "gesetzt", "hi" oder "high".
Wird gerade eine "0" übertragen, dann spricht man von "ungesetzt", "lo" oder "low".

Mit Hilfe des binären Ziffernsystems kann der Computer die Zahl [65]10 in [1000001]2 übersetzen. (Anm.: Die tiefgestellten Zahlen geben die Basis des Zahlensystems an!)

Der Computer weiß daher: Will er den Wert 65 übertragen, so muss er im ersten Takt die Leitung setzen, in den folgenden 5 Takten bleibt die Leitung ungesetzt und dann wird sie wieder gesetzt.

Wie ist das nun, wenn der Computer einen Text überträgt? Ganz genau dasselbe. Jeder Buchstabe und jedes Zeichen sind in einer Tabelle, der sogenannten ASCII-Tabelle, einer Ziffer zugeordnet (ASCII = American Standard Code for Information Interchange). Das muss so sein, da jeder Computer eine Rechenmaschine ist und sich alles, auch Buchstaben, mit Hilfe von Ziffern "merken" muss.
Der Buchstabe "A" hat zum Beispiel die Ziffer 65 zugeordnet. "B" ist 66. Diese Ziffern werden binär umgerechnet und dann versendet und vom Empfänger wieder in Ziffern und Buchstaben umgewandelt.

Handshaking

Im RS232-Protokoll ist ebenfalls ein "Handshaking" definiert. Unter diesem Begriff kann man sich wirklich das Händeschütteln zwischen zwei Geräten vorstellen. Im groben läuft das in diesem Protkoll definierte Handshaking wie folgt ab:
Der erste Computer setzt eine Leitung, um dem Empfänger anzukündigen, dass er Daten senden will. Der Empfänger setzt eine Leitung, kündigt damit an, dass er bereit zum Empfangen ist. Der Sender setzt eine Leitung und zeigt damit, dass er jetzt sendet und beginnt mit diesem Vorgang. Sollte während der Übertragung ein Fehler auftreten, so setzt einer der Computer diese Leitung auf "low".

Initialisierung

Bevor man mit dem Übertragen von Daten beginnen kann, muss man der Schnittstelle einige Einstellungen bekanntgeben. Dazu gehört zum Beispiel die Bekanntgabe der gewünschten Geschwindigkeit, der Parität oder der Start- bzw. Stoppbits (siehe Vollständige Kommunikation).

Beispiel einer einfachen Kommunikation

In diesem Kapitel werde ich oft auf die Pinbelegungstabelle aus dem Kapitel "Das RS-232-Protokoll" zurückgreifen.

Zuvor möchte ich aber noch zwei Begriffe erklären. Wie schon erwähnt, ist die serielle Schnittstelle ursprünglich zur Datenübertragung mittels Modem gedacht. Daher stammen auch die Ausdrücke für die beiden Partner der Kommunikation. Man teilt die Endeinrichtungen in die Gruppen Datenendeinrichtung (DEE) und Datenübertragungseinrichtung (DÜE). Auf englisch heißen diese Abkürzungen DTE für Data Terminal Equipment und DCE für Data Circuit Equipment. Ein DEE oder DTE ist meist ein Computer und mit DÜE/DCE meist ein Modem gemeint.

Sehr häufig sind heutzutage DEE-DEE Verbindungen. Man schließt also zwei Computer zusammen, ohne Modems dazwischen zu schalten.
Solche Verbindungen heißen auch "direkte serielle Verbindungen" oder "Nullmodemverbindungen".
Wenn ich es nicht ausdrücklich anders erwähne, so beziehen sich alle nachfolgenden Verbindungen auf Nullmodem-Verbindungen.

Bei solchen Verbindungen müssen verschiedene Pins überkreuzt werden. Jede "kleine" serielle Schnittstelle sendet Daten (TXD) vom Pin 3 und empfängt Daten auf Pin 2 (RXD). Daher müssen bei der DEE-DEE Verbindung die RXD/TXD-Leitungen überkreuzt werden.
Solche Verbindungen sind sehr häufig und in jedem Computergeschäft bekommt man heute schon ein "serielles Nullmodemkabel", bei dem schon standardmässig diese Leitungen gekreuzt sind.

Zur Kommunikation verwenden wir die kleine Steckervariante. Der bekannteste Pol ist die Signalmasse GND (5). Sie dient als Bezugspotential für die Signalspannung und als gemeinsamer Rückleiter fließender Ströme. Die Schutzerdung, wie sie beim 25poligen Stecker vorhanden ist wurde offiziell nach DIN abgeschafft, man hat sich aber geeinigt, die Kabelabschirmung (sofern vorhanden) sowie die metallischen Gehäuseteile des Steckers und der Endgeräte damit zu verbinden.

Die anderen Leitungen können in Daten-, Steuer- und Meldeleitungen unterteilt werden.
TXD und RXD sind die Datenleitungen. Durch TXD sendet der DEE und durch RXD wird empfangen.
Allein mit diesen zwei Leitungen und der Signalmasse kann die einfache Kommunikation erfolgen. Dazu kreuzen wir die Datenleitungen und verbinden die Signalmasse:

Nun kann DEE1 auf TXD senden und DEE2 auf RXD empfangen und umgekehrt.
Die einfache Kommunikation ist somit aufgebaut.

Eine vollständige Kommunikatioin (Startbit, Stoppbit, Parität)

Bei der vollständigen Kommunikation sind nicht alle übertragenen Bits Datenbits. Um eine reibungslose Übertragung zu ermöglichen setzt man zwischen die Datenbits noch Start- und Stoppbits, sowie eventuell ein Paritätsbit, es werden also sogenannte Steuerbits mitgeschickt.

Nehmen wir als Beispiel ein zu übertragendes Byte:
Werden keine Zeichen übertragen, so ist die Schnittstellenleitung immer "hi". Will man mit der Übertragung starten, so wird die Leitung für die Dauer eines Bits "low" gesetzt. Dieses erste Bit im Datenblock wird als Startbit bezeichnet.

Auf das Startbit folgen dann die Datenbits. Diese sind, je nach Einstellung in der Initialisierung, 5, 6, 7 oder 8. Danach folgen dann, wieder von der Initialisierung abhängig, die Stoppbits. Diese sind entweder 1 oder 2. Diese Bits werden immer "hi" versendet. Sie sind notwendig, um eine Übertragungspause vor dem nächsten Startbit zu bewirken.

Vor dem Stoppbit jedoch kann noch ein Paritätsbit eingeschoben werden. Es gibt zwei Möglichkeiten der Parität: ungerade (odd) oder gerade (even). Bei der "even parity" wird das Paritätsbit gesetzt, wenn die Anzahl der 1er-Bits im Datenwort gerade ist. Bei der ungeraden Parität ist der Vorgang genau umgekehrt.

Eine vollständige Kommunikatioin (Hardware: Controller, FIFO)

Die serielle Schnittstelle kann asynchron übertragen. Das bedeutet, dass der Controllerbaustein, der für die Ansteuerung der seriellen RS-232-Schnittstelle zuständig ist, gleichzeitig Daten empfangen und senden kann.

Um zu senden, wird das zu sendende Datenwort inklusive aller Start-, Stopp- und Paritätsbits in ein Schieberegister geschrieben und beim nächsten Takt ausgegeben.
Das Empfangen ist ein komplizierterer Vorgang. Sobald der Empfänger ein Startbit erkannt hat, wartet der Empfänger eine halbe Bitlänge und überprüft dann, ob das Signal noch "low" ist. Damit wird vermieden, dass eine Spannungsstörung das Einlesen eines falschen Bits verursacht.

Wenn das Startbit als gültig erkannt wird, wird der Zustand (hi, low) der folgenden Bits jeweils in der Mitte abgetastet und wiederum in ein Schieberegister geschoben, aus welchem diese dann gelesen werden.

Für die vollständige Kommunikation verwenden wir alle in der 9poligen Version der seriellen Schnittstelle verfügbaren Pins:


Schnittstellentypen - Unterschiede und Versionen

Der "original" IBM-PC hat einen unter NS8250 bekannten Chip zur Steuerung der seriellen Schnittstelle benutzt (NS = National Semiconductor, Erzeugerfirma).
Um eine 100prozentige Kompatibilität zu erreichen, benutzten PC-Hersteller entweder genau diesen Chip oder einen gleich funktionierenden.
Der 8250 war erst der Anfang der Entwicklung und hat Einschränkungen. Er kann die Übertragungsgeschwindigkeit von 9.600 bps (Bit pro Sekunde) nicht überschreiten.

8250: Dies ist der originale, grundlegende serielle Chip, der vom "original" IBM-PC und vielen dazu kompatiblen älteren Modellen verwendet wird.

16450: Zu dieser Gruppe gehören NS16450, NS16550 und 8250A-Chips. Sie sind in ihrer Funktionalität ident. Sie sind schneller als der Original-Chip. Sie haben bereits ein UART, aber schwere Fehler verhindern, dass der FIFO-Puffer fehlerfrei arbeitet.

Ein FIFO-Puffer (First-In-First-Out) erlaubt höhere Übertragungsgeschwindigkeiten. Nehmen wir an, ein Computer überträgt Daten mit einer Übertragungsgeschwindigkeit von 115.200 bps. Für jedes empfangene Zeichen (also 14.400 pro Sekunde) muss ein Interrupt ausgelöst werden und das Zeichen aus dem Eingangs-Register gelesen werden. Vor allem ältere Computer haben Probleme mit diesem Vorgang. Zur Entlastung des Aufwandes wurde der FIFO-Puffer entwickelt. Bei der Initialisierung der Schnittstelle wird eingestellt, ob ein vorhandener FIFO-Puffer verwendet werden soll. Weiters wird eingestellt, wieviele Zeichen er aufnehmen soll. Wenn ein Zeichen ankommt und der FIFO-Puffer aktiviert ist, dann wird das Zeichen in den FIFO-Puffer geschoben. Ein FIFO-Puffer kann bis zu 14 Zeichen beim Empfang und 16 Zeichen beim Versenden speichern. Ein Interrupt wird erst ausgelöst, wenn die eingestellte Anzahl an Zeichen im FIFO erreicht ist. Somit erspart sich der Computer beim Versenden von 14.400 Unterbrechungen auf 900 pro Sekunde, was eine erhebliche Erleichterung für den Rechner ist.

Ein FIFO-Puffer erschwert dem Programmierer aber auch die Arbeit:
Sollte bei der Übertragung ein Fehler aufgetreten sein, so muss, noch bevor man sich um den Fehler kümmert, zuerst der FIFO geleert (bzw. ausgelesen) werden.
Signalisiert die Schnittstelle das Ende der Kommunikation, so darf man nicht vergessen, im FIFO nachzusehen, ob da nicht vielleicht noch ein paar Zeichen warten. Denn der FIFO löst erst einen Interrupt aus, wenn alle angegebenen (sinnvollerweise 14 beim Empfang) Zeichen warten.

Heutzutage fast Standard ist der 16550AFN-Chip. Identisch zu diesem sind der NS16550A und 16550AF. Der größte Unterschied zur 16450-Serie ist, dass hier der FIFO-Puffer einwandfrei arbeitet und somit standardmäßig verwendet wird. Viele moderne Programme (z.B. Windows ab Version 3.1) nutzen bereits die Möglichkeit des FIFOs.

Die beste Entwicklung bei den seriellen Schnittstellen ist der "Type 3". Er ist ein vom IBM entwickelter Chip. Er ist der Schnellste aller bekannten Schnittstellen und erlaubt theoretisch Übertragungsraten von bis zu 690.000 bps (690Kbps). Außerdem unterstützt diese Version Direct Memory Access (DMA) und benötigt daher keine Aufmerksamkeit der CPU mehr, um empfangene Daten in den Speicher zu schreiben.
In einigen PS/2-Modellen wird dieser Chip eingesetzt. Er ist aber nicht oft zu finden.

Viele Leute wollen den schnellsten Chip in ihrem Rechner einsetzen. Viele greifen dann zu einem 16550er. Dieser ist jedoch fehlerhaft und wurde von National Semiconductor schon seit Jahren nicht mehr produziert. Der richtige Chip für jeden Zweck ist der 16550AFN. Obwohl beide ähnlich klingen unterscheiden sie sich doch wesentlich in der Arbeitsweise.

Daten-, Steuer & Meldeleitungen (Leitungen der 9pin-Schnittstelle)

Die DCD (Data Carrier Detect)-Leitung wird gesetzt, sobald ein Modem eine Verbindung mit dem anderen Modem aufgenommen hat.

Werden jedoch zwei DEEs miteinander verbunden, so entfällt das Trägersignal und DCD wird anders erzeugt. Beim Verbindungsaufbau setzt ein Rechner die DTR (Data Terminal Ready)-Leitung, um zu signalisieren, dass er eine Verbindung erstellen möchte. Durch die überkreuzten Leitungen empfängt der andere Computer eine gesetzte DSR (Data Set Ready)-Leitung. Dieser aktiviert wiederum seine DTR-Leitung, wobei der andere Rechner wiederum ein gesetztes DSR bekommt. Somit zeigen beide Geräte den Willen zur Kommunikation.

Der erste Computer setzt die RTS-Leitung (Request To Send) um zu signalisieren, dass er senden möchte. Ist er bereit, Daten zu empfangen, setzt er die CTS (Clear To Send)-Leitung. Nun ist bei beiden DEEs sowohl die RTS- als auch die CTS-Leitung gesetzt und die Datenübertragung kann beginnen.

Besonders bei höheren Übertragungsgeschwindigkeiten kann es passieren, dass der Empfänger mit dem Empfang und der Verarbeitung der Daten nicht nachkommt. Um eine (kurzzeitige) Unterbrechung der Übertragung zu erzwingen, deaktiviert er sein RTS-Signal. Der Sender-Computer erkennt daher, dass seine "Clear To Send"-Leitung "low" ist, und dass er keine Freigabe zum Senden hat. Somit stoppt er die Datenübertragung solange, bis er wieder eine aktivierte CTS-Leitung empfängt.

Der letzte auf der 9pin-Verbindung vorhandene Pin ist RI (Ring). Normalerweise signalisiert ein Modem einen ankommenden Anruf. Spezielle Programme können darauf reagieren und zB. den Hörer abheben. Diese Leitung ist sehr wichtig für zB. Mailbox-Software.
Bei einer direkten Verbindung zweier Computer kann diese Leitung für andere Zwecke verwendet werden. Meist jedoch bleibt sie unbenutzt.

Daten-, Steuer & Meldeleitungen (Zusätzliche Leitungen der 25pin-Schnittstelle)

Auf der "großen" Schnittstelle finden wir sowohl die 9 Pins der "kleinen" Variante, als auch 16 weitere weniger wichtige, nicht unbedingt notwendige Leitungen.

Die beiden Testspannungen TV+ und TV- entsprechen den Ladungszuständen für "Hi" bzw. "Low" Dadurch kann der Empfänger überprüfen, ob ein gültiger Spannungspegel angekommen ist.

Die 25polige Schnittstelle reserviert auch einen sogenannte Hilfskanal. Dieser Kanal ist mit "2." in meiner Tabelle aufgeführt. Über ihn können können gewisse Hilfsdaten parallel zur Hauptübertragung übertragen werden.

Mit den Signalen CH und CK können sowohl Sender als auch Empfänger zum Übergang zu einer anderen Übertragungsgeschwindigkeit auffordern.

Ausschließlich zur Kommunikation über ein Modem dient das Signal SQD (Signal Quality Detect). Ist diese Leitung gesetzt, so wird eine mangelnde Qualität der Übertragung angezeigt.

Erkennung der Schnittstellen mit Hilfe des BIOS

Die serielle Schnittstelle ist ohne die dazu passende Software wertlos. Über ein Programm wird die Schnittstelle so angesteuert, dass Daten übertragen werden.

Als erstes muss ein Programm ermitteln, wieviele serielle Schnittstellen an den Computer angeschlossen sind. Dabei fragt man als erstes die Anzahl der Schnittstellen ab und weiters, an welchen Computer-internen Adressen diese zu finden sind. Die Adressen werden meist über Kontakverbindungen, sogenannte "Jumper", auf der Schnittstellenkarte eingestellt. Es gibt bestimmte Standardadressen, an denen die seriellen Schnittstellen üblicherweise "hängen". Für den ersten Port ist dies zum Beispiel "0x3F8" (Anm. 0x zeigt in diesem Fall an, dass die Adresse 3F8 im hexadezimalen Zahlensystem angegeben ist. Das hexadezimale Zahlensystem hat die Basis 16. Anders könnte man schreiben [3F8]16 oder 3F8h.) Die zweite Schnittstelle findet man meist bei 0x2F8. COM3: besitzt 0x3E8 und COM4: 0x2E8.

Man kann davon ausgehen, dass jeder Computer an diesen Adressen seine seriellen Schnittstellen hat. Trotzdem sollte eine gute Software auch diese Adressen überprüfen, ganz besonders, weil dies überhaupt kein Problem ist.

Das BIOS (Basic Input Output System), das beim Hochfahren des PCs diverse Schnittstellen initialisiert, überprüft auch mit Hilfe einer sehr komplexen Abfragetechnik, an welchen Positionen sich die Schnittstellen befinden und legt diese an genau festgesetzten Speicherstellen ab.

Die Speicherstelle an der Offset-Adresse 0040:0000 beinhaltet immer die Portadresse der 1. seriellen Schnittstelle. An 0040:0002 befindet sich die Adresse der 2., an 0040:0004 der 3. und an 0040:0006 die der 4. An der Stelle 0040:0011 wird die Anzahl der insgesamt verfügbaren Schnittstellen in diesem System abgelegt.

Initialisierung über das BIOS

Nachdem wir die Anzahl der Schnittstellen und deren Adresse festgestellt haben und ausgewählt haben, welche wir für unsere Zwecke benutzen, können wir mit der Initialisierung anfangen.

Das BIOS stellt einen eigenen Interrupt zur Ansteuerung der seriellen Schnittstellen bereit. Ein Interrupt ist eine in Maschninensprache verfasste Routine, die im BIOS-Speicherbereich abrufbar steht und dem Programmierer immer wiederkehrende Programmierarbeit abnimmt. Der BIOS Interrupt 0x14 (wieder Hexadezimal) stellt diese Routinen zur Verfügung.
Beim Aufruf werden Parameter in den Registern AX (AH, AL), BX, CX und DX übergeben. Nach Beendigung des Aufrufs können wir aus diesen Registern einen Ausgabe-Wert auslesen. Hier kann man zum Beispiel Fehler während der Ausführung des Interrupts erkennen.

Hier die zur Initialisierung benötigten Daten:

Register Wert und Funktion
AH 0x00
DX Schnittstellennummer (COM1: = 0, usw.)
AL Bit 0-1 Datenlänge
[10]2 = 7 Bit
[11]2 = 8 Bit
Bit 2 Stoppbit
[0]2 = ein Stoppbit
[1]2 = je nach Baud-Rate 1,5 oder 2 Stoppbit
Bit 3-4 Paritätsprüfung
[00]2 = keine
[01]2 = ungerade
[11]2 = gerade
Bit 5-7 Baudrate
[000]2 = 110 Baud
[001]2 = 150 Baud
[010]2 = 300 Baud
[011]2 = 600 Baud
[100]2 = 1200 Baud
[101]2 = 2400 Baud
[110]2 = 4800 Baud
[111]2 = 9600 Baud

Nun wird der Interrupt 0x14 aufgerufen. Nach Beendigung kann man folgende Ausgabewerte auslesen:

Register Bit Bedeutung
AH 0 Daten stehen bereit
1 Überlauf
2 Paritätsfehler
3 Protokoll nicht eingehalten
4 Unterbrechung entdeckt
5 Transmission-Hold-Register leer
6 Transmission-Shift-Register leer
7 Timeout
AL 0 Modem zum Senden bereit (Delta)
1 Modem ausgeschalten (Delta)
2 Telefon läutet (Ring) (Delta)
3 Verbindung zum Empfängermodem "steht" (Delta)
4 Modem zum Senden bereit
5 Modem ist angeschalten
6 Telefon läutet
7 Verbindung zum Empfängermodem "steht"

Die mit (Delta) gekennzeichneten Bits zeigen eine Veränderung der Leitung an. Ist ein Delta-Bit gesetzt, hat sich der betreffende Status seit dem letzten Aufruf verändert.

Statusabfrage über das BIOS

Die Schnittstelle ist nun, sofern bei der Initialisierung kein Fehler aufgetreten ist, sende- und empfangsbereit. Vor dem (und auf jeden Fall auch während des) Senden muss der Status der Schnittstelle abgefragt werden.

Auch dazu bietet das BIOS eine Funktion im Interrupt 0x14:

Register Wert
AH 0x03
DX Schnittstellennummer (COM1: = 0)

Ausgaben der Funktion:

Register Wert
AH Status der Schnittstelle. Die Auflösung ist gleich der bei Funktion 0x00

Datenübertragungsroutinen über BIOS-Routinen

Sollte bis hierher kein Fehler aufgetreten sein, dann kann man ein Zeichen übertragen. Auch hierfür ist eine Interrupt-Routine definiert:

Register Wert
AH 0x01
DX Schnittstellennummer (COM1: = 0, usw.)
AL Code des zu übertragenden Zeichens

Nach Aufruf der Routine können folgende Registerwerte ausgelesen werden:

Register Bit Wert
AH 7 = 0: Zeichen wurde übertragen
7 = 1: Fehler aufgetreten. In diesem Fall:
Bit 0: Daten stehen bereit
Bit 1: Überlauf
Bit 2: Paritätsfehler
Bit 3: Protokoll nicht eingehalten
Bit 4: Unterbrechung entdeckt
Bit 5: Transmission-Hold-Register leer
Bit 6: Transmission-Shift-Register leer

Das ausgegebene Zeichen wird in meinem Programmier-Beispiel über eine Nullmodemleitung an den Empfänger gesendet. Dort bleibt das Zeichen in einem Puffer, bis der Computer merkt, dass Daten für ihn bereit stehen und er sie ausliest. Der Computer merkt das, indem er regelmässig (mit möglichst kurzen Pausen) den Status der Schnittstelle abfragt und sobald das "Daten stehen bereit"-Bit gesetzt ist, Daten ausliest, bis dieses Bit nicht mehr gesetzt ist. Die Daten können wie folgt ausgelesen werden:

Register Wert
AH 0x02
DX Schnittstellennummer (COM1: = 0, usw.)

Man erhält:

Register Bit Funktion
AH 7=0 Zeichen wurde empfangen. In diesem Fall enthält das AL-Register das Zeichen
7=1 Fehler aufgetreten. Siehe Funktion 0x01.

Ansteuerung über den UART

UART steht für "Universal Asynchronous Receiver Transmitter". Er ist das Herzstück der seriellen Schnittstelle und kontrolliert die Ein- und Ausgabe der Zeichen.
Immer wieder findet man auch den Namen SIO, dieser steht für "Serial Input/Output"

Register des UART

Insgesamt verfügt der UART über 10 Register, die per Software erreichbar sind. Weiters ist er mit Registern ausgestattet, die nur intern angesprochen werden können.

Register Kürzel Lesen Schreiben Basisport+ bit 7 im Line-Control Reg.
Transmitter-Holding THR Nein Ja 0 0
Receiver-Data RBR Ja Nein 0 0
Baudraten-Divisor LSB DLL Ja Ja 0 1
Baudraten-Divisor MSB DLM Ja Ja 1 1
Interrupt-Enable IER Ja Ja 1 0
Interrupt-ID IIR Ja Nein 2
Line-Control LCR Ja Ja 3
Modem-Control MCR Ja Ja 4
Line-Status LSR Ja Ja 5
Modem-Status MSR Ja Ja 6

Um auf die Register zuzugreifen muss man die Basisadresse der Schnittstelle (=des Controllers (UART)) kennen. Diese Basisadresse kann man am besten über die BIOS-Speicherstellen (siehe Kapitel 10.1) abfragen. Dann sendet man an die angegebene Basisadresse+# ein Byte und erreicht so den Zugriff auf die UART-Register.

Betriebsart: Polling oder Interrupt?

Es gibt zwei Möglichkeiten, über die Schnittstelle zu kommunizieren.
Wartet man auf ein ankommendes Zeichen, so überprüft man in regelmäßigen Abständen, ob das Byte verfügbar ist. Dazu wird der UART-Status über das Line-Control-Register abgefragt. Nur so kann man feststellen, ob entweder ein neues Zeichen empfangen oder das zuletzt abgesendete Zeichen auf den Weg gebracht wurde.
Vorteil dieser Methode ist, dass sie für den Programmierer einfach zu verwirklichen ist.
Der große Nachteil aber ist, dass die CPU die ganze Zeit mit dem Gerät beschäftigt ist, obwohl die Zeichen - verglichen zur CPU-Geschwindigkeit - sehr langsam eintreffen.

Die zweite Variante ist das Interrupt-Verfahren. Erst wenn ein Zeichen angekommen oder ein Fehler aufgetreten ist, wird ein Interrupt ausgelöst. Die CPU unterbricht die Verarbeitung und wendet sich der seriellen Schnittstelle zu und - je nach Programmierung und Situation - behebt den Fehler oder liest das Zeichen aus.



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04510
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06247
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0