/usr/share/doc/HOWTO/de-html/DE-Modem-HOWTO-2.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Linux Modem-HOWTO: Grundwissen über Modems und serielle Ports </TITLE>
<LINK HREF="DE-Modem-HOWTO-3.html" REL=next>
<LINK HREF="DE-Modem-HOWTO-1.html" REL=previous>
<LINK HREF="DE-Modem-HOWTO.html#toc2" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-Modem-HOWTO-3.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Modem-HOWTO-1.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Modem-HOWTO.html#toc2"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="DE-Modem-HOWTO-basics_"></A> <A NAME="s2">2.</A> <A HREF="DE-Modem-HOWTO.html#toc2">Grundwissen über Modems und serielle Ports </A></H2>
<P> Um ein Modem anzuschliessen und zu verwenden, brauchen Sie
nicht unbedingt ein Grundwissen über Modems oder serielle Ports.
Falls Fehler auftreten, ist es aber für die Problemlösung sehr
hilfreich, wenn Sie die Grundlagen verstehen.
Wenn Sie diesen Abschnitt gelesen haben und
noch mehr über Modems wissen möchten, finden Sie weitere Informationen
im Abschnitt
<A HREF="DE-Modem-HOWTO-17.html#DE-Modem-HOWTO-how_modems_work">Wie ein Modem technisch funktioniert</A>
(dieser Abschnitt ist allerdings noch nicht fertiggestellt).
Im <EM>Serial HOWTO</EM> finden Sie weitere Informationen über serielle Ports.</P>
<H2><A NAME="ss2.1">2.1</A> <A HREF="DE-Modem-HOWTO.html#toc2.1">Ein Modem konvertiert digitale Signale in analoge (und umgekehrt)</A>
</H2>
<P> Die meisten Telefon-Hauptleitungen sind bereits digital, aber die Kabel,
die zu Ihrem Haus oder Ihrer Firma führen, sind normalerweise analog. Das
bedeutet, dass sie eine Welle in Form einer Spannungsschwankung übertragen,
die ein Abbild der Schallwelle ist, die von Ihrer Stimme erzeugt
wird. Eine
solche Spannungsschwankung heißt »analog«. Würde man sie auf einem
Oszilloskop sichtbar machen, dann würde sie aussehen wie eine Sinuskurve
mit wechselnder Frequenz und Amplitude. Ein digitales Signal hat dagegen einen
rechteckigen Verlauf. Bsp: 3 V (Volt) könnte einer digitale Eins und
0 V könnte einer digitalen Null entsprechen. Bei den meisten
seriellen Ports, die von einem externen Modem verwendet werden, entspricht
+12 V einem 0-bit und -12 V einem 1-bit
(einige verwenden auch + oder -5 V).</P>
<P>Um Daten von Ihrem Computer über eine Telefonleitung zu senden, nimmt das
Modem die digitalen Signale vom Computer entgegen und wandelt sie in ein
analoges Signal. Dies wird erreicht, indem es eine Spannung in Form einer
analogen Sinuskurve erzeugt und diese dann »MOduliert«. Das Ergebnis
repräsentiert noch immer digitale Daten, es könnte auch digitales Signal
anstelle von analoges Signal heißen. Aber es sieht so ähnlich aus wie
ein analoges Signal und beinahe jeder nennt es auch so. Am anderen Ende
der Telefonleitung »DEModuliert« ein anderes Modem dieses Signal und das
rein digitale Signal ist wiederhergestellt. Ein Modem ist daher ein
»MOdulator-DEModulator«. </P>
<H2><A NAME="ss2.2">2.2</A> <A HREF="DE-Modem-HOWTO.html#toc2.2">Was ist ein serieller Port?</A>
</H2>
<H3>Einführung in die serielle Datenübertragung</H3>
<P> Nachdem sich zwischen dem Modem und dem Computer ein serieller Anschluß
befindet, ist es notwendig, neben dem Modem auch die Arbeitsweise eines
seriellen Ports zu verstehen. Der serielle Port ist ein I/O (Input/Output,
Eingabe/Ausgabe) Gerät. </P>
<P>Die meisten PCs haben ein oder zwei serielle
Ports. Jeder hat einen 9-poligen (manchmal auch einen 25-poligen)
Anschlussstecker auf der Rückseite des Computers. Einer der
Anschlussstifte ist für das Senden von Daten zuständig, ein anderer
für den Empfang. Die anderen Pins sind entweder auf Masse gelegt oder
für Kontrollaufgaben vorgesehen.</P>
<P>Der serielle Port ist mehr als nur ein einfacher Anschlussstecker. Er
wandelt parallele Daten in serielle Daten und ändert ihre elektrische
Darstellung. Innerhalb des Computers fließen die Datenbits parallel (und
brauchen viele parallele Leitungen gleichzeitig). Ein serieller Datenstrom
fließt über eine einzige Leitung (wie die Leitung, die mit dem Pin für das
Senden oder Empfangen des Anschlusssteckers verbunden ist). Damit der
serielle Port solch einen Datenstrom erzeugen kann, muß er die parallelen
Daten (aus dem Inneren des Computers) in serielle Daten umwandeln, um
sie zu senden. Für den Empfang gilt genau das umgekehrte Verhalten. </P>
<P>Der größte Teil der Elektronik eines seriellen Ports befindet sich
auf einem Chip (oder in einem bestimmten Abschnitt eines Chips), der
unter dem Namen UART bekannt ist. Im <EM>Serial HOWTO</EM> finden Sie weiter
Informationen über UARTs.</P>
<P>Im restlichen Teil dieses Kapitels wird die Rolle des UART im
Gesamtsystem vorgestellt.</P>
<H3>Anschlussstifte und Anschlusskabel</H3>
<P> Ältere PCs verwendeten 25-polige Anschlüsse, aber nur höchstens 9
Pins waren tatsächlich belegt, deshalb sind die meisten Anschlussstecker
heutiger PCs nur 9-polig. Jeder der neun Anschlussstifte (Pins) ist mit
einer Leitung verbunden. Neben den beiden Leitungen, die für das Senden und
Empfangen der Daten verwendet werden, ist ein weiterer Pin bzw. eine
weitere Leitung mit der Signalmasse belegt. Die Spannung auf jeder Leitung
wird in Bezug auf diese Signalmasse gemessen. Es müssen also mindestens
drei Leitungen verwendet werden, um Daten gleichzeitig senden und
empfangen zu können. Es ist aber auch möglich, ohne die Masseleitung zu
arbeiten, allerdings langsamer und manchmal treten Fehler auf.</P>
<P>Die übrigen Leitungen sind nur
für die Kontrolle des Datenaustausches vorgesehen und nicht für die Übertragung
von Bytes. Alle diese Signale könnten über eine einzige Leitung gesendet
werden, aber für jedes Signal gibt es eine eigene dedizierte Leitung. Diese
Leitungen werden Modem-Steuerleitungen genannt. Diese Steuerleitungen
befinden sich entweder im aktiven Zustand (Ein) mit einer Spannung
von +12 V oder im inaktiven Zustand (Aus)
mit einer Spannung von -12 V. Eine
der Leitungen signalisiert dem Computer, das Senden von Bytes an das
Modem zu unterbrechen. Umgekehrt signalisiert eine andere Leitung dem Modem,
das Senden von Bytes an den Computer einzustellen. Wieder andere Leitungen
veranlassen das Modem, aufzulegen, oder teilen dem Computer mit, dass eine
Verbindung hergestellt wurde oder dass ein Klingelsignal auf der Leitung
liegt (wenn jemand versucht anzurufen).</P>
<H3>Ein internes Modem enthält einen seriellen Port</H3>
<P> Für ein internes Modem gibt es keinen 9-poligen Verbindungsstecker,
aber das Verhalten ist exakt so, als würden die oben erwähnten Leitungen
existieren. Anstelle eines 12-Volt Spannungspegels auf einer Leitung,
der den Status auf einer Modemsteuerleitung angibt, verwendet das interne
Modem einfach ein Statusbit in seinem eigenen Speicher (ein Register), um
den Status dieser nicht existierenden Steuerleitung zu bestimmen. Der interne
serielle Port des Modems sieht für den Computer aus wie ein richtiger serieller
Port. Für ihn gelten sogar die selben Geschwindigkeitsgrenzen für die
Datenübertragung, die man bei gewöhnlichen seriellen Schnittstellen einstellt,
z.B. 115200 Bits/s. Unglücklicherweise arbeiten viele interne
Modems nicht auf diese Weise, sondern nutzen MS Windows Software
für ihre Funktion und
arbeiten daher nicht unter Linux. Siehe auch den Abschnitt
<A HREF="DE-Modem-HOWTO-6.html#DE-Modem-HOWTO-winmodem_">Interne Modems, die zu meiden sind (Winmodems etc.)</A>.</P>
<H2><A NAME="ss2.3">2.3</A> <A HREF="DE-Modem-HOWTO.html#toc2.3">I/O-Adressen und IRQ</A>
</H2>
<P> Weil der Computer mit jeder seriellen Schnittstelle kommuniziert,
muss das Betriebssystem (Operating System, OS) wissen, dass die seriellen
Schnittstellen existieren, wo sie sind (ihre I/O-Adressen) und welche
Leitung die serielle Schnittstelle verwendet, um einen Dienst der CPU des
Computers
in Anspruch zu nehmen. Deshalb muss innerhalb der seriellen Schnittstelle
sowohl die Ein-/Ausgabe-Adresse (I/O) als auch die Interrupt ReQuest Nummer
(IRQ) in einem nicht flüchtigen Speicher abgelegt werden. Der IRQ bestimmt,
welche Leitung für ein Interrupt Signal verwendet wird, um einen
Dienst der CPU zu beanspruchen. Siehe auch Abschnitt
<A HREF="#DE-Modem-HOWTO-interrupt_">Interrupts</A>.</P>
<P>Beim PCI-Bus funktioniert das alles etwas anders, da der PCI-Bus über
eine eigene Interrupt-Verarbeitung verfügt. Das BIOS auf PCI-Boards bildet
die PCI-Interrupts jedoch auf IRQs ab, so dass sich nach außen hin alles
so verhält
wie oben beschrieben, mit der Ausnahme, dass sich zwei oder mehr Geräte
einen IRQ teilen können.</P>
<P>I/O-Adressen sind nicht dasselbe wie Adressen im Hauptspeicher. Wenn eine
I/O-Adresse auf dem Adressbus des Computers anliegt, wird eine andere
Leitung aktiviert. Beides bedeutet für den Hauptspeicher,
die Adresse zu ignorieren, und es bedeutet für alle angeschlossenen
Geräte, die über I/O-Adressen-verfügen (wie z.B. der serielle Port) die
Adresse auszuwerten und sie mit der eigenen zu vergleichen. Wenn die
Adresse übereinstimmt, liest das I/O-Gerät die Daten auf dem Datenbus.</P>
<H2><A NAME="ss2.4">2.4</A> <A HREF="DE-Modem-HOWTO.html#toc2.4">Namensgebung</A>
</H2>
<P>
Die seriellen Schnittstellen heißen unter Linux <CODE>ttyS0</CODE>,
<CODE>ttyS1</CODE>, usw.
(die korrespondierenden Schnittstellen unter DOS/Windows heißen
normalerweise COM1, COM2, usw).
Im <CODE>/dev</CODE> Verzeichnis gibt es eine spezielle Datei für jeden Port.
Um sie anzuzeigen, können Sie folgenden Befehl eingeben:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
ls /dev/ttyS*
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Nur weil es z.B. eine Datei <CODE>ttyS3</CODE> gibt, muss das aber nicht
heißen, dass auch ein physischer serieller Port existiert.</P>
<P>Welcher dieser Namen (<CODE>ttyS0</CODE>, <CODE>ttyS1</CODE>, etc) zu welchem
physikalisch Port
gehört, wird wie folgt bestimmt: die Treibersoftware des seriellen Ports
verwaltet eine Tabelle, welche die Zuordnung von I/O-Adressen und ttyS-Namen
enthält. Diese Abbildung von Namen auf I/O-Adressen und IRQs kann mit
Hilfe des Befehls <CODE>setserial</CODE> sowohl gelesen als auch gesetzt werden, siehe
<A HREF="DE-Modem-HOWTO-8.html#DE-Modem-HOWTO-set_serial">Was ist setserial?</A>.
Dieser Befehl setzt
<EM>nicht</EM> die I/O-Adressen und IRQs in der Hardware selbst (dies wird
durch Jumper oder Plug-and-Play Software vorgenommen). Welcher physikalische
Port also z.B. mit <CODE>ttyS1</CODE> korrespondiert, hängt folglich sowohl davon ab,
was die Treibersoftware (per <CODE>setserial</CODE> Befehl) denkt und wie die Hardware
konfiguriert ist. Falls ein Fehler gemacht wurde, kann es vorkommen, dass
der physikalische Port keinem einzigen Namen (wie z.B. <CODE>ttyS2</CODE>)
entspricht und daher auch nicht verwendet werden kann. Siehe auch
<A HREF="DE-Modem-HOWTO-7.html#DE-Modem-HOWTO-ttySN_">Gerätedateien für die serielle Schnittstelle /dev/ttyS2, usw.</A>.</P>
<H2><A NAME="DE-Modem-HOWTO-interrupt_"></A> <A NAME="ss2.5">2.5</A> <A HREF="DE-Modem-HOWTO.html#toc2.5">Interrupts </A>
</H2>
<P> Bytes kommen über die Telefonleitung zum Modem, werden vom Modem von
analog nach digital umgewandelt und werden auf dem Weg zu ihrem Ziel
innerhalb des Computers der seriellen Schnittstelle übergeben. Wenn die
serielle Schnittstelle z.B. 8 Bytes vom Modem empfängt (diese Anzahl kann
auch auf 1, 4, 8 oder 14 eingestellt sein), signalisiert sie der CPU, diese
Daten abzuholen, indem sie ein elektrisches Signal sendet. Dieses Signal
liegt auf einer ganz bestimmten Leitung an und ist eine Aufforderung an
die CPU, ihre momentane Arbeit kurz zu unterbrechen und sich um die
serielle Schnittstelle zu kümmern (engl: Interrupt Request, abgekürzt IRQ).
Ältere serielle Schnittstellen senden so ein Unterbrechungssignal für jedes
einzelne empfangene Byte.</P>
<P>Jede Interrupt-Leitung innerhalb des Computers hat eine Nummer (im
allgemeinen ebenfalls als IRQ bezeichnet) und die serielle Schnittstelle
muss wissen, auf welcher Leitung sie ihre Anforderung zu signalisieren
hat. Z.B. verwendet <CODE>ttyS0</CODE> in der Regel die IRQ Nummer 4 (IRQ4). Eine Liste
dieser Nummern (und mehr) ist in der Manual Page des Kommandos
<CODE>setserial</CODE> zu finden (<CODE>man setserial</CODE>, im Abschnit »Configuring
Serial Ports«). Ein Interrupt Signal wird ausgelöst, wann immer die
serielle Schnittstelle die Aufmerksamkeit der CPU benötigt. Es ist
wichtig, dass dies rechtzeitig geschieht, weil der Speicherpuffer
der seriellen Schnittstelle nur 16 empfangene Bytes (in älteren
Modems ist es nur ein Byte) aufnehmen kann. Wenn die
CPU es nicht schafft, diese emfangenen Daten rechtzeitig abzuholen, dann
bleibt für weitere ankommende Bytes kein Platz mehr übrig und der kleine
Buffer kann überlaufen (Overrun). Es gehen dann Bytes verloren. Für ein
externes Modem gibt es keine Möglichkeit, den Datenfluss schnell genug zu
stoppen, um diese Situation zu verhindern. Bei einem internen Modem ist
der 16 Byte Buffer auf derselben Karte und ein gutes Modem wird nicht in
diesen Buffer schreiben, wenn er voll ist. Deshalb wird ein gutes internes
Modem den Buffer nicht zum überlaufen bringen und dies ist ein Vorteil eines
internen Modems.</P>
<P>Interrupts werden auch ausgelöst, wenn die serielle Schnittstelle gerade
alle 16 Bytes ihres kleinen Sendebuffers zum Modem übertragen hat. Es ist
dann wieder Platz für 16 weitere, zu sendende Bytes. Der Interrupt teilt
dies der CPU mit, so dass sie weitere Bytes in den Sendebuffer schreiben kann.
Ein Interrupt wird auch ausgelöst, wenn eine Modem-Steuerleitung ihren
Status ändert.</P>
<P>Die oben genannten Buffer sind alle in Form von Hardware realisert. Die
serielle Schnittstelle hat auch große Buffer im Bereich des Hauptspeichers.
Dies wird später erklärt.</P>
<P>Interrupts übertragen eine Menge Informationen, allerdings nur indirekt.
Der Interrupt selber signalisiert lediglich einem Chip, dem Interrupt
Controller, dass ein bestimmter serieller Port um Aufmerksamkeit bittet.
Die CPU wird darüber vom Interrupt Controller unterrichtet. Die CPU führt
dann ein bestimmtes Programm aus, um den seriellen Port zu bedienen. Dieses
Programm wird Interrupt Service Routine genannt und ist Bestandteil der
Treibersoftware für den seriellen Port. Es versucht herauszufinden, was
im seriellen Port passiert ist und behandelt dann das Problem, wie z.B.
die Übertragung von Datenbytes aus oder in den Buffer des Ports.
Die Service Routine kann leicht feststellen, was passiert ist, weil der
serielle Port über spezielle Register verfügt, deren I/O-Adressen der
Treibersoftware bekannt sind. Diese Register enthalten Statusinformationen
über den seriellen Port. Die Software liest diese Register aus,
erhält dadurch Information, was passiert ist und kann entsprechende
Maßnahmen einleiten.</P>
<H2><A NAME="ss2.6">2.6</A> <A HREF="DE-Modem-HOWTO.html#toc2.6">Datenkompression (durch das Modem)</A>
</H2>
<P> Bevor wir mit den Grundlagen zur seriellen Schnittstellen fortfahren,
müssen wir noch eine weitere Funktion des Modems verstehen: Datenkompression.
In manchen Fällen wird diese Aufgabe in Wirklichkeit von der Software
ausgeführt, die auf der CPU des Computer läuft, aber unglücklicherweise
funktioniert diese Software bislang nur unter MS Windows. Wir beschäften
uns hier mit dem Fall, dass das Modem selbst diese Aufgabe erledigt, denn
dies ist eine Voraussetzung, damit das Modem auch unter Linux funktioniert.</P>
<P>Um Daten schneller über die Telefonleitung übertragen zu können, kann man sie
komprimieren, indem man ein maßgeschneidertes Kodierungsverfahren verwendet,
welches selber wieder von der Art der Daten abhängt. Die kodierten Daten sind
kleiner (sie enthalten die gleiche Information in weniger Bytes) und können
in kürzerer Zeit über das Internet übertragen werden. Dieser Vorgang wird
als »Datenkompression« bezeichnet. </P>
<P>Wenn Sie Dateien aus dem Internet herunterladen, dann sind sie wahrscheinlich
bereits komprimiert und es ist für das Modem unmöglich, sie noch weiter zu
komprimieren. Ihr Modem kann evtl. feststellen, dass die Daten bereits
komprimiert wurden und einen weiteren Kompressionsversuch unterlassen.
Wenn Sie Daten empfangen, die von dem anderen Modem komprimiert wurden, so
wird Ihr Modem sie dekomprimieren und sehr viel mehr Bytes erzeugen, als über
die Telefonleitung gesendet wurden. Daher wird der Datenfluss vom Modem in den
Computer höher sein als der Fluss über die Telefonleitung zu Ihnen. Das
Verhältnis beider Flussgrößen wird Kompressionsrate genannt.
Kompressionsraten bis zu einem Wert von 4 sind möglich, aber sehr selten.</P>
<H2><A NAME="ss2.7">2.7</A> <A HREF="DE-Modem-HOWTO.html#toc2.7">Fehlerkorrektur</A>
</H2>
<P> Ähnlich wie Datenkompression können Modems auch eine Fehlerkorrektur
durchführen. Eigentlich ist der Name »Fehlerkorrektur« falsch, denn das
Modem kann einen Fehler nur erkennen und den fehlerhaften Datenblock
ein zweites Mal anfordern. Das Modem kann den Fehler aber nicht selbständig
korrigieren. Wenn man es genau nimmt, müsste man also von »Fehlererkennung«
sprechen.</P>
<P>Die serielle Schnittstelle erwartet, dass jedes zu übertragende Byte von
zwei zusätzlichen Bits eingerahmt ist: ein Start-Bit und ein Stop-Bit.
Ohne Verwendung einer Fehlerkorrektur werden diese zusätzlichen Bits
vom Modem über die Telefonleitung übertragen.
Obwohl bei den Fehlerkorrekturverfahren
zusätzliche Steuer- und Prüfsummeninformationen
übertragen werden, die den effektiven
Datendurchsatz (in Byte/s) reduzieren, führt die Tatsache, dass
jetzt auf die Start- und Stop-Bits verzichtet werden kann, in Wirklichkeit
zu einer leichten Erhöhung des Datendurchsatzes. Die Bytes werden jetzt in
einzelnen Paketen übertragen, und die Start- und Stop-Bits werden
überflüssig.</P>
<H2><A NAME="ss2.8">2.8</A> <A HREF="DE-Modem-HOWTO.html#toc2.8">Datenflussrate (Übertragungsgeschwindigkeit)</A>
</H2>
<P> Daten (Bytes, aus denen Briefe, Bilder usw. bestehen) fließen vom Computer
zum Modem und dann über die Telefonleitung (und umgekehrt). Durchsatzraten
wie z.B. 56k (56000 Bits/s) werden fälschlicherweise auch als
»Übertragungsgeschwindigkeit« bezeichnet, dieser Begriff hat sich jedoch
weitgehend
durchgesetzt. Gäbe es keine Datenkompression, dann würde die Durchsatzrate
zwischen Computer und Modem etwa mit der Durchsatzrate auf der Telefonleitung
übereinstimmen.</P>
<P>In Wirklichkeit sind jedoch zwei verschiedene Übertragungsgeschwindigkeiten
an Ihrem Ende der Telefonleitung zu unterscheiden:</P>
<P>
<UL>
<LI> Die Übertragungsgeschwindigkeit auf der Telefonleitung zwischen
beiden Modems (DCE Geschwindigkeit)</LI>
<LI> Die Übertragungsgeschwindigkeit zwischen der seriellen
Schnittstelle und dem Modem (DTE Geschwindigkeit)</LI>
</UL>
</P>
<P>Wenn Sie eine Verbindung mit einem Modem auf der anderen Seite der
Telefonleitung aufbauen, schickt Ihnen das Modem oft eine Nachricht wie
z.B. <CODE>CONNECT 28000</CODE> oder <CODE>CONNECT 115200</CODE>. Was bedeuten diese Angaben?
Nun, damit kann entweder die DCE- oder die DTE-Geschwindigkeit gemeint sein.
Wenn der Wert höher ist als auf dem Modem angegeben, muss es die DTE
Geschwindigkeit zwischen Modem und Computer sein. Dies ist der Fall für
den oben genannten Wert 115200. Der Wert 28800 kann nur die DCE-Geschwindigkeit
sein, weil die serielle Schnittstelle diesen Wert nicht kennt. Das Modem
kann so konfiguriert werden, dass es die eine oder die andere Geschwindigkeit
meldet. Einige Modems melden beide Werte und zeigen den DCE-Wert z.B. als
<CODE>CARRIER 28800</CODE> an.</P>
<P>Wenn Sie ein internes Modem verwenden, würden Sie vielleicht nicht erwarten,
dass es eine Begrenzung für die Übertragungsgeschwindigkeit zwischen Ihrem
Modem und Ihrem Computer gibt, weil sich das Modem innerhalb des Computers
befindet und fast ein Teil Ihres Computers ist. Aber es gibt diese Grenze,
weil das Modem einen fest zugeordneten seriellen Port enthält.</P>
<P>Es ist wichtig zu verstehen, dass die durchschnittliche Geschwindigkeit
häufig kleiner ist als die angegebene Geschwindigkeit, besonders auf der
kurzen Übertragungsstrecke zwischen Computer und Modem. Die geringere
Durchschnittsgeschwindigkeit ist durch Wartezeiten bedingt. Wegen der
<A HREF="#DE-Modem-HOWTO-flow_control">Flusskontrolle</A>
können durchaus Wartezeiten
von etwa einer Sekunde auftreten. Andererseits können auch sehr kurze
Verzögerungen von wenigen Mikrosekunden vorkommen, die das Ende des einen
Bytes und den Anfang des nächsten kennzeichnen. Außerdem können Modems
auf kleinere Geschwindigkeiten umschalten, wenn die Qualität der Telefonleitung
während der Verbindungsdauer schlechter wird.</P>
<P>Im Abschnitt
<A HREF="DE-Modem-HOWTO-12.html#DE-Modem-HOWTO-speed_">Welche Geschwindigkeit sollte ich verwenden?</A> wird erläutert,
welche DTE Geschwindigkeit eingestellt werden sollte.</P>
<H2><A NAME="DE-Modem-HOWTO-flow_control"></A> <A NAME="ss2.9">2.9</A> <A HREF="DE-Modem-HOWTO.html#toc2.9">Flusskontrolle </A>
</H2>
<P>Unter Flusskontrolle wird die Fähigkeit verstanden, den Fluss von Bytes
auf einer Übertragungsleitung zu unterbrechen und ohne Datenverlust wieder
aufzunehmen. Mittels Flusskontrolle kann das Modem die momentane
Durchsatzrate der Daten beeinflussen.</P>
<H3>Ein Beispiel für Flusskontrolle</H3>
<P> Nehmen wir einmal an, Sie verbinden ein 33,6k Modem, welches einfach
Bytes mit genau 33,6 kBits pro Sekunde (bps) über
die Telefonleitung sendet
und empfängt, mit dem seriellen Port. Das Modem soll keinerlei
Datenkompression oder Fehlerkorrektur durchführen. Und nehmen wir weiter an,
dass Sie die Geschwindigkeit der seriellen Schnittstelle auf
115.200 Bits/s
(bps) eingestellt haben und Daten vom Computer zum Modem übertragen. Dann
beträgt der Datenfluss vom Computer zum Modem 115,2 kbps. Der Datenfluss
des Modems über die Telefonleitung beträgt im besten Fall jedoch nur
33,6 kbps.
Weil ein höherer Datenfluss in das Modem hineingeht als von ihm wieder
herauskommt, speichert das Modem die Differenz (115,2k - 33,6k = 81,6k) in
einem seiner Buffer. Dieser Buffer kann schnell überlaufen, wenn der
115,2k-Fluss nicht gestoppt wird.</P>
<P>Und nun kommt die Flusskontrolle zu Hilfe. Wenn der Buffer des Modems
fast voll ist, sendet das Modem ein Stop-Signal zum seriellen Port. Der
serielle Port leitet dieses Signal zum Gerätetreiber weiter der 115,2 kbps
Fluss wird gestoppt. Das Modem sendet weiterhin Daten mit 33,6 kbps aus
seinem vorher angefüllten Buffer. Weil keine Daten mehr in diesen Buffer
hineinfließen, beginnt er sich zu leeren. Wenn fast keine Bytes mehr im
Buffer vorhanden sind, sendet das Modem ein Start-Signal zum seriellen Port
und der 115,2 kbps Datenstrom beginnt wieder zu fließen. Flusskontrolle
bewirkt also im Ergebnis einen durchschnittlichen Datendurchsatz (in unserem
Fall 33,6 kbps), der deutlich unter dem Durchsatz von 115,2 kbps im
eingeschalteten Zustand liegt. Dies ist die so genannte »Start-Stop«
Flusskontrolle.</P>
<P>Das eben geschilderte ist ein einfaches Beispiel für Flusskontrolle für
einen Datenfluss vom Computer zum Modem, aber auch für die
entgegengesetzte Übertragungsrichtung (vom Modem oder einem anderen Gerät
zum Computer) kann Flusskontrolle genutzt werden. Bei jeder Richtung des
Datenflusses spielen 3 verschiedene Buffer ein Rolle: 1. innerhalb des
Modems, 2. innerhalb des UART-Bausteins im seriellen Port und 3. in dem
Hauptspeicher, der vom Gerätetreiber des seriellen Ports verwendet wird.
Flusskontrolle schützt diese Buffer vor einem Überlauf. Die kleinen
Hardware-Buffer des seriellen Ports sind durch diesen Mechanismus nicht
direkt geschützt, sie vertrauen statt dessen auf die schnelle Reaktion
auf die von ihnen ausgelösten Interrupt-Signale. </P>
<P>Dies war das Wichtigste über Flusskontrolle, aber es gibt natürlich noch
mehr Details.</P>
<P>Für die Übertragungsrichtung vom Modem zum PC wird Flusskontrolle
nur selten notwendig sein. Im Kapitel »Complex Flow Control Example« des
<EM>Serial HOWTO</EM> wird ein Beispiel behandelt, in dem dies notwendig ist.
Aber wenn Sie die Übertragungsrate zwischen Modem und Computer
(Geschwindigkeit des seriellen Ports) nicht hoch genug eingestellt haben,
dann ist es notwendig, den Datenfluss vom Modem zum Computer zu reduzieren.
Um dies zu erreichen muss der über die Telefonleitung hereinkommende
Datenfluss unterbrochen werden können. Ihr Modem muss das andere Modem
veranlassen, weiter Daten zu senden. Siehe
<A HREF="#DE-Modem-HOWTO-M-M_flow_c">Modem-zu-Modem Flusskontrolle</A></P>
<H3>Hardware und Software Flusskontrolle</H3>
<P> Falls möglich, ist es das Beste, Hardware-Flusskontrolle zu verwenden;
dabei werden zwei der Modem-Kontrollleitungen verwendet, um das Start-
und Stop-Signal zu übermitteln. Software-Flusskontrolle nutzt die normalen
Sende- und Empfangsleitungen, um die Start- und Stop-Signale zu übertragen.
Für diesen Zweck werden die ASCII-Kontrollzeichen DC1 (Start) und DC3 (Stop)
verwendet. Sie werden einfach in den normalen Datenstrom eingefügt.
Software-Flusskontrolle ist nicht nur langsamer hinsichtlich der
Reaktionszeit, auch die Übertragung binärer Daten ist nicht möglich, ohne
dass besondere Vorsichtsmaßregeln getroffen werden. Weil beliebige binäre Daten
sehr wahrscheinlich die Bitmuster DC1 und DC3 enthalten, muss mit
besonderen Mitteln zwischen einem DC3-Zeichen, das das Flusskontroll-Zeichen
»Stop« bedeutet und einem DC3-Zeichen, das Teil der binären Daten ist,
unterschieden werden. Das gleiche gilt für DC1. Eine funktionierende
Software-Flusskontrolle für binäre Daten setzt sowohl Modem- (Hardware) als
auch entsprechende Software-Unterstützung voraus.</P>
<H3>Anzeichen fehlender Flusskontrolle</H3>
<P> Die Theorie der Flusskontrolle zu verstehen, kann von praktischem
Nutzen sein. Z.B. habe ich mein Modem für einen Internet-Zugang verwendet,
und alles schien gut zu funktionieren. Nach einigen Monaten versuchte ich,
große Dateien von meinem PC zum ISP (Internet Service Provider) zu
übertragen, dabei kam es zu vielen Übertragungswiederholungen und Fehlern.
Das Empfangen von Dateien aus der anderen Richtung (von meinem ISP zu mir)
funktionierte einwandfrei. Es stellte sich heraus, dass das Problem ein
Hardwarefehler in meinem Modem war, der dazu führte, dass die Flusskontrolle
deaktiviert wurde. Der Buffer des Modems lief über, wenn große Dateien
gesendet wurden, weil nie ein Stop-Signal zum Computer gesendet wurde, um
den Datenfluss zum Modem zu unterbrechen. Für die entgegengesetzte
Übertragungsrichtung vom Modem zum Computer trat kein Problem auf, weil die
Endgerätegeschwindigkeit (z.B. 115,2 kBit/s) immer höher war als die
Übertragungsgeschwindigkeit auf der Telefonleitung. Die Lösung des Problems
bestand darin, ein Kommando zur Aktivierung der Flusskontrolle am Ende
des Modem-Initialisierungsstrings anzuhängen.</P>
<H3><A NAME="DE-Modem-HOWTO-M-M_flow_c"></A> Modem-Modem Flusskontrolle </H3>
<P> Dies ist die Flusskontrolle für die Daten, die zwei Modems
über die Telefonleitung austauschen. In der Praxis gibt es diese Flusskontrolle
nur, wenn die Fehlerkorrektur eingeschaltet ist. Es ist aber tatsächlich
möglich, Software-Flusskontrolle zwischen zwei Modems auch ohne Fehlerkorrektur
einzuschalten, dies kann aber das Senden von binären Daten stören und daher
wird sie selten verwendet.</P>
<H2><A NAME="ss2.10">2.10</A> <A HREF="DE-Modem-HOWTO.html#toc2.10">Weg des Datenflusses; Puffer</A>
</H2>
<P> Obwohl viel von diesem Thema schon erklärt wurde, z.B. Flusskontrolle,
ein Paar 16 Byte Puffer der Hardware des seriellen Ports und ein Paar von
größeren Puffern innerhalb des Modems, so gibt es doch noch ein anderes
Pufferpaar. Dies sind größere Puffer (z.B. 8 kByte) im Hauptspeicher,
die so genannten Schnittstellenpuffer des seriellen Ports.
Wenn ein Anwendungsprogramm
Bytes zum seriellen Port (und damit zum Modem) sendet, werden sie zuerst
im Sendepuffer des seriellen Ports im Hauptspeicher zwischengespeichert.
Das Pufferpaar besteht aus diesem Sendepuffer und einem Empfangspuffer für
die entgegengesetzte Richtung des Datenstroms.</P>
<P>Der Gerätetreiber des seriellen Ports holt sich aus diesem Sendepuffer z.B.
16 Bytes, ein Byte nach dem anderen, und legt sie im 16 Byte
Hardware-Sendepuffer zur Übertragung ab. Wenn die Bytes erst einmal in diesem
Sendepuffer gelandet sind, gibt es keine Möglichkeit mehr, ihr Versenden
zu verhindern. Sie werden dann zum Modem übertragen, welches wiederum
über einen genügend großen Puffer (z.B. 1 kByte) verfügt.
Wenn der Gerätetreiber
(durch die Flusskontrolle angefordert) den ausgehenden Datenfluss des
Computers unterbricht, wird in Wirklichkeit nur der Datenstrom aus dem
großen Sendepuffer des Hauptspeichers unterbrochen. Selbst nachdem dies
geschehen ist und der Datenfluss zum Modem gestoppt wurde, kann ein
Anwendungsprogramm weiterhin Daten in diesen 8k-Sendepuffer hineinschreiben
bis er voll wird. </P>
<P>Wenn dieser Puffer gefüllt ist, kann das Anwendungsprogramm keine Daten
mehr in diesen Puffer schreiben (der <CODE>write()</CODE>-Befehl
in einem C-Programm
blockiert) und das Anwendungsprogramm stoppt vorübergehend in seinem
Ablauf und wartet, bis wieder ein wenig Speichplatz im Puffer verfügbar
wird (synchrone Arbeitsweise).
Daher kann ein Flusskontroll-»Stop« Signal im Extremfall das
Programm anhalten, welches die Bytes sendet. Obwohl dieses Programm steht,
muss das nicht bedeuten, das auch der Computer steht. Andere Prozesse
können die CPU Zeit beanspruchen, während er auf ein »Start«-Signal von
der Flusskontrolle wartet. </P>
<P>Die eben geschilderten Vorgänge wurden ein wenig vereinfacht dargestellt,
da es für das Anwendungsprogramm auch die Alternative gibt, etwas anderes
zu tun, während es auf die »write«-Anweisung wartet (asynchrone Arbeitsweise).</P>
<H2><A NAME="ss2.11">2.11</A> <A HREF="DE-Modem-HOWTO.html#toc2.11">Modem Befehle</A>
</H2>
<P> Befehle werden vom Kommunikationsprogramm über die selben Leitungen
an das Modem gesendet, die auch für die Übertragung von Daten genutzt
werden. Die Befehle bestehen aus kurzen ASCII-Strings, z.B. »AT&K3«
um die Hardware-Flusskontrolle (RTS/CTS) zwischen Computer und Modem zu
aktivieren, oder »ATDT5393401« um die Nummer 5393401 anzuwählen. Beachten
Sie, dass alle Befehle mit »AT« beginnen. Einige Befehle, wie z.B. der
Befehl zum Einschalten der Flusskontrolle, helfen dabei, das Modem zu
konfigurieren. Andere Befehle wie z.B. der Wählbefehl bewirken, dass
tatsächlich etwas passiert. Es gibt etwa 100 verschiedene möglich Befehle.
Wenn Ihr Kommunikationsprogramm startet, sendet es zuerst einen
Initialisierungsbefehl an das Modem, der aus mehreren AT-Befehlen bestehen
kann, um es richtig einzustellen. Alle Befehle werden über die gewöhnlichen
Datenleitungen gesendet, bevor das Modem wählt oder einen Anruf erhält.</P>
<P>Wenn das Modem mit dem anderen Modem verbunden ist (Online Modus), wird alles,
was vom Computer zum Modem gesendet wird, direkt zum anderen Modem übertragen
und vom Modem nicht als Befehl interpretiert. Es gibt eine Möglichkeit,
diesen Modus zu verlassen und zurück in den Kommandomodus zurückzukehren,
in dem alles, was an das Modem gesendet wird, als Befehl interpretiert wird.
Der Computer sendet einfach die Zeichenfolge »+++«, wobei
innerhalb eines bestimmten Zeitfensters vor und nach dem Senden
dieses Befehls keine anderen Daten übertragen
werden. Wenn das Zeitfenster eingehalten wird, kehrt das Modem in den
Befehlsmodus zurück. Eine andere Möglichkeit dies zu erreichen ist ein
Signal auf einer bestimmten Modemsteuerleitung.</P>
<P>Es gibt eine Reihe von Tabellen dieser Modem-Befehle im Internet. Der
Abschnitt
<A HREF="DE-Modem-HOWTO-16.html#DE-Modem-HOWTO-web_sites">Seiten im Internet</A> enthält Links
zu einigen solchen WWW Adressen. Verschiedene Modem-Modelle und -marken
verwenden nicht genau den gleichen Satz von Befehlen. Was bei einem Modem
funktioniert, kann bei einem anderem Modem versagen. Einige gemeinsame
Befehle (es wird nicht garantiert, dass sie für alle Modems funktionieren)
sind in diesem HOWTO im Abschnitt
<A HREF="DE-Modem-HOWTO-5.html#DE-Modem-HOWTO-modem_conf">Modem Konfiguration</A> aufgelistet.</P>
<H2><A NAME="ss2.12">2.12</A> <A HREF="DE-Modem-HOWTO.html#toc2.12">Gerätetreibersoftware für den seriellen Port</A>
</H2>
<P> Der Gerätetreiber für den seriellen Port ist die Software,
die die Hardware des seriellen Ports anspricht. Der Linux Kernel bedient
sich der Funktionen der Treibersoftware, um die
serielle Schnittstelle zu nutzen. Dieser Gerätetreiber wird nun als
ladbares Modul angeboten. Das Modul wird normalerweise vom Kernel
automatisch geladen, wenn es benötigt wird. Kernel ab der Version 2.2
unterstützen dies. In älteren Kernel-Versionen musste der Prozess
<CODE>kerneld</CODE> laufen, um Module bei Bedarf automatisch zu laden. Anderenfalls
musste das Modul explizit im Verzeichnis <CODE>/etc/modules</CODE>
zu finden sein. Bevor unter Linux Module verwendet wurden, waren
Gerätetreiber üblicherweise Teil des Kernels (»monolithischer Kernel«).</P>
<P>Wenn das Modul mit dem seriellen Gerätetreiber geladen wird, werden
Informationen über die vorhandenen seriellen Ports auf dem
Bildschirm angezeigt (oft mit einem falschen IRQ). Wenn aber mithilfe
von <CODE>setserial</CODE> dem Gerätetreiber der hoffentlich richtige Wert
für den IRQ mitgeteilt wurde, sollten Sie eine weitere Bildschirmausgabe
mit den richtigen Werten sehen. Der Abschnitt
<A HREF="DE-Modem-HOWTO-8.html#DE-Modem-HOWTO-set_serial">Was ist setserial</A> enthält mehr Informationen über den
<CODE>setserial</CODE>-Befehl.</P>
<P>Man kann den Treiber modifizieren, wenn man den Kernel-Quellcode ändert.
Vieles, was den seriellen Treiber betrifft, findet sich in der Datei
<CODE>serial.c</CODE>. Informationen über die Entwicklung von Programmen für
den seriellen Port gibt das <EM>Serial Programming HOWTO</EM>.</P>
<HR>
<A HREF="DE-Modem-HOWTO-3.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Modem-HOWTO-1.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Modem-HOWTO.html#toc2"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|