Inhaltsverzeichnis

Werbung
Inhaltsverzeichnis
Inhaltsverzeichnis
0. Vorwort ....................................................................................................................... 3
1. Einleitung .................................................................................................................... 4
2. Digitale Modulation und Internet-Protokolle .......................................................... 6
2.1. Schichtenmodelle ................................................................................................. 6
2.2. V.21 Modemstandard zur Datenübertragung im öffentlichen Telefonnetz ......... 9
2.3. Das Point-to-Point-Protokoll (PPP) ..................................................................... 12
2.3.1. Hauptkomponenten des PPP ...................................................................... 12
2.3.2. Rahmenbildung auf Basis des HDLC-Protokolls ....................................... 13
2.3.2.1. Rahmenformat ..................................................................................... 13
2.3.2.2. Transparenz ......................................................................................... 16
2.3.2.3. Ungültige Datenrahmen ...................................................................... 17
2.3.2.4. Inter-frame Fill .................................................................................... 17
2.3.2.5. FCS (Frame Check Sequence) Berechnung ........................................ 17
2.3.3. PPP-Verbindungs-Optionen ....................................................................... 20
2.3.3.1. Überblick ............................................................................................. 20
2.3.3.2. Das PPP-Phasen-Diagramm ................................................................ 21
2.4. Das Link-Control-Protokoll (LCP) ...................................................................... 24
2.4.1. Das LCP-Datenformat ................................................................................ 25
2.4.2. Die LCP-Datenpakete ................................................................................. 26
2.4.3. Die LCP-Konfigurations-Optionen ............................................................ 30
2.5. Das Internet-Protocol-Control-Protokoll (IPCP) ................................................. 34
2.5.1. Das IPCP-Datenformat ............................................................................... 34
2.5.2. Die IPCP-Konfigurations-Optionen ........................................................... 35
2.6. Der Option-Negotiation-Automat ........................................................................ 36
2.6.1. Der Restart-Timer und seine Counter .........................................................36
2.6.2. Zustandübergangs-Tabelle ......................................................................... 39
2.6.3. Zustände, Ereignisse und Aktionen ............................................................ 40
2.7. PPP-Protokoll-Mitschnitt ..................................................................................... 42
2.8. TCP/IP und HTTP ............................................................................................... 44
3. Soft-Modem Baugruppe ............................................................................................ 45
3.1. Vom Hard- zum Softmodem ................................................................................ 45
3.2. Direct Access Arrangement (DAA) ..................................................................... 47
3.3. Die Mikrocontroller-Baugruppe .......................................................................... 48
1
Inhaltsverzeichnis
4. Funktionsblöcke der Software .................................................................................. 54
4.1. Rufsignalerkennung und Steuerung des Rufzustandes ........................................ 54
4.2. Digitale Modulation nach V.21 ............................................................................ 58
4.2.1. V.21 FSK Modulator .................................................................................. 58
4.2.2. V.21 FSK Demodulator .............................................................................. 61
4.3. V.21 Negotiation-Handshake ............................................................................... 67
4.4. PPP im Server-Betrieb ......................................................................................... 70
4.5. Maßnahmen zur Anpassung des TCP/IP-Stacks an das PPP ............................... 76
4.6. Embedded Soft-Modem Applikation..................................................................... 78
5. Ressourcen-Untersuchungen und Ausblick ............................................................. 80
6. Zusammenfassung ...................................................................................................... 83
A
Literatur- und Quellenverzeichnis ..................................................................... 84
B
Schaltplan und Bestückungsliste ......................................................................... 86
2
Vorwort
0. Vorwort
Nach der Absolvierung meines praktischen Studiensemesters im Bereich der Field
Applications MSP430 bei der Firma Texas Instruments entstand, angeregt durch einen
Mitarbeiter von Texas Instruments und Herrn Professor Sturm, die Idee zu der vorliegenden
Diplomarbeit mit dem Thema „Entwicklung einer Embedded Softmodem Applikation auf
Basis des MSP430F149 Mikrocontroller von Texas Instruments“.
Danken möchte ich allen Mitarbeitern des Forschungs- und Transferzentrum Leipzig (FTZLeipzig e.V.), die mir einen Arbeitsplatz zur Verfügung gestellt haben, mir mit Rat und Tat
bei der Entwicklung zur Seite standen und damit nachhaltig einen positiven Eindruck eines
sehr angenehmen Arbeitsklimas hinterlassen haben. Besonderer Dank gilt Herrn Tobias
Wengemuth, ohne dessen Erfahrung im Entwurf und Erstellen von Leiterplatten-Prototypen,
die Entwicklung weitaus mehr Zeit in Anspruch genommen hätte. Weiterhin geht mein Dank
an Herrn Professor Sturm für die unkomplizierte und reibungslose Zusammenarbeit auf dem
organisatorischen Gebiet und die unerschöpfliche Flut an Ideen in Engpässen der
Entwicklung.
3
Einleitung
1. Einleitung
Unter dem Schlagwort „Embedded Internet“ wird meist der Netzzugang Mikrocontrollerbasierter Geräte über Ethernet verstanden. Der Traum vom Zugriff auf entlegene Endgeräte
per Web wird sich jedoch kaum mit Ethernet realisieren lassen. An dieser Stelle gewinnt
einmal mehr die allgegenwärtige Telefonleitung an Bedeutung, die in Kombination mit einem
Modem als Übertragungskanal von Daten dienen kann. Eine besonders elegante, kleine und
Kosten sparende Möglichkeit, den Netzzugang – ohne externes Modem - über die
Telefonleitung zu realisieren, stellt ein sog. Soft-Modem-Ansatz dar, der eine fast direkte
Verbindung zwischen Controller und Telefonnetz erlaubt.
Ausgangspunkt für diese Arbeit war ein Projekt mit dem Namen „easyWeb“, das bereits im
Jahr 2001 ins Leben gerufen wurde und als Komplett-Lösung in [D&E] im Detail beschrieben
und offen gelegt wurde. Die Rede ist dabei von einem Mikrocontroller-basierten
Internetknoten auf der Basis des MSP430F149 Mikrocontroller der Firma Texas Instruments,
der sich per Ethernet an ein IP-Netzwerk anschließen lässt. Im Mikrocontroller ist ein
TCP/IP-Protokollstapel implementiert und als Anwendungs-Beispiel wurde ein Webserver
realisiert, der für die Teilnehmer im IP-Netzwerk eine dynamische Internet-Seite zum Abruf
bereit hält.
Ziel dieser Arbeit war es, die Webserver-Baugruppe vorerst per serieller RS-232 Schnittstelle
und einem externen Modem über die Telefonleitung betreiben zu können und anschließend
möglichst viele Funktionen des externen Modems mit dem MSP430F149 in EmbeddedSoftware zu realisieren, um eine kompakte Soft-Modem-Applikation zu erstellen. Das
Ergebnis und der, im Folgenden beschriebene Entwicklungsweg dieser Arbeit stellt nur einen
möglichen Lösungs-Ansatz auf dem Weg zu einer Soft-Modem-Applikation dar und soll
vielmehr als Machbarkeits-Studie betrachtet werden, in der gezeigt wird, mit welchen
einfachen Mitteln eine Internet-Anbindung über das öffentliche Telefonnetz realisiert werden
kann. Die entwickelte Soft-Modem-Baugruppe stellt demnach auch kein Industrie-reifes
Endprodukt dar, sondern bietet eine Menge Ansatzpunkte zur Weiterentwicklung in Richtung
einer wirtschaftlich sinnvollen Lösung.
Als Herzstück der Entwicklung diente, vorgegeben durch die „easyWeb“-Baugruppe, der
MSP430F149 ultra-low-power Mikrocontroller der Firma Texas Instruments. Es wird sich
später zeigen, dass zur Realisierung der eigentlichen Modem-Funktionen weitaus weniger
Ressourcen benötigt werden, als der MSP430F149 zur Verfügung stellt.
4
Einleitung
Die Reihenfolge der einzelnen Kapitel dieser Arbeit entspricht dem Entwicklungsweg, der
von der Webserver-Baugruppe hin zur Soft-Modem-Applikation beschritten wurde und
gliedert sich wie folgt.
Kapitel 2
Protokoll-Grundlagen für die Internetanbindung über das öffentliche
Telefonnetz. Ersatz von Ethernet durch Point-to-Point-Protokoll und
Digitale Modulation nach V.21 Modemstandard auf physikalischer
Ebene
Kapitel 3
Der Weg vom Hard- zum Soft-Modem und Beschreibung der
entwickelten Soft-Modem-Baugruppe
Kapitel 4
Erläuterung und Dokumentation der, in Funktionsblöcke eingeteilten,
Mikrocontroller-Software
Kapitel 5
Untersuchungen zu den erforderlichen Mikrocontroller-Ressourcen der
Soft-Modem-Applikation und Ideen zur unmittelbaren
Weiterentwicklung
Kapitel 6
Zusammenfassung und Ausblick
5
Digitale Modulation und Internet-Protokolle
2. Digitale Modulation und Internet-Protokolle
2.1. Schichtenmodelle
Bei der Entwicklung von Systemen zur Datenkommunikation ist es allgemein üblich
Kommunikations-Mechanismen in einem Schichtenmodell darzustellen. Dies ermöglicht eine
einfache Einordnung der realisierten Funktionen in ein allgemein verständliches Modell und
liefert Freiraum für Änderungs- und Erweiterungsmöglichkeiten, da das Gesamtproblem der
Entwicklung eine Unterteilung (Schichtung) in mehrere einzelne Problem-Komponenten
erfährt. Die Schnittstellen der Komponenten sind dann genau definiert und es kann eine
getrennte Bearbeitung der Teilprobleme erfolgen. D.h. in einer „Schichtenorientierten
Architektur“ (vertikale Anordnung der Schichten übereinander) stellt jede Schicht der
nächstübergeordneten Schicht einen Satz bestimmter Dienstleistungen zur Verfügung. Die
übergeordnete Schicht übernimmt bedenkenlos die ihr dargebotene Dienstleistung, verlässt
sich somit kritiklos auf die Funktion der untergeordneten Schicht. Die untergeordnete Schicht
hat mit dem Liefern der Dienstleistung ihre Aufgabe erfüllt.
Beim Datenaustausch zweier Rechnersysteme erfolgt die Kommunikation einander
entsprechender Schichten über ein bestimmtes Protokoll. Der Informationsaustausch zwischen
gegenüberliegenden Schichten erfolgt jedoch nicht im Sinne einer direkten Verbindung,
sondern Zuhilfenahme von Dienstleistungen untergeordneter Schichten. Die einzelnen
Schichten
stehen
demnach
stellvertretend
für Protokolle mit
den
dazugehörigen
ISO/OSI Referenzmodell
Dienstleistungen. Man spricht
Application Layer
daher auch von „Protokoll-
Presentation Layer
DoD-Internet-Standard
TCP/IP-Architektur
Application Layer
Session Layer
Stapeln“ (Stacks).
Die für das Internet gültige
Architektur basiert auf einer
Transport Layer
Gliederung in vier Schichten
Internet Layer
und ist als DoD-Standard
Network Layer
(Department of Defence) oder
Transport Layer
Network Layer
Data Link Layer
TCP/IP-Architektur bekannt.
Physical Layer
Der DoD-Standard kann als
Teilmenge
Abb. (2.1): ISO/OSI und Internet-Referenzmodell
des
allgemein
gültigen und standardisierten
ISO/OSI-7-Schicht-Referenzmodells (International Organisation for Standardization, Open
System Interconnection) verstanden werden. Eine weitere Beschreibung der einzelnen
6
Digitale Modulation und Internet-Protokolle
ISO/OSI-Schichten wird an dieser Stellen nicht vorgenommen und auf weitere Quellen
verwiesen [TCP/IP]. Eine Gegenüberstellung der Referenzmodelle DoD-Standard und
ISO/OSI zeigt Abbildung (2.1).
Abbildung (2.2) zeigt das Blockschaltbild der „easyWeb“-Webserver-Baugruppe in
Zusammenhang mit dem TCP/IP-Schichtenmodell und den konkreten Protokoll-Stapeln
(Ethernet, IP, ARP, TCP, ICMP, HTTP), die von der Baugruppe bedient werden.
8 MHz
20 MHz
DoD-Internet-Standard
TCP/IP-Architektur
D[7...0]
JTAG
MSP430F149
RS232
CS8900A
A[3...0]
Application Layer
HTTP
Transport Layer
TCP / ICMP
IOR
Internet Layer
IP / ARP
IOW
LEDs: Power,
Link, LAN
ImpulsTransf.
3,3 V
Power-Supply
RJ45LAN
Network Layer
ETHERNET
Abb. (2.2): Webserver-Baugruppe und Schichtenmodell
Die Kommunikation auf Netzwerk-Schicht, also das Ethernet, wird hierbei komplett von
einem zusätzlichen Ethernetcontroller (CS8900A der Firma Crystal) behandelt, der per
Übertrager (Impuls-Transformator) und RJ-45-Westernsteckerbuchse mit dem EthernetNetzwerk verbunden wird. Ethernetcontroller und MSP430F149 kommunizieren über ein klar
definiertes Bussystem, über das der Datenaustausch erfolgt. Sämtliche höheren ProtokollSchichten von IP über TCP bis zum HTTP sind im MSP430F149 implementiert. Der
Ethernetcontroller implementiert das Kanalzugriffsverfahren und speichert eingehende, sowie
zu sendende Datenpakete im internen RAM zwischen, bevor diese, im Falle eines
empfangenen Datenpakets, an die höheren Protokoll-Schichten im Mikrocontroller
weitergereicht, oder im Sendefall, auf das physikalische Medium zur Übertragung gegeben
werden. Die MSP430F149 Software muss lediglich kontrollieren, ob der Ethernetcontroller
irgendwelche Daten in seinem Empfangspuffer gespeichert hat. Ist dies der Fall, können die
Daten vom Ethernetcontroller an den MSP430F149 übermittelt und von den implementierten
Protokoll-Mechanismen ausgewertet werden. Je nachdem, ob die Daten für die WebserverApplikation relevant oder nicht von Interesse sind, werden die empfangenen Daten verworfen
7
Digitale Modulation und Internet-Protokolle
oder entsprechende Antwort-Datenpakete zusammengestellt, die dann anschließend wieder in
den Ausgangspuffer des Ethernetcontrollers geschrieben werden. Der Ethernetcontroller
kümmert sich dann selbständig darum, wann der richtige Zeitpunkt eintritt, um die Daten in
seinem Ausgangspuffer auf das physikalische Medium zu geben.
Um nun die Webserver-Applikation über das öffentliche Telefonnetz betreiben zu können,
wird auf der Netzwerk-Schicht das Ethernet durch ein weiteres Software-Protokoll ersetzt,
dass es ermöglicht Datenpakete über eine serielle Punkt-zu-Punkt-Verbindung zu übermitteln
und gleichzeitig eine Ethernet-äquivalente Schnittstelle zur höheren IP-Schicht darstellt. Für
reine TCP/IP-Netze steht hierfür seit den achtziger Jahren das Serial-Line-Interface-Protokoll
(SLIP) zur Verfügung. SLIP weist jedoch zu viele Defizite auf, um als allgemeingültiger
Standard akzeptiert zu werden. Das umfangreichere und mit Multiprotokoll-Charakter
ausgestattete Point-to-Point-Protokoll (PPP) bietet
DoD-Internet-Standard
TCP/IP-Architektur
Application Layer
HTTP
Transport Layer
TCP / ICMP
Internet Layer
IP
Network Layer
PPP / MODEM
Abb. (2.3): Soft-Modem Schichtenmodell
weitaus bessere Mechanismen und erfreut sich
dementsprechend großer Popularität. Das PPP wird
mittlerweile standardmäßig von Internet-fähigen
PC-Systemen
zum
Aufbau
einer
Modem-
Wahlverbindung (DFÜ-Verbindung) verwendet und
findet deshalb auch in diesem Projekt seine
Anwendung. Neben dem PPP bildet das Modem den
zweiten Bestandteil der Netzwerk-Schicht. Das
Modem stellt die Schnittstelle zum physikalischen
Medium, der Telefonleitung, dar und kümmert sich mittels digitaler Modulation um die
Anpassung der binären Information an das Übertragungsmedium. Abbildung (2.3) zeigt das,
für die Soft-Modem-Applikation gültige Schichtenmodell.
Die Einschränkung des zugrunde liegenden TCP/IP-Stacks, nur eine aktive TCP-Verbindung
zu ermöglichen, tritt bei der Soft-Modem-Applikation in den Hintergrund, da hierbei Daten
über eine serielle Punkt-zu-Punkt-Verbindung übermittelt werden, an der sowieso nur zwei
Verbindungs-Teilnehmer beteiligt sind.
Weiterhin entfällt ein Protokoll der Internet-Schicht. Das Address-Resolution-Protokoll
(ARP), das die vom IP verwendeten IP-Adressen in Hardware-Adressen (die sog. MACAdressen) auflöst und damit die Grundlage für die Kommunikation über Ethernet darstellt.
Das in diesem Projekt besprochene Point-to-Point-Protokoll erfordert keine Auflösung der IPAdressen in Hardware-Adressen.
8
Digitale Modulation und Internet-Protokolle
In den folgenden zwei Punkten dieses Kapitels wird zuerst, der für dieses Projekt verwendete
Modemstandard besprochen und anschließend im Detail auf die Definition und
Implementierungs-Forderungen des PPP eingegangen.
2.2. V.21 Modemstandard zur Datenübertragung im öffentlichen
Telefonnetz
Zentrale Aufgabe eines Modems ist einerseits die Modulierung von binärer Information in
analoge Signale, die über die Telefonleitung übertragen werden können und andererseits die
Demodulierung von analogen Übertragungs-Signalen zurück in binäre Information. Aus
dieser Aufgabe lässt sich auch der Name Modem herleiten, als Modulator und Demodulator.
Die verschiedenen Arten der Binärmodulation sind in den sog. CCITT-Empfehlungen der VSerie
definiert.
Tabelle
(2.1)
zeigt
einen
kleinen
Ausschnitt
der
empfohlenen
Modemstandards entnommen aus [FHL].
V.21
Datenübertragung bei 300bit/s vollduplex, im Wählnetz. Für jede der beiden
Richtungen wird eine eigene Trägerfrequenz verwendet. Die binären Zustände
werden durch Frequenzen (Frequenzumtastung) codiert.
V.22
Übertragungsnorm mit 1200bit/s, vollduplex. Als Modulation wird
Phasenumtastung verwendet. Die Baudrate beträgt 600Baud. Gleichzeitige
Übertragung von zwei Bits (Dibit) in vier Zuständen bzw. Phasensprüngen. Die
Trägerfrequenzen sind 1200Hz bei Originate bzw. 2400Hz bei Answer.
V.22bis
Übertragungsnorm für Geschwindigkeiten von 2400bit/s. Basiert auf V.22, nur
dass statt zwei Bits vier Bits (Quadbit) gleichzeitig übertragen werden. Arbeitet
mit QAM als Modulation bei den selben Frequenzen wie V.22
Asymmetrische vollduplex Datenübertragung. In der einen Richtung wird mit
1200bit/s übertragen, in der anderen mit 75bit/s (Split-Speed). Modulation ist
Frequenzumtastung.
Vollduplex-Modem mit 2400bit/s und Echobeseitigung zur Benutzung im
öffentlichen Telefonwählnetz und auf Zweidraht-Telefonmietleitungen. Verfahren
ähnlich V.22
ITU-T-Norm zur halbduplex-Datenübertragung mit 9600bit/s. Basiert auf
V.22bis. Dort hat man eine Schrittgeschwindigkeit von 600Baud. Dabei werden
mit QAM vier Bit (Quadbit) gleichzeitig übertragen. Die Schrittgeschwindigkeit
wurde für V.29 auf 2400Baud erhöht. Dafür wird eine Trägerfrequenz von
1700Hz verwendet, die genau in der Mitte des Frequenzbandes (300Hz bis
3400Hz) liegt. Für den Rückkanal bleibt damit kein Platz mehr.
V.23
V.26ter
V.29
V.32
ITU-Norm zur Datenübertragung mit 9600bit/s bidirektional (vollduplex). Basiert
auf V.29. Ebenso wie dort werden für 9600bit/s Quadbit mit QAM übertragen,
9
Digitale Modulation und Internet-Protokolle
allerdings bei einer Trägerfrequenz von 1800Hz. Auch hier ist kein Platz für einen
Rückkanal. Daher senden beide Modems gleichzeitig auf derselben Frequenz. Da
aber jedes Modem weiß, was es gerade gesendet hat, kann es aus dem
Frequenzgemisch sein Signale unterdrücken und so die Daten der Gegenstelle
herausfiltern (Echo-Cancelling). Eine Variante von V.32 ist die TrellisModulation. Hier werden statt der Quadbit Quintbit übertragen. Das zusätzliche
Bit wird nicht für Datenübertragung genutzt, sondern für die Fehlerkorrektur.
Dadurch ist die Übertragung etwa doppelt so fehlersicher, wie ohne Trellis.
Erweiterung von V.32 auf 14400bit/s vollduplex.
Duplexmodem mit Geschwindigkeiten bis 28800bit/s für die Verwendung im
allgemeinen Telefonnetz auf Zweidraht-Telefonmietleitungen und für
festgeschaltete Zweidraht-Telefonmietleitungen (Punkt-zu-Punkt)
Duplexmodem mit Geschwindigkeiten bis 33600bit/s
V.32bis
V.34
V.34bis
V.90
56k-Modems behandeln die Telefonleitung nicht wie ein analoges System,
sondern nutzen die überwiegend digitale Struktur moderner Netze
Tab.(2.1): V-Modemstandards
Für dieses Projekt wurde die Festlegung getroffen, die Kommunikation ausschließlich auf
Basis des V.21-Modemstandards zu realisieren.
Der V.21-Standard definiert eine voll-duplex Verbindung zur gleichzeitigen Übertragung von
Daten in beide Richtungen mit einer Bitgeschwindigkeit von 300 bit/s. Der Standard gilt
sowohl
für
synStartbit
asynchrone
Ver-
bindungen, wobei in
Binärsignal
chrone, als auch für
0
Stoppbit
Datenbits
1
1
0
1
0
0
1
0
dieser Arbeit, die für
bindungen
übliche
t
FSK-Signal
Modem-Wahlver-
1
asynchrone
Datenübertragung
Abb.(2.4): Binär- und FSK-Signal für ASCII „K“
im Betrachtungsfeld steht. Bei asynchroner Datenübertragung werden die Datenbits (z.B. ein
Byte) vor der Übertragung mit einem Start- und Stoppbit umrahmt.
Die Binärmodulation des V.21-Standards erfolgt durch eine Frequenzumtastung (engl.
Frequency Shift Keying, FSK), bei der den Binärzuständen 0 und 1 jeweils genau eine
charakteristische Frequenz zugeordnet wird und entsprechend der zu sendenden Bitfolge in
Bitgeschwindigkeit zwischen den beiden charakteristischen Frequenzen umgetastet wird.
Abbildung (2.4) zeigt schematisch das FSK-Signal für das ASCII-codierte Zeichen „K“.
10
Digitale Modulation und Internet-Protokolle
Zur Realisierung der voll-duplex Verbindung definiert der V.21-Standard zwei getrennte
Frequenzkanäle, die mit Kanal Nr.1 und Kanal Nr. 2 bezeichnet werden. Ein Kanal zum
Empfangen und einer zum Senden. Abbildung (2.5) stellt die beiden Kanäle im
Frequenzbereich dar. Jeder Kanal belegt einen Frequenzbereich von ∆f = ±100Hz. Aus
Tabelle (2.2) lassen sich die nominellen Mittenfrequenzen und die, bei einem
Frequenzbereich von ±100Hz resultierenden, charakteristischen Frequenzen der FSK des
jeweiligen Kanals entnehmen.
Kanal Nr.1
Kanal Nr.2
f1 = 1080Hz
f2 = 1750Hz
binär 1
980Hz
1650Hz
binär 0
1180Hz
1850Hz
nominelle Mittenfrequenz
charakteristische Frequenzen
Tab.(2.2): Frequenzdefinitionen für FSK nach V.21
Die Frequenzen sind so gewählt, dass sich beide Kanäle innerhalb des Sprachbandes
befinden, für das das Telefonnetz ursprünglich ausgelegt wurde.
Weiterhin definiert der V.21-Standard zwei verschiedene Modem-Betriebsarten. Zum einen
den
Kanal Nr.1
Kanal Nr.2
als
Originate-Mode
bezeichneten
Zustand des rufenden Modem, das im Kanal
A
Nr.1 sendet und im Kanal Nr. 2 empfängt.
Und zum anderen den als Answer-Mode
bezeichneten Zustand des gerufenen Modem,
das entsprechend im Kanal Nr.1 empfängt
//
f1-∆f
f1
f1+∆f
f2-∆f
f2
f2+∆f
und
f
im
entwickelte
Abb.(2.5): FSK-Frequenzkanäle nach V.21-Standard
Kanal
Nr.2
sendet.
Da
Soft-Modem-Baugruppe
die
aus-
schließlich für den Server-Betrieb ausgelegt
wurde, lässt sich an dieser Stelle bereits eine Aufgabenverteilung der beiden Kanäle
vornehmen. Aus Sicht der Soft-Modem-Applikation, die sich stets im Answer-Mode befindet,
ist Kanal Nr.1 der Empfangskanal und Kanal Nr.2 der Sendekanal.
Der V.21 Standard lässt eine Frequenz-Abweichung von ±6Hz am Ausgang des FSKModulators zu. Es wird weiterhin eine Frequenzabweichung von ±6Hz angenommen, die
durch den Übertragungsweg entstehen könnte. Der FSK-Demodulator muss demnach
Frequenzabweichungen der charakteristischen Frequenzen von ±12Hz tolerieren.
11
Digitale Modulation und Internet-Protokolle
Der maximale Sendepegel eines Modems sollte –9dBm nicht überschreiten. Im Gegenzug
sollten Frequenzen mit einem minimalen Signalpegel von –43dBm vom Demodulator noch
erkannt werden.
Alle weiteren Definitionen des V.21-Standards beziehen sich auf die Steuerung von ModemSchnittstellensignale zum daten-verarbeitenden Endgerät. Da in diesem Projekt die ModemFunktion nach V.21-Standard per Software in das Endgerät implementiert werden soll,
können sämtliche Hardware-Schnittstellensignale außer Acht gelassen werden.
2.3. Das Point-to-Point-Protokoll (PPP)
Das PPP dient eigentlich nur als Überbegriff für einen sehr komplexen ProtokollMechanismus, der die Datenkommunikation auf seriellen Punkt-zu-Punkt-Verbindungen
ermöglicht. Im folgenden wird deshalb sehr detailliert auf alle Komponenten und deren
Funktions-Mechanismen eingegangen, um der Komplexität des Protokolls und seiner
Hilfsprotokolle gerecht zu werden.
2.3.1 Hauptkomponenten des PPP
a) Data Encapsulation (Datenkapselung)
Die PPP-Datenkapselung ermöglicht die Unterscheidung von Datagrammen unterschiedlicher
Protokolltypen. Die Kapselung erfordert weiterhin eine Rahmenbildung, um die Identifikation
von Anfang und Ende der Kapselung zu gewährleisten.
Das HDLC (High-Level-Data-Link-Control)-Protokoll wurde beim PPP als Basis zum
Übermitteln der Datenpakete auf der ISO/OSI-Schicht 2 (Data-Link-Layer) spezifiziert. Das
HDLC-Protokoll ist seit Mitte der siebziger Jahre weltweit standardisiert und wurde im ISOStandard ISO 3309-1979 und ISO 3309:1984/PDAD1 veröffentlicht.
Die PPP-Datenkapselung ermöglicht das Multiplexen von verschiedenen Network-LayerProtokollen simultan über die selbe Verbindung.
b) Link-Control-Protocol (LCP)
Hierbei handelt es sich um ein Verbindungskontroll-Protokoll, das zum Aufbau, zur
Konfiguration und zum Testen der Datenverbindung dient. Mit Hilfe des LCP werden beim
Aufbau einer Verbindung zwischen zwei Rechnern automatisch die Formatoptionen der
Datenkapselung geklärt, die unterschiedlichen Größenbeschränkungen der Empfangspuffer
12
Digitale Modulation und Internet-Protokolle
beider an der Kommunikation beteiligten Teilnehmer aufeinander abgestimmt, looped-backVerbindungen und allgemein auftretende Konfigurationsfehler erkannt. LCP ist weiterhin
zuständig für die Trennung der Verbindung. Optional kann das LCP ermitteln, ob eine
Verbindung einwandfrei funktioniert oder scheitert.
c) Familie von Network-Control-Protokollen (NCPs)
PPP-Verbindungen tendieren dazu viele Probleme der gegenwärtigen Familie an NetzwerkProtokollen zu verschärfen. Z.B. Die Zuweisung und Verwaltung von IP-Adressen, was sogar
in LAN-Umgebungen ein Problem darstellt, ist besonders schwierig über Punkt-zu-PunktVerbindungen.
Diese Probleme werden von einer Familie von Network-Control-Protokollen (NCPs)
behoben. Jedes NCP ist unmittelbar mit einem Protokoll der Netzwerk-Schicht verbunden.
Das jeweilige NCP stellt Mechanismen zur Verfügung, durch die die Punkt-zu-PunktVerbindung für das zugehörige Netzwerk-Protokoll konfiguriert werden kann. Für das
Internet-Protokoll findet hierfür das Internet-Protocol-Control-Protocol (s. Abschnitt 2.5)
seine Anwendung.
2.3.2. Rahmenbildung auf Basis des HDLC-Protokolls
2.3.2.1. Rahmenformat
Abbildung (2.6) zeigt eine Zusammenfassung der standardmäßigen PPP-Rahmen-Struktur.
Die einzelnen Felder werden von links nach recht gesendet. Die Erläuterungen zur HDLCmäßigen Rahmenbildung beschränken sich auf die Betrachtung von asynchronen
Datenverbindungen.
Flag
0111 1110
Protocol
8/16 Bit
FCS
16/32 Bit
Address
1111 1111
Information
*
Flag
0111 1110
Control
0000 0011
Padding
*
Inter-Frame Fill
or next Address
Abb. (2.6): Standard PPP-Rahmen-Struktur auf HDLC-Basis
Die Abbildung beinhaltet weder Start/Stopp-Bits (im Falle von asynchronen Verbindungen),
noch irgendwelche zur Transparenz zusätzlich eingefügte Oktette. Auf asynchronen
Verbindungen werden die Oktette jeweils mit einem Start- und einem Stopp-Bit gesendet.
13
Digitale Modulation und Internet-Protokolle
Alle Binärwerte, die im Folgenden aufgeführt werden lesen sich von links nach rechts,
beginnend mit dem Most-Significant-Bit (MSB) und endend mit dem Least-Significant-Bit
(LSB).
Flag-Sequenz
Jeder Rahmen beginnt und endet mit einer Flag-Sequenz, die der binären Sequenz 01111110
(hexadezimal 0x7E) entspricht. Zwischen zwei Rahmen wird nur eine einzige Flag-Sequenz
benötigt. Zwei aufeinander folgende Flag-Sequenzen werden als ein leerer Rahmen gedeutet
und nicht weiter von der Implementierung verarbeitet, d.h. es wird kein FCS-(Frame-CheckSequence)-Fehler (s. Abschnitt 2.3.2.5) registriert.
Address
Das Address-Feld hat die Länge von einem Byte und beinhaltet den binären Wert 11111111
(hexadezimal 0xFF). Das Address-Feld entspricht der All-Stations Adresse, da PPP keine
individuellen Stationsadressen zuweist. Die All-Stations Adresse sollte immer erkannt und
empfangen werden. Datenrahmen mit ungültiger Adresse werden nicht weiter bearbeitet.
Control
Das Control-Feld hat die Länge von einem Byte und beinhaltet den binären Wert 00000011
(hexadezimal 0x03). Hierbei handelt es sich um das Unnumbered-Information-Kommando
bei dem das Poll/Final (P/F) Bit auf NULL gesetzt ist. Rahmen mit ungültigem Control-Feld
werden nicht weiter bearbeitet.
Protocol
Das Protocol-Feld umfasst ein oder zwei Byte und sein Wert identifiziert das Datagramm,
welches im Informationsfeld des Datenpakets gekapselt vorliegt. Das höherwertige Byte des
Protokoll-Feldes wird zuerst gesendet.
Die Struktur des Protocol-Feldes entspricht dem ISO 3309 Erweiterungsmechanismus für
Adressfelder. Alle Protokollwerte müssen ungerade sein, das bedeutet, dass das
niederwertigste Bit des niederwertigen Bytes eine „1“ sein muss. Gleichzeitig soll das
niederwertigste Bit des höherwertigen Bytes einer „0“ entsprechen. Wird ein Rahmen
empfangen, der nicht diesen Regeln entspricht, gilt das Protokoll als unerkannt.
14
Digitale Modulation und Internet-Protokolle
Die aktuellen Protokollwerte finden sich im „Assigned Numbers“-RFC [RFC1700]. Die
Werte sind in Abschnitte eingeteilt.
„0***“ bis „3***“
Netzwerkprotokolle (z.B. IP)
„4***“ bis „7***“
Protokolle, die wenig Datenaufkommen verursachen und
kein eigenes NCP besitzen
„8***“ bis „b***“
mit den Netzwerkprotokollen verbundene NCPs
„c***“ bis „f***“
Werte für Datenpakete der LCPs
Wichtige Protokollwerte für dieses Projekt:
c021
Link-Control-Protocol (LCP)
8021
Internet-Protocol-Control-Protocol (IPCP)
0021
Internet-Protocol (IP)
Information
Das Information-Feld umfasst eine beliebige Anzahl von Bytes größer oder gleich NULL. Die
maximale Anzahl der beinhalteten Bytes, einschließlich des Paddings, wird als MaximumReceive-Unit (MRU) bezeichnet und ist standardmäßig auf den Wert 1500 festgelegt.
Padding
Bei der Übertragung kann das Informationsfeld mit einer beliebigen Anzahl an
informationslosen Bytes, bis zum Erreichen der MRU, aufgefüllt werden. Es obliegt dann
weiterhin in der Verantwortung der einzelnen Protokolle die wirkliche Information vom
Padding zu unterscheiden.
Frame-Check-Sequence (FCS)
Das 16 oder 32 Bit lange Frame-Check-Sequence-Feld ermöglicht eine Fehlerkontrolle des
übermittelten Datenrahmens. Eine Tabellengestützte Berechnungsmethode hierfür wird im
Rahmen dieser Arbeit im Abschnitt 2.3.2.5 vorgestellt und wurde auch in dieser Form in die
Lösung implementiert.
Der oben beschriebene Basis-Rahmen kann durch Konfigurationen im Rahmen des LCP noch
ein paar Modifikationen erfahren. Die modifizierten Rahmen lassen sich jedoch klar von den
Standard-Rahmen unterscheiden. Im Detail wird hierauf im Abschnitt 2.4.3 eingegangen, bei
der Beschreibung der einzelnen Konfigurations-Optionen des LCP.
15
Digitale Modulation und Internet-Protokolle
2.3.2.2. Transparenz
HDLC verwendet, um dem Datenstrom Transparenz zu verleihen und ASCII-KontrollZeichen, die nicht als solche erkannt werden sollen, zu Maskieren, einen sog. Octet-StuffingProcess. Hierfür findet das Control-Escape-Byte Anwendung. Das Control-Escape-Byte
entspricht dem binären Wert 01111101 (hexadezimal 0x7d).
Nach der FCS Berechnung, analysiert die Implementierung auf dem sendenden Rechner den
kompletten Datenrahmen zwischen zwei Flag-Sequenzen.
Alle Flag-Sequenzen, Control-Escape-Bytes und sämtliche weiteren Bytes, deren Wert kleiner
als hexadezimal 0x20 entspricht, werden dabei durch eine zwei Byte lange Sequenz ersetzt
(nach [RFC1662] erfolgt dies nur, wenn das Byte zusätzlich noch in der ACCM des
sendenden Rechners aufgeführt ist). Diese Sequenz besteht aus dem Control-Escape-Byte,
gefolgt von dem ursprünglichen Byte, welches mit dem hexadezimal-Wert 0x20 exklusivODER verknüpft wurde. Ein paar Beispiele sollen dieses Prinzip anschaulich verdeutlichen.
Die Implementierung findet vor dem Senden zwischen zwei Flag-Sequenzen, sprich innerhalb
eines Datenrahmens die Bytes
0x7E (Flag-Sequenz),
0x7D (Control-Escape-Byte) und
0x01.
Diese Bytes werden nun mit dem Wert 0x20 exklusiv-ODER verknüpft und es wird ihnen ein
Control-Escape-Byte vorangestellt. Übertragen werden dann also:
0x7D 0x5E
0x7D 0x5D
0x7D 0x21
Durch die Berücksichtigung aller Bytes, deren Wert kleiner als hexadezimal 0x20 ist, können
alle
ASCII-Kontroll-Zeichen
(exklusive
DEL)
transparent
durch
alle
bekannten
Datenkommunikationsgeräte übermittelt werden.
Die Implementierung des empfangenden Rechners, beschreitet den oben beschriebenen Weg
rückwärts. Vor der FCS Berechnung werden die Daten zwischen zwei Flag Sequenzen
analysiert. Jedes Byte, dessen Wert kleiner als hexadezimal 0x20 ist, wird überprüft. Wenn
16
Digitale Modulation und Internet-Protokolle
das Byte in der Async-Control-Character-Map (ACCM, siehe Abschnitt 2.4.3) des
empfangenden Rechners aufgeführt ist, wird es einfach entfernt [RFC1662], da das Zeichen in
diesem Fall als ASCII-Kontroll-Zeichen gilt. Weiterhin werden sämtliche Control-EscapeBytes aus dem Datenstrom entfernt, wobei das jeweils folgende Byte mit 0x20 exklusivODER verknüpft wird.
2.3.2.3. Ungültige Rahmen
Rahmen, die als ungültig erkannt wurden, sollten nicht weiter von der Implementierung
bearbeitet werden und sollten keinen FCS-Fehler verursachen. Hierzu zählen Rahmen, deren
Länge weniger als vier Byte, bei Verwendung einer standardmäßigen 16Bit-FCS, umfasst.
Rahmen, bei denen auf ein Control-Escape-Byte unmittelbar eine abschließende FlagSequenz folgt.
2.3.2.4. Inter-frame Fill
Wie bereits weiter oben beschrieben, kann eine Flag-Sequenz das Ende eines Datenrahmens
und gleichzeitig den Anfang eines neuen Datenrahmens kennzeichnen. Es ist also nicht
zwingend notwendig eine weitere Flag-Sequenz zum Einleiten eines neuen Datenrahmens zu
senden. Es wird aber häufig der Fall auftreten, dass zwei Datenrahmen nicht direkt
aufeinander folgend gesendet werden und demnach eine zeitliche Pause auftritt. Innerhalb
dieser Pause muss der Sendepegel kontinuierlich auf HIGH-Level gehalten werden. Der
Empfänger befindet sich dabei in einem Zustand, der einen neuen Datenrahmen empfangen
kann. Da es innerhalb dieser Pause zu Verbindungsbedingten Störungen kommen kann, ist es
jedoch trotzdem ratsam eine weitere Flag Sequenz dem neuen Datenrahmen voran zu stellen,
da ansonsten mit großer Sicherheit ein FCS-Fehler auftreten kann.
Es wird demnach empfohlen immer eine weitere Start-Flag-Sequenz zu senden, wenn bereits
eine gewisse Zeit seit der letzten Flag-Sequenz vergangen ist. Als Richtlinie dient hierfür der
Wert von einer Sekunde.
2.3.2.5. FCS (Frame-Check-Sequence) Berechnung – 16Bit mit Tabellenunterstützung
Um überhaupt Daten über eine PPP-Verbindung versenden zu können, die vom Gegenüber
auch als korrekt anerkannt werden, muss die Implementierung einen FCS-BerechnungsMechanismus unterstützen. Die FCS-Berechnung erfolgt über Address-, Control-, Protocol-,
Information- und Padding-Feld des Datenrahmens. Bei vereinbarter Address- und ControlFeld-Kompression und Protocol-Feld-Kompression (siehe Abschnitt 2.4.3) wird die FCS17
Digitale Modulation und Internet-Protokolle
Berechnung über den komprimierten Datenrahmen und nicht über den Unkomprimierten
ausgeführt.
Ursprünglich wurde die FCS-Berechnung für eine hardwaremäßige Implementierung
entworfen. Während des Versendens wird die FCS berechnet und anschließend im
Einerkomplement an den Datenstrom angehangen, um daraufhin den Datenstrom mit einer
Flag-Sequenz zu beenden.
Da die empfangende Implementierung keine Möglichkeit hat festzustellen, wann sie mit der
FCS-Berechnung enden kann bevor nicht eine abschließende Flag-Sequenz auftritt, wurde die
FCS-Berechnung so konzipiert, dass sich beim Durchlaufen der Sender-FCS-Sequenz durch
die FCS-Berechnung im Empfänger ein bestimmter Wert ergibt. Anhand diesem Wert wird
entschieden, ob der empfangene Datenrahmen als gültig anerkannt wird.
[RFC1662] und [RFC1171] bieten eine softwaremäßige Lösung zur Berechnung und
Behandlung der
FCS.
Hierzu
findet
ein
Tabellengestützter Software-Algorithmus
Verwendung. Der folgende C-Code generiert die benötigten Tabellenwerte.
#define P 0x8408
static unsigned int fcstab[256];
void TableGenerator(void) {
unsigned int b, v;
int i;
for (b = 0;b<256;b++ ) {
v = b;
for (i = 0; i<8;i++ )
v = v & 1 ? (v >> 1) ^ P : v >> 1;
fcstab[b] = v;
}
}
Der Code füllt bei seiner Abarbeitung den Datenvektor fcstab mit 256 Werten. Auf der
nächsten Seite sind die berechneten Werte aufgelistet.
18
Digitale Modulation und Internet-Protokolle
fcstab[256] = {
0x0000, 0x1189,
0x8c48, 0x9dc1,
0x1081, 0x0108,
0x9cc9, 0x8d40,
0x2102, 0x308b,
0xad4a, 0xbcc3,
0x3183, 0x200a,
0xbdcb, 0xac42,
0x4204, 0x538d,
0xce4c, 0xdfc5,
0x5285, 0x430c,
0xdecd, 0xcf44,
0x6306, 0x728f,
0xef4e, 0xfec7,
0x7387, 0x620e,
0xffcf, 0xee46,
0x8408, 0x9581,
0x0840, 0x19c9,
0x9489, 0x8500,
0x18c1, 0x0948,
0xa50a, 0xb483,
0x2942, 0x38cb,
0xb58b, 0xa402,
0x39c3, 0x284a,
0xc60c, 0xd785,
0x4a44, 0x5bcd,
0xd68d, 0xc704,
0x5ac5, 0x4b4c,
0xe70e, 0xf687,
0x6b46, 0x7acf,
0xf78f, 0xe606,
0x7bc7, 0x6a4e,
};
0x2312,
0xaf5a,
0x3393,
0xbfdb,
0x0210,
0x8e58,
0x1291,
0x9ed9,
0x6116,
0xed5e,
0x7197,
0xfddf,
0x4014,
0xcc5c,
0x5095,
0xdcdd,
0xa71a,
0x2b52,
0xb79b,
0x3bd3,
0x8618,
0x0a50,
0x9699,
0x1ad1,
0xe51e,
0x6956,
0xf59f,
0x79d7,
0xc41c,
0x4854,
0xd49d,
0x58d5,
0x329b,
0xbed3,
0x221a,
0xae52,
0x1399,
0x9fd1,
0x0318,
0x8f50,
0x709f,
0xfcd7,
0x601e,
0xec56,
0x519d,
0xddd5,
0x411c,
0xcd54,
0xb693,
0x3adb,
0xa612,
0x2a5a,
0x9791,
0x1bd9,
0x8710,
0x0b58,
0xf497,
0x78df,
0xe416,
0x685e,
0xd595,
0x59dd,
0xc514,
0x495c,
0x4624,
0xca6c,
0x56a5,
0xdaed,
0x6726,
0xeb6e,
0x77a7,
0xfbef,
0x0420,
0x8868,
0x14a1,
0x98e9,
0x2522,
0xa96a,
0x35a3,
0xb9eb,
0xc22c,
0x4e64,
0xd2ad,
0x5ee5,
0xe32e,
0x6f66,
0xf3af,
0x7fe7,
0x8028,
0x0c60,
0x90a9,
0x1ce1,
0xa12a,
0x2d62,
0xb1ab,
0x3de3,
0x57ad,
0xdbe5,
0x472c,
0xcb64,
0x76af,
0xfae7,
0x662e,
0xea66,
0x15a9,
0x99e1,
0x0528,
0x8960,
0x34ab,
0xb8e3,
0x242a,
0xa862,
0xd3a5,
0x5fed,
0xc324,
0x4f6c,
0xf2a7,
0x7eef,
0xe226,
0x6e6e,
0x91a1,
0x1de9,
0x8120,
0x0d68,
0xb0a3,
0x3ceb,
0xa022,
0x2c6a,
0x6536,
0xe97e,
0x75b7,
0xf9ff,
0x4434,
0xc87c,
0x54b5,
0xd8fd,
0x2732,
0xab7a,
0x37b3,
0xbbfb,
0x0630,
0x8a78,
0x16b1,
0x9af9,
0xe13e,
0x6d76,
0xf1bf,
0x7df7,
0xc03c,
0x4c74,
0xd0bd,
0x5cf5,
0xa33a,
0x2f72,
0xb3bb,
0x3ff3,
0x8238,
0x0e70,
0x92b9,
0x1ef1,
0x74bf,
0xf8f7,
0x643e,
0xe876,
0x55bd,
0xd9f5,
0x453c,
0xc974,
0x36bb,
0xbaf3,
0x263a,
0xaa72,
0x17b9,
0x9bf1,
0x0738,
0x8b70,
0xf0b7,
0x7cff,
0xe036,
0x6c7e,
0xd1b5,
0x5dfd,
0xc134,
0x4d7c,
0xb2b3,
0x3efb,
0xa232,
0x2e7a,
0x93b1,
0x1ff9,
0x8330,
0x0f78
Die folgende Funktion berechnet auf Grundlage eines Datensatzes, der Länge des Datensatzes
und einer Initialisierungs-FCS einen FCS-Wert für den gegebenen Datensatz.
#include
<assert.h>
///////////////////////////////////////////////////////////////
// Calculate a new fcs given the current fcs and the new data.
// arguments: fcs, initialization FCS
//
cp, pointer to the serial data stream
//
len, length of the data buffer in bytes
// returns:
unsigned int fcs
unsigned int pppfcs16(unsigned int fcs,char* cp,int len) {
assert(sizeof (fcs) == 2);
assert(((fcs) -1) > 0);
while (len--)
fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
return (fcs);
}
19
Digitale Modulation und Internet-Protokolle
Das folgende Anwendungsbeispiel soll die praktische Verwendung der Funktion pppfcs16
veranschaulichen.
#define PPPINITFCS16 0xffff // Initial FCS value
#define PPPGOODFCS16 0xf0b8 // Good final FCS value
unsigned char* pFrame
unsigned int
FrameLen
// pointer to the data-stream
// length of the data-stream
Testfcs16() {
unsigned int trialfcs;
// add FCS on output
trialfcs = pppfcs16(PPPINITFCS16,pFrame,FrameLen);
trialfcs ^= 0xffff;
// complement
pFrame[FrameLen] = (trialfcs & 0x00ff);
// least significant byte first
pFrame[FrameLen+1] = ((trialfcs >> 8) & 0x00ff);
// check FCS on input
trialfcs = pppfcs16(PPPINITFCS16,pFrame,FrameLen+2);
// if(trialfcs==PPPGOODFCS16) Æ FCS is correct
}
Die berechnete FCS wird im Einerkomplement, mit dem niederwertigen Byte zuerst, an den
Datenstrom angehängt.
2.3.3. PPP Verbindungs-Optionen
2.3.3.1. Überblick
Um eine Datenübertragung über einer Punkt-zu-Punkt-Verbindung zu ermöglichen, muss
jedes
Ende
der
PPP-Verbindung
zuerst
LCP-Pakete
senden,
um
die
Datenübertragungsverbindung zu konfigurieren und zu testen. Nach dem Aufbau der
Verbindung kann optional ein Authentifizierungs-Mechanismus gestartet werden.
Anschließend muss PPP NCP-Pakete senden, um ein oder mehrere Network-Layer-Protokolle
auszuwählen und die Verbindung entsprechend zu konfigurieren. Sobald jedes der
ausgewählten Network-Layer-Protokolle konfiguriert wurde, können Datagramme der
jeweiligen Network-Layer-Protokolle über die Verbindung gesendet werden.
Die Verbindung bleibt solange für die Datenübertragung konfiguriert, bis durch LCP- oder
NCP-Pakete die Verbindung explizit getrennt wird oder bis ein externes Ereignis auftritt, dass
eine Trennung der Verbindung veranlasst
20
Digitale Modulation und Internet-Protokolle
2.3.3.2. Das PPP-Phasen-Diagramm
Während der Prozesse der Konfiguration, der Aufrechterhaltung und der Trennung der Punktzu-Punkt-Verbindung, durchläuft die PPP-Verbindung klar voneinander getrennte Phasen.
Diese Phasen und deren Zusammenhänge sind in dem folgenden vereinfachten
Zustandsgraphen dargestellt.
UP
Dead
OPENED
Establish
Authenticate
FAIL
SUCCESS/
NONE
FAIL
CLOSING
DOWN
Terminate
Network
Abb. (2.7): PPP-Phasen-Diagramm
In der Abbildung (2.7) sind nicht alle Zustands-Übergänge spezifiziert. Die ergänzenden
Erläuterungen zu den einzelnen Phasen sind für die Implementierung bindend.
a) Dead-Phase (die physikalische Schicht ist nicht bereit)
Die Verbindung startet und endet in dieser Phase. Sobald ein externes Ereignis auftritt und
anzeigt, dass die physikalische Schicht einsatzbereit ist, geht das PPP-Protokoll in die
Establish-Phase über. Während der Dead-Phase befindet sich der LCP-Automat (siehe
Abschnitt 2.6) im Initial oder Starting-Zustand. Der Übergang von dieser Phase in die
Establish-Phase signalisiert dem LCP-Automat ein sog. Up-Ereignis.
Die in Kapitel 4 vorgestellte Implementierungs-Lösung definiert keine explizite Dead-Phase,
sondern befindet sich als Server-Anwendung stets in der Establish-Phase, um auf eingehende
LCP-Datenpakete zu warten, sobald die physikalische Verbindung hergestellt wurde.
b) Establish-Phase
Das LCP übernimmt die Aufgabe des Aufbaus der Verbindung durch den Austausch von
Konfigurations-Datenpaketen. Sobald beiderseits ein Configure-Ack (s. Abschnitt 2.4.2)
21
Digitale Modulation und Internet-Protokolle
gesendet und empfangen wurde, ist der Konfigurations-Mechanismus beendet und das LCP
befindet sich im Opened-Zustand.
Es wird angenommen, dass alle Konfigurations-Optionen mit Standardwerten belegt sind, es
sei denn, dass eine Änderung während der Konfigurations-Phase vereinbart wurde.
In dieser Phase werden von LCP nur Konfigurations-Optionen verhandelt, die unabhängig
von spezifischen Network-Layer-Protokollen sind. Die Konfiguration von einzelnen NetworkLayer-Protokollen wird erst später innerhalb der Network-Layer-Phase von separaten NCPs
ausgeführt.
Alle Datenpakete, bei denen es sich nicht um ein LCP-Paket handelt, werden in dieser Phase
nicht weiter verarbeitet.
Das Empfangen eines LCP-Configure-Request innerhalb der Authentication- oder NetworkLayer-Phase verursacht eine Rückkehr des PPP in die Establish-Phase.
c) Authentication-Phase
Auf manchen Verbindungen wird von einem Rechner verlangt, dass er seine Identität bestätigt
und sich beim Kommunikationspartner anmeldet, bevor ihm erlaubt wird Network-LayerProtokoll-Daten über die Verbindung auszutauschen.
Standardmäßig
ist
diese
Authentifizierungs-Phase
nicht
erforderlich.
Wenn
eine
Implementierung es wünscht, dass sich ein Verbindungs-Partner mit einem bestimmten
Authentifizierungs-Protokoll anmeldet, muss die Verwendung dieses AuthentifizierungsProtokolls bereits in der Establish-Phase ausgehandelt und vereinbart werden.
Die Authentifizierung sollte so schnell wie möglich nach dem Aufbau der Verbindung
stattfinden. Obwohl innerhalb dieser Phase auch Link-Quality-Monitoring-Datenpakete
ausgetauscht werden können, darf durch das Link-Quality-Monitoring keine zeitlich
unbestimmte Verzögerung des Anmeldevorgangs verursacht werden.
Der Übergang von Authentication-Phase zur Network-Layer-Phase darf erst nach
erfolgreicher Anmeldung erfolgen. Sollte die Anmeldung fehlschlagen geht das PPP des
Rechners, der die Authentifizierung verlangt hat, über in die Termination-Phase.
In der Authentication-Phase ist nur der Austausch von Link-Controll-Protokoll-,
Authentifizierungs-Protokoll-, und Link-Quality-Monitoring-Datenpaketen erlaubt. Alle
anderen Datenpakete werden nicht weiter verarbeitet.
Das Scheitern der Anmeldung sollte auf der Seite der anmeldenden Implementierung nicht
aufgrund einer einfachen Zeitüberschreitung erfolgen. Es sollte vielmehr ein Mechanismus
unterstützt werden, der es ermöglicht Datenpakete des Authentifizierungs-Protokolls erneut
22
Digitale Modulation und Internet-Protokolle
zu senden und erst nach einigen gescheiterten Versuchen den Übergang in die TerminationPhase veranlasst.
Auf die Implementierung der Authentication-Phase wurde in diesem Projekt verzichtet, da im
Normalfall der Authentifizierungs-Wunsch von der passiven, angewählten ServerImplementierung gestellt wird.
d) Network-Layer-Phase
Sobald PPP die vorangegangenen Phasen durchlaufen hat, muss jedes Network-LayerProtokoll (z.B. IP, IPX oder AppleTalk) durch sein zugehöriges NCP einzeln konfiguriert
werden. Jedes NCP kann zu jedem beliebigen Zeitpunkt in die Zustände Opened oder Closed
gebracht werden. Nachdem ein NCP den Opened-Zustand erreicht hat überträgt PPP die
zugehörigen Network-Layer-Protokoll-Daten. Alle Datenpakete, die zu einem NetworkLayer-Protokoll gehören, dessen NCP sich nicht im Opened-Zustand befindet, dürfen nicht
weiter von der Implementierung verarbeitet werden. Dies gilt aber nur für Protokolle, die von
der Implementierung unterstützt werden. Datenpakete nicht-unterstützter Protokolle führen zu
einem Protocol-Reject (siehe Abschnitt 2.4).
Während der Network-Layer-Phase kann jede mögliche Kombination aus LCP, NCP und
Network-Layer-Protokoll Datenpaketen über die Verbindung ausgetauscht werden.
e) Termination-Phase
PPP ist zu jeder Zeit in der Lage eine bestehende Verbindung zu trennen. Ursachen für eine
Trennung sind:
- Verlust eines Hardware-Schnittstellensignals
- Fehlschlagen der Anmeldeprozedur
- Fehlschlagen der Verbindungs-Qualitäts-Prüfung
- Ablauf eines Leerlauf-Timers
- oder ein administratorischer Eingriff zur Verbindungs-Trennung
Das LCP wird zum Trennen der Verbindung eingesetzt, indem Terminate-Datenpakete
übermittelt werden. PPP informiert die einzelnen NCPs über die stattfindende Trennung, auf
dass diese entsprechend reagieren können.
Nach dem Übermitteln von Terminate-Paketen sollte die Implementierung der physikalischen
Schicht ein Signal geben, welches das physikalische Medium zur Trennung der Verbindung
veranlasst. Dies gilt im besonderen Fall bei einem Fehlschlagen der Anmelde-Prozedur.
23
Digitale Modulation und Internet-Protokolle
Die Implementierung, welche einen Terminate-Request gesendet hat, sollte die Trennung
vollziehen, nachdem sie ein Terminte-Ack empfangen hat oder der Restart-Timer abgelaufen
ist. Der Empfänger eines Terminate-Request sollte warten bis die sendende Implementierung
die Trennung vollzogen hat und darf die Verbindung nicht trennen, solange nicht mindestens
ein Restart-Timer Durchlauf stattgefunden hat. PPP sollte anschließend in die Dead-Phase
übergehen.
In der Terminate-Phase werden nur LCP-Datenpakete verarbeitet.
Das Trennen der Verbindung durch LCP ist vollkommen ausreichend. Es besteht kein Bedarf,
dass jedes NCP einen eigenen Terminate-Prozess durchläuft. Auf der anderen Seite besteht
kein ausreichender Grund eine PPP-Verbindung zu trennen sobald ein NCP in den ClosedZustand übergeht, auch wenn es sich hierbei um das einzig verwendete NCP handelt.
Da die Implementierung in diesem Projekt ohne Restart-Timer auskommt, wurde auch die
Terminate-Phase nicht vollständig implementiert. Das PPP hat keine Möglichkeit die PPPVerbindung aktiv zu beenden. Durch den Empfang eines Terminate-Request in der Establishoder Network-Phase kommt es zum Versenden eines Terminate-Ack und anschließend wird
die Verbindung als getrennt angesehen und damit das Trennen der physikalischen
Modemverbindung veranlasst.
2.4. Das Link-Control-Protokoll (LCP)
Das
Link-Control-Protokoll ermöglicht optional das dynamische Aushandeln von
Konfigurations-Optionen zwischen den PPP-Peers.
Die LCP-Informationen werden in Form von PPP-Datenrahmen verschickt. Dabei signalisiert
das Protocol-Feld mit dem Wert 0xc021 hexadezimal, dass es sich im Datenteil um LCPInformationen handelt. Pro Datenrahmen kann nur eine LCP-Information verschickt werden.
Für das LCP-Protokoll wurden drei Paketgruppen definiert.
a) Link-Configure-Pakete
Werden zum Aufbau und zur Konfiguration einer Verbindung eingesetzt (Configure-Request,
Configure-Ack, Configure-Nak und Configure-Reject).
24
Digitale Modulation und Internet-Protokolle
b) Link-Termination-Pakete
Link-Termination-Pakete signalisieren den geregelten Abbau der Verbindung zwischen zwei
PPP-Peers (Termination-Request, Termination-Ack).
c) Link-Maintenance-Pakete
Um die Verbindung ordnungsgemäß aufrecht halten zu können , werden zwischen den PPPPeers Link-Maintenance-Pakete verschickt (Code-Reject, Protocol-Reject, Echo-Request,
Echo-Reply und Discard-Request)
2.4.1. LCP-Datenformat
Abbildung (2.8) zeigt eine Zusammenfassung des Datenformats der LCP-Pakete.
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 15 ...
Code
Identifier
... 7 6 5 4 3 2 1 0
Length
Options
Abb. (2.8): LCP-Datenformat
Code
Das ein Byte lange Code-Feld definiert die Art der LCP-Information. Folgende Werte sind
hierfür festgelegt:
1
Configure-Request
2
Configure-Ack
3
Configure-Nak
4
Configure-Reject
5
Terminate-Request
6
Terminate-Ack
7
Code-Reject
8
Protocol-Reject
9
Echo-Request
10
Echo-Reply
11
Discard-Request
25
Digitale Modulation und Internet-Protokolle
Identifier
Das ein Byte lange Identifier-Feld ermöglicht die Zuordnung von Anfragen (Requests) zu
Antworten (Replies).
Length
Das zwei Byte lange Length-Feld legt die gesamte Länge des LCP-Paketes inklusive des
Code-, Identifier-, Length- und Options-Feldes fest.
Options
Das Options-Feld enthält die eigentlichen LCP-Konfigurations-Optionen. Das Format des
Options-Feldes wird durch das Code-Feld bestimmt.
2.4.2. LCP-Datenpakete
a) Configure-Request
Zum Öffnen einer Verbindung muss eine Implementierung Configure-Requests senden. Im
Options-Feld werden alle möglichen Konfigurations-Optionen (s. Abschnitt 2.4.3) aufgeführt,
die Änderungen an den Standard-Einstellungen einer Verbindung beabsichtigen. D.h. es
werden nur Konfigurations-Optionen übermittelt, deren Parameter von den Standard-Werten
abweichen.
Der Empfang eines Configure-Request führt zum Versenden einer entsprechenden Antwort.
Das Identifier-Feld muss jedes Mal verändert werden, wenn sich der Inhalt des OptionsFeldes ändert oder eine gültige Antwort auf einen vorangegangenen Request empfangen
wurde. Bei einem wiederholtem Senden des gleichen Configure-Request kann das IdentifierFeld unverändert bleiben.
b) Configure-Ack
Wenn alle Konfigurations-Optionen in einem empfangenen Configure-Request erkannt und
deren Parameter akzeptiert werden können muss die Implementierung ein Configure-Ack
versenden. Das Options-Feld enthält dabei die unveränderten Konfigurations-Optionen des zu
bestätigenden Configure-Request. Gleiches gilt für das Identifier-Feld.
Beim Empfang eines Configure-Ack ist ausschlaggebend, ob der Inhalt des Options-Feldes
mit den Konfigurations-Optionen des zuletzt versendeten Configure-Request übereinstimmen.
Ist dies nicht der Fall, wird das Configure-Ack nicht weiterverarbeitet und gilt als nicht
26
Digitale Modulation und Internet-Protokolle
empfangen. Gleiches gilt, wenn keine Übereinstimmung des Identifier-Feld mit dem des
zuletzt versendeten Configure-Request besteht.
c) Configure-Nak
Wenn alle Konfigurations-Optionen in einem empfangenen Configure-Request erkannt, aber
einige Parameter nicht akzeptiert werden können, muss die Implementierung einen ConfigureNak senden. Das Options-Feld enthält dabei alle Konfigurations-Optionen des ConfigureRequest, die nicht akzeptiert werden können. Die Parameter der Konfigurations-Optionen sind
jedoch so verändert, dass sie den Konfigurierungs-Wünschen der Configure-Nak sendenden
Implementierung entsprechen. In einem Configure-Nak können die Konfigurations-Optionen
auch Standardwerte annehmen, insofern die Konfigurations-Optionen des abzulehnenden
Configure-Request von diesen abgewichen sind.
Für Konfigurations-Optionen, die keine speziellen Parameter besitzen (z.B. ProtokollCompression, Address-and-Control-Field-Compression (siehe Abschnitt 2.4.3) muss anstelle
eines Configure-Nak ein Configure-Reject versendet werden.
Kann die sendende Implementierung für eine Option mehrere unterschiedliche ParameterWerte akzeptieren, so muss der Configure-Nak eine Liste mit sämtlichen akzeptablen Werten
enthalten. Die Liste enthält auch die Werte, die unter Umständen bereits von einem früheren
Configure-Request des Peers vorgeschlagen und für gut befunden wurden.
Beim Empfang eines Configure-Nak muss darauf geachtet werden, ob das Identifier-Feld mit
dem des zuletzt versendeten Configure-Request übereinstimmt. Ist dies nicht der Fall, wird
das Configure-Nak nicht weiter verarbeitet und gilt als nicht empfangen.
Das Configure-Nak gibt der empfangenden Implementierung Vorschläge zur Gestaltung eines
neuen Configure-Request. Entweder erfolgt eine Anpassung der Parameter-Werte an die
Spezifikationen im empfangenen Configure-Nak, oder einzelne Konfigurations-Optionen
entfallen einfach im nächsten Configure-Request. Enthält das Configure-Nak eine Liste mit
mehreren Instanzen einer Konfigurations-Option (sprich, oben angesprochene Liste mit
mehreren unterschiedlichen Parameter-Werten), so sollte die empfangende Implementierung
einen einzelnen Wert daraus auswählen und in ihren nächsten Configure-Request mit
einbinden.
d) Configure-Reject
Wenn einige Konfigurations-Optionen in einem empfangenen Configure-Request nicht
erkannt oder für die Konfiguration nicht akzeptiert werden konnten, muss die
27
Digitale Modulation und Internet-Protokolle
Implementierung einen Configure-Reject senden. Das Options-Feld enthält dabei sämtliche
unerkannten und inakzeptablen Konfigurations-Optionen. Alle erkannten und akzeptierbaren
Optionen werden herausgefiltert und nicht mit dem Configure-Reject gesendet. Der
Configure-Reject
entspricht
demnach
einem
konkreten
Ablehnen
von
einzelnen
Konfigurations-Optionen. Der Empfänger eines Configure-Reject sollte in seinen folgenden
Configure-Requests keine Konfigurations-Optionen einbinden, die bereits in einem
Configure-Reject vom Peer abgelehnt wurden.
Das Identifier-Feld muss beim Empfänger mit dem des zuletzt versendeten Configure-Request
übereinstimmen, ansonsten wird der Configure-Reject nicht weiter verarbeitet und gilt als
nicht empfangen.
e) Terminate-Request und Terminate-Ack
Zur Trennung einer Verbindung verwendet das LCP die Terminate-Request und TerminateAck Codes. Eine Implementierung, welche die Verbindung trennen möchte, sollte TerminateRequests versenden. Das Versenden eines Terminate-Request wird so oft wiederholt bis ein
entsprechendes Terminate-Ack empfangen wurde, die physikalische Schicht anzeigt, dass sie
nicht mehr funktionstüchtig ist oder eine genügend große Anzahl an Terminate-Requests
versendet wurde, sodass mit großer Wahrscheinlichkeit sichergestellt ist, dass der Peer nicht
mehr zur Verfügung steht und von seiner Seite aus die Verbindung als getrennt betrachtet
wird.
Der Empfang eines Terminate-Request verpflichtet zum Versenden eines Terminate-Ack.
Wird ein Terminate-Ack ohne vorangegangenes Versenden eines Terminate-Request
empfangen, bedeutet das, dass sich der Peer im Closed- oder Stopped-Zustand befindet oder
eine Situation eingetreten ist, die nach einer neuen Konfiguration der Verbindung verlangt.
Das Identifier-Feld muss jedes Mal geändert werden, wenn sich der Inhalt des Options-Feldes
ändert. Bei einem wiederholten Senden des gleichen Terminate-Request kann das IdentifierFeld unverändert bleiben.
f) Code-Reject
Der Empfang eines LCP-Paketes mit einem unbekannten Wert im Code-Feld deutet darauf
hin, dass die beiden kommunizierenden Implementierungen verschiedene ProtokollVersionen verwenden oder Implementierungsfehler vorliegen. Dieser Fehler muss dem
Sender des unbekannten Code-Feld-Wertes durch übermitteln eines Code-Reject mitgeteilt
28
Digitale Modulation und Internet-Protokolle
werden. Das Options-Feld enthält das zurückgewiesene LCP-Paket, exklusive des ProtocolFeldes und sämtlicher PPP- Header und Trailer.
Der Empfang eines Code-Rejects veranlasst das LCP zum unmittelbaren Übergang in den
Closed-Zustand. Es sollte ein Fehler-Report erfolgen, da es sehr unwahrscheinlich ist, dass
sich die Fehler-Situation automatisch korrigieren lässt.
Das Identifier-Feld muss bei jedem neuen Code-Reject geändert werden.
g) Protocol-Reject
Der Empfang eines PPP-Pakets, welches im Protocol-Feld einen unbekannten Protokollwert
enthält deutet darauf hin, dass der Peer versucht ein von der Implementierung nicht
unterstütztes Protokoll zu verwenden. Üblicherweise tritt diese Situation ein, wenn der Peer
versucht ein neues Protokoll zu konfigurieren. Nur wenn sich das LCP im Opened-Zustand
befindet wird daraufhin ein Protocol-Reject gesendet. Andernfalls wird das PPP-Paket mit
dem nicht unterstützten Protokoll nicht weiter verarbeitet und ignoriert.
Das Options-Feld eines Protocol-Reject enthält das komplette empfangene Datenpaket
beginnend mit dem zurückgewiesenen Protokoll-Wert.
Der Empfang eines Protocol-Reject muss dazu führen, dass die Implementierung zum
nächstmöglichen Zeitpunkt das Senden von Datenpakten des unzulässigen Protokolls
unterbindet.
Das Identifier-Feld muss bei jedem neuen Protocol-Reject geändert werden.
h) Echo-Request und Echo-Reply
Mit den Echo-Request und Echo-Reply Codes unterstützt LCP einen Data-Link-LayerLoopback-Mechanismus zur Verwendung in beide Richtungen der Verbindung. Dieser
Mechanismus bietet Hilfe beim Debuggen, Feststellen der Verbindungsqualität, Leistungstest
und bei vielen anderen Funktionen. Echo-Request und Echo-Reply dürfen nur gesendet
werden, wenn sich LCP im Opened-Zustand befindet. In allen anderen Zuständen werden
Echo-Request und Echo-Reply nicht weiter verarbeitet.
Der Empfang eines Echo-Request muss zum Senden eines Echo-Reply führen.
Das Identifier-Feld wird jedes Mal geändert, wenn sich der Inhalt des Options-Feldes ändert
oder ein gültiges Echo-Reply einem Echo-Request folgte. Für ein erneutes Senden des
gleichen Echo-Request kann das Identifier-Feld unverändert bleiben. Das Identifier-Feld eines
Echo-Reply stellt die Kopie des Identifier-Feldes des zu beantwortenden Echo-Requests dar.
Dem Options-Feld wird, die später erwähnte, Magic Number (s. Abschnitt 2.4.3)
29
Digitale Modulation und Internet-Protokolle
vorangestellt. Die Daten im Options-Feld können beliebig sein und bleiben uninterpretiert.
Sollte die Magic Number Konfigurations-Option nicht verhandelt worden sein, muss die
Magic Number den Wert 0 annehmen.
Echo-Request und Echo-Reply wurden in diesem Projekt nicht implementiert.
i) Discard-Request
Der Discard-Request wird nur in eine Richtung der Verbindung gesendet. Der Empfang eines
Discard-Request führt zu keiner weiteren Reaktion der empfangenden Implementierung.
Discard-Requests dürfen nur im Opened-Zustand des LCP versendet werden. Auch hier wird
dem Options-Feld (welches beliebige Daten enthalten darf) die Magic Number vorangestellt.
Auch beim Discard-Request wird der Wert der Magic Number als 0 übertragen, wenn diese
Konfigurations-Option nicht ausgehandelt wurde.
Das Identifier-Feld nimmt mit jedem gesendeten Discard-Request einen neuen Wert an.
Discard-Request Datenpakete wurden in diesem Projekt nicht implementiert.
2.4.3. LCP-Konfigurations-Optionen
Eine Zusammenfassung des Formats der LCP-Konfigurations-Optionen zeigt Abbildung
(2.9).
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Code
Length
Data ...
Abb. (2.9): LCP-Konfigurations-Optionen-Datenformat
Code
Das ein Byte lange Code-Feld definiert die Art der LCP-Konfiguration. Folgende Werte
wurden hierfür festgelegt:
1
Maximum-Receive-Unit
2
Async-Control-Character-Map (ACCM)
3
Authentication-Protocol
4
Quality-Protocol
5
Magic Number
6
Link-Quality-Monitoring
7
Protocol-Field-Compression
8
Address-and-Control-Field-Compression
30
Digitale Modulation und Internet-Protokolle
Length
Das ein Byte lange Length-Feld legt die gesamt Länge der LCP-Konfigurations-Option
inklusive Code-, Length- und Data-Feld fest.
Data
Das Data-Feld enthält die Parameter der jeweiligen LCP-Konfigurations-Option.
Tabelle (2.3) zeigt eine Zusammenfassung der unterschiedlichen Datenformate der einzelnen
LCP-Konfigurations-Optionen. Eine ausführliche Erklärung der Konfigurations-Optionen des
Data-Feldes findet sich im Anschluss.
Name
Maximum-Receive-Unit
Async-Control-Character-Map
Authentication-Protocol
Quality-Protocol
Magic Number
Link-Quality-Monitoring
Protocol-Field-Compression
Address-and-Control-Field-Comp.
Code
1
2
3
4
5
6
7
8
Length/Byte
4
6
>=4
>=4
6
6
2
2
Data-Length/Byte
2
4
>=2
>=2
4
4
0
0
Default-Wert
1500
0xffffffff
0
-
Tab. (2.3): Datenformat-Längen der LCP-Konfigurations-Optionen
a) Maximum-Receive-Unit
Diese Konfigurations-Option bietet die Möglichkeit die maximale Paketgröße auszuhandeln,
die eine Implementierung empfangen kann. Als Standard sollte jeder der PPP-Peers in der
Lage sein 1500 Bytes an Information empfangen zu können. Diese 1500 Bytes beziehen sich
auf das Information-Feld des PPP-Datenrahmens, exklusive sämtlicher Header, Trailer und
Bytes, die zur Transparenz eingefügt wurden. Ein Implementierung kann also entweder ihrem
Gegenüber mitteilen, dass sie größere Pakete empfangen kann, oder darum bitten, dass ihr
kleinere Pakete geschickt werden.
Das Maximum-Receive-Unit-Feld umfasst zwei (2) Byte und enthält den zu verhandelnden
neuen Wert der Maximum-Receive-Unit. In diesem Projekt ist die MRU der Soft-ModemApplikation
aufgrund
Ressourcenknappheit
auf
256Byte
beschränkt.
Sollte
die
Implementierung des Peers nicht auf die Bitte, keine größeren Datenpakete zu senden,
eingehen, werden diese Pakete schlicht von der Soft-Modem-Applikation ignoriert.
31
Digitale Modulation und Internet-Protokolle
b) Async-Control-Character-Map (ACCM)
Wie bereits weiter oben beschrieben ersetzt PPP beim Senden alle ASCII-Kontroll-Zeichen
(exklusive DEL) mit einer zwei Byte langen Sequenz. Es ist jedoch selten, dass wirklich alle
Kontroll-Zeichen diesem Mechanismus unterzogen werden müssen. Oft liegt sogar der Fall
vor, dass sämtliche Kontroll-Zeichen im Klartext über die Verbindung gesendet werden
können. Mit dieser Konfigurations-Option kann eine Implementierung mitteilen, welche
Kontroll-Zeichen weiterhin ersetzt werden müssen und welche nicht. Das ACCM-Feld
umfasst vier (4) Byte und liegt im big-endian-Format vor. Jedes Bit entspricht einem
Kontroll-Zeichen in der ASCII-Tabelle. Jedes gesetzte Bit zeigt an, dass das entsprechende
Kontroll-Zeichen weiterhin durch eine zwei-Byte-Sequenz ersetzt werden muss. Die Folgende
Tabelle zeigt eine Übersicht der ACCM-Bits und ihrer Entsprechung als ASCII-KontrollZeichen.
31
30
29
28
27
26
25
24
23
US
RS
GS
FS
Esc
SUB EM
CAN ETB SYN NAK DC4 DC3 DC2 DC1 DLE
15
14
13
12
11
10
9
8
SI
SO
CR
FF
VT
LF
TAB BS
7
22
6
21
5
20
4
19
3
18
2
17
1
16
0
BEL ACK ENQ EOT ETX STX SOH NUL
Tab. (2.4): ACCM-Bits mit ASCII-Kontroll-Zeichen
Als Standardwert gilt für das ACCM-Feld hexadezimal 0xffffffff.
Würde z.B. eine Implementierung verlangen, dass nur das ASCII-Kontroll-Zeichen DC3 beim
Senden ersetzt werden soll, wäre im ACCM-Feld nur das Bit19 gesetzt (0x00080000).
c) Authentication-Protocol
Das Authentication-Protocol-Feld hat die Länge von zwei (2) Byte und enthält den Wert eines
zur Anmeldung gewünschten Authentifizierungs-Protokolls. Standardmäßig ist keine
Anmeldung erforderlich, wird dies jedoch von einer Implementierung gewünscht, erweitert
sich das PPP-Phasen-Diagramm, wie oben beschrieben, um die optionale Authenticate-Phase.
Eine Implementierung hat auch die Möglichkeit ihrem Peer mehrere Anmelde-Protokolle
innerhalb eines Configure-Request zur Auswahl anzubieten. Der Peer darf dann mit Hilfe von
Configure-Reject und Configure-Ack höchstens eines dieser Protokolle auswählen.
d) Quality-Protocol
Standardmäßig nicht implementiert. An dieser Stelle folgt nur der Verweis auf [RFC1661].
32
Digitale Modulation und Internet-Protokolle
e) Magic Number
Diese Option wird standardmäßig nicht verwendet. Mit dieser Konfigurations-Option ist es
möglich looped-back-Verbindungen zu erkennen. Die Magic Number wird teilweise von
anderen Konfigurations-Optionen, wie dem Link-Quality-Monitoring benötigt. Das Magic
Number-Feld hat eine Länge von vier (4) Byte dessen Wert möglichst einzigartig und Peerspezifisch sein sollte. Teilt eine Implementierung ihre Magic Number ihrem Peer mit, so ist
diese Magic Number für Aktionen, die auf die Magic Number zurückgreifen, verpflichtend.
Für eine ausführliche Beschreibung der Magic Number Konfigurations-Option sei an dieser
Stelle auf [RFC1172] verwiesen.
f) Link-Quality-Monitoring
Standardmäßig nicht implementiert. An dieser Stelle folgt nur der Verweis auf [RFC1172].
g) Protocol-Field-Compression
Diese Konfigurations-Option ermöglicht einer Implementierung ihrem Peer mitzuteilen, dass
sie komprimierte Protocol-Felder empfangen kann. Der standardmäßige PPP-Rahmen
beinhaltet ein zwei Byte langes Protocol-Feld. Viele Protokoll-Werte sind jedoch so
festgelegt, dass deren Wert nicht 256 überschreitet und damit ein Byte zu ihrer
Kennzeichnung ausreicht. Die oben beschriebenen Konventionen für die Protokoll-Werte
nach ISO (s. Abschnitt 2.3.2.1) ermöglichen eine Komprimierung des Protocol-Feldes auf ein
Byte, so dass der Protokoll-Wert immer noch eindeutig vom Empfänger erkannt werden kann.
Eine Implementierung, die den Komprimierungs-Mechanismus unterstützt sollte jedoch
weiterhin in der Lage sein unkomprimierte Protocol-Felder richtig zu erkennen. Beim
Versenden von LCP-Paketen darf keine Protocol-Field-Compression verwendet werden.
Die in diesem Projekt vorgestellte Implementierung erlaubt das Komprimieren des ProtocolFeldes, sendet aber stets ein zwei Byte langes Protocol-Feld.
h) Address-and-Control-Field-Compression
Diese Konfigurations-Option ermöglicht die Komprimierung der Address- und ControlFelder. Standardmäßig versendet jede Implementierung Address- und Control-Felder. Da
dieser Felder konstante Werte enthalten gestaltet sich eine Komprimierung relativ
unkompliziert. Address- und Control-Feld werden beim Senden einfach vernachlässigt, wenn
die empfangende Implementierung mitgeteilt hat, dass sie die Address-and-Control-Field-
33
Digitale Modulation und Internet-Protokolle
Compression unterstützt. Beim Versenden von LCP-Paketen darf keine Address-and-ControlField-Compression verwendet werden.
Ähnlich wie im Fall der Protocol-Field-Compression erlaubt die Implementierung dieses
Projekts die Komprimierung von Address- und Control-Feld beim Empfang, sendet jedoch
stets Datenrahmen mit Address- und Control-Feld.
2.5. Das Internet-Protocol-Control-Protokoll (IPCP)
Das IPCP ist verantwortlich für die Konfiguration, Aktivierung und Deaktivierung der IPModule auf beiden Seiten der PPP-Verbindung. IPCP verwendet den gleichen Mechanismus
zum Austausch von Datenpaketen wie das LCP. IPCP-Datenpakte sollten von den
Implementierungen erst übermittelt werden, wenn PPP die Network- Phase erreicht hat. Alle
IPCP-Pakete, die vor dieser Phase empfangen werden, erfahren keine weitere Verarbeitung
durch die Implementierung und gelten als nicht empfangen.
Die maximale Länge der IP-Datagramme, welche über eine PPP-Verbindung übertragen
werden, entspricht der Länge des Information-Feldes. Größere IP-Datagramme müssen
dementsprechend zerlegt werden. [RFC879] und [RFC1191] beschreiben Methoden, die das
Zerlegen und Wiederzusammensetzen von IP-Datagrammen umgehen. Dies soll jedoch nicht
Gegenstand dieser Arbeit werden.
2.5.1. Das IPCP-Datenformat
IPCP ist aufgebaut wie das LCP, mit den folgenden Ausnahmen.
Protocol-Feld
Wie beim LCP werden die IPCP-Informationen in Form von PPP-Datenrahmen verschickt,
wobei pro Datenrahmen nur ein IPCP-Pakettyp verschickt werden kann. Der Unterschied zum
LCP besteht darin, dass das Protocol-Feld den Wert hexadezimal 0x8021 hat und damit
signalisiert, dass es sich im Datenteil um IPCP-Informationen handelt.
Code
Für IPCP werden nur die Pakettypen 1 bis 7 (Configure-Request, Configure-Ack, ConfigureNak, Configure-Reject, Terminate-Request, Terminate-Ack, Code-Reject) verwendet. Alle
34
Digitale Modulation und Internet-Protokolle
anderen Werte für das Code-Feld sollten nicht erkannt werden und einen Code-Reject (siehe
Abschnitt 2.4.2) zur Folge haben.
IPCP-Konfigurations-Optionen
Folgende Werte wurden hierfür festgelegt:
1
IP-Addresses
2
Compression-Type
3
IP-Address
2.5.2. Die IPCP-Konfigurations-Optionen
a) IP-Addresses
Wird als Option für frühere PPP-Versionen unterstützt und hat bei neueren Versionen keine
Bedeutung mehr. Eine Beschreibung dieser Option befindet sich in [RFC1172].
b) Compression-Type
Diese Konfigurations-Option ermöglicht die Verwendung eines speziellen KomprimierungsProtokolls für TCP/IP-Datagramme. Eine Komprimierung ist standardmäßig nicht aktiviert
und findet in dieser Arbeit auch keine weitere Berücksichtigung. Als Beispiel soll an dieser
Stelle das “Van Jacobson Compressed TCP/IP“-Protokoll erwähnt werden, das Methoden zur
TCP/IP-Header-Komprimierung bietet und in [RFC1144] spezifiziert ist.
c) IP-Address
Diese Konfigurations-Option ermöglicht das aushandeln und zuweisen von IP-Adressen.
Damit wird dem Sender eines Configure-Request erlaubt, seinem Peer mitzuteilen, welche IPAdresse für die Implementierung gewünscht wird, oder darum zu bitten, vom Peer eine
dynamische IP-Adresse zugewiesen zu bekommen. Die Zuweisung einer dynamischen IPAdresse erfolgt durch ein Configure-Nak mit der Übermittlung einer gültigen IP-Adresse.
Dieser Mechanismus sollte am Beispiel des Protokoll-Mitschnitts in Abschnitt 2.7 klar
werden.
Das Datenformat entspricht dem Konfigurations-Optionen-Datenformat des LCP aus
Abschnitt 2.4.3 wobei das Data-Feld vier Byte lang ist und die gewünschte IP-Adresse der
Configure-Request sendenden Implementierung enthält. Das Nullsetzen aller vier Bytes im
Data-Feld signalisiert die Bitte der Zuweisung einer dynamischen IP-Adresse.
35
Digitale Modulation und Internet-Protokolle
2.6. Der Option-Negotiation-Automat
[RFC1661] beschreibt einen geschlossenen Zustands-Automaten, der den AushandlungsMechanismus der Konfigurations-Optionen sowohl für LCP, als auch für die NCPs behandelt.
Der Automat wird definiert durch Ereignisse, Aktionen und Zustandsübergänge. In den
Ereignissen spiegeln sich externe Kommandos (Open oder Close), Ablaufen des RestartTimers und der Empfang von Datenpaketen wider. Die Aktionen veranlassen den Neustart des
Restart-Timers und das Versenden von Datenpaketen zum Peer.
Die Zusammenhänge von Zustandsübergängen, Ereignissen und Aktionen werden im
Folgenden dargestellt. Zunächst erfolgt jedoch eine Beschreibung des soeben erwähnten,
jedoch nicht in der Lösung implementierten Restart-Timers.
2.6.1. Der Restart-Timer und seine Counter
Der Zustands-Automat verwendet genau einen speziellen Timer. Der Restart-Timer wird dazu
verwendet die Übertragung von Configure-Requests und Terminate-Requests zu regeln. Der
Ablauf
des
Restart-Timers
verursacht
ein
Timeout-Ereignis
und
veranlasst
die
Implementierung zum erneuten Senden des zugehörigen Configure-Request oder TerminateRequest. Der Restart-Timer muss frei konfigurierbar sein, sollte aber standardmäßig auf drei
(3) Sekunden festgelegt werden.
In Zusammenhang mit dem Restart-Timer stehen drei Restart-Counter.
a) Max-Terminate
Dieser Restart-Counter zeigt die Anzahl von Terminate-Requests an, die gesendet werden
ohne ein entsprechendes Terminate-Ack zu empfangen, vor der Annahme, dass der Peer nicht
in der Lage ist zu antworten. Standardmäßig ist der Wert auf zwei (2) Übertragungen
festgelegt.
b) Max-Configure
Hierbei handelt es sich um den Restart-Counter für das wiederholte Versenden von
Configure-Requests. Max-Configure entspricht der Anzahl an Configure-Requests, die
gesendet werden ohne ein entsprechendes Configure-Ack, Configure-Nak oder ConfigureReject zu empfangen, bevor angenommen wird, dass der Peer nicht in der Lage ist zu
antworten. Standardmäßig ist dieser Counter auf zehn (10) Übertragungen eingestellt.
36
Digitale Modulation und Internet-Protokolle
c) Max-Failure
Dieser Counter behandelt die Anzahl der Configure-Naks, die empfangen werden dürfen bis
angenommen wird, dass die entsprechende Konfigurations-Option nicht erfolgreich
ausgehandelt werden kann, d.h. kein entsprechendes Configure-Ack zustande kommt. MaxFailure ist standardmäßig auf fünf (5) Übertragungen festgelegt. Sobald dieser Counter
ausgelaufen ist müssen alle Configure-Nak-Pakete in Configure-Reject-Pakete umgewandelt
werden.
.
37
Digitale Modulation und Internet-Protokolle
2.6.2. Zustandübergangs-Tabelle
Die Beschreibung des Zustands-Automaten erfolgt in einer Zustandübergangs-Tabelle. Die Zustände sind
horizontal, die Ereignisse vertikal aufgelistet. Zustandsübergänge und Aktionen sind in der Form
„Aktion/Neuer Zustand“ angegeben. Mehrere Aktionen werden durch ein Komma voneinander getrennt.
Für das Ausführen von mehreren Aktionen besteht bei der Implementierung keine festgeschriebene
Reihenfolge. Der vertikale Strich (-) steht für einen unzulässigen Übergang.
Ereignisse
Up
Down
Open
Close
Zustände
0
Initial
2
tls/1
0
1
Starting
irc,scr/6
1
tlf/0
2
Closed
0
irc,scr/6
2
3
Stopped
tls/1
3r
2
4
Closing
0
5r
4
5
Stopping
1
5r
4
6
ReqReq-Sent
1
6
irc,str/4
7
AckAck-Rcvd
1
7
irc,str/4
8
AckAck-Sent
1
8
irc,str/4
9
Opened
tld/1
9r
tld,irc,str/4
TO+
TOTO-
-
-
-
-
Str/4
Tlf/2
Str/5
Tlf/3
scr/6
tlf/3p
scr/6
tlf/3p
scr/8
tlf/3p
-
RCR+
RCRRCRRCA
RCN
-
-
sta/2
sta/2
sta/2
sta/2
irc,scr,sca/8
irc,scr,scn/6
sta/3
sta/3
4
4
4
4
5
5
5
5
sca/8
scn/6
irc/7
irc,scr/6
sca,tlu/9
scn/7
scr/6x
scr/6x
sca/8
scn/6
irc,tlu/9
irc,scr/8
tld,src,sca/8
tld,src,scn/6
tld,scr/6x
tld,scr/6x
RTR
RTA
-
-
sta/2
2
sta/3
3
sta/4
tlf/2
sta/5
tlf/3
sta/6
6
sta/6
6
sta/6
8
tld,zrc,sta/5
tld,scr/6
RUC
RXJ+
RXJRXJ-
-
-
scj/2
2
tlf/2
scj/3
3
tlf/3
scj/4
4
tlf/2
scj/5
5
tlf/3
scj/6
6
tlf/3
scj/7
7
tlf/3
scj/8
8
tlf/3
scj/9
9
tld,irc,str/5
RXR
-
-
2
3
4
5
6
7
8
ser/9
Tabelle (2.5): Zustandübergangs-Tabelle des Option-Negotiation-Automaten
[p] ... Passiv Option
[r] ... Restart-Option
[x] ... Crossed Connection
39
Aktionen:
tlu = This-Layer-Up
tld = This-Layer-Down
tls = This-Layer-Started
tlf = This-Layer-Finished
irc = Initialize-Restart-Count
zrc = Zero-Restart-Count
scr = Send-Configure-Request
sca = Send-Configure-Ack
scn = Send-Configure-Nak/Rej
str = Send-Terminate-Request
sta = Send-Terminate-Ack
scj = Send-Code-Reject
ser = Send-Echo-Reply
Ereignisse:
Up = lower layer is Up
Down = lower layer is Down
Open = administrative Open
Close= administrative Close
TO+ = Timeout with counter > 0
TO- = Timeout with counter expired
RCR+ = Receive-Configure-Request (Good)
RCR- = Receive-Configure-Request (Bad)
RCA = Receive-Configure-Ack
RCN = Receive-Configure-Nak/Rej
RTR = Receive-Terminate-Request
RTA = Receive-Terminate-Ack
RUC = Receive-Unknown-Code
RXJ+ = Receive-Code-Reject (permitted)
or Receive-Protocol-Reject
RXJ- = Receive-Code-Reject
or Receive-Protocol-Reject (catastrophic)
RXR = Receive-Echo-Request
or Receive-Echo-Reply
or Receive-Discard-Request
Digitale Modulation und Internet-Protokolle
Eine detaillierte allgemeine Beschreibung der einzelnen Zustände, Ereignisse und Aktionen
findet sich in [RFC1661] und wird an dieser Stelle nicht weiter ausgeführt. Zum
grundlegenden Verständnis erfolgt jedoch eine kurzer Umriss des prinzipiellen Mechanismus
des Automaten
2.6.3. Zustände, Ereignisse und Aktionen
Der Option-Negotiation-Automat gilt sowohl für LCP, als auch für das Network-ControlProtokoll IPCP. Der Initial-Zustand ist dabei jeweils Ausgangspunkt für die Aushandlung der
Konfigurations-Optionen. Stark vereinfacht kann man sich vorstellen, dass LCP die
Zustandübergangs-Tabelle vom Initial- bis zum Opened-Zustand durchläuft und danach dem
IPCP mit Hilfe eines Up-Ereignisses signalisiert, dass nun der Aushandlungs-Mechanismus
des IPCP gestartet werden kann. IPCP durchläuft anschließend gleichermaßen die
Zustandübergangs-Tabelle vom Initial- zum Opened-Zustand. Hat IPCP den Opened-Zustand
eingenommen, kann wiederum durch ein Up-Ereignis dem Internet-Protokoll signalisiert
werden, dass die Verbindung konfiguriert ist, um IP-Datagramme zu übermitteln. Zum
Trennen der Verbindung wird die Zustandübergangs-Tabelle entgegengesetzt durchlaufen, bis
sich der Automat wieder im Initial-Zustand befindet.
Die Ereignisse Up und Down, sowie die Aktionen This-Layer-Up, This-Layer-Down, ThisLayer-Started, This-Layer-Finished dienen somit der Kommunikation zwischen den einzelnen
Protokoll-Schichten. Die Aktion This-Layer-Up verursacht ein Up-Ereignis, wodurch der
höheren Protokoll-Schicht angezeigt wird, dass die darunterliegende Schicht aktiviert wurde
und ihre Dienste zur Verfügung stellen kann. Umgekehrt löst die Aktion This-Layer-Down ein
Down-Ereignis aus, welches den höheren Schichten anzeigt, dass keine Dienste mehr von der
unteren Schicht zur Verfügung gestellt werden können. Die Aktionen This-Layer-Started und
This-Layer-Finished signalisieren den unteren Schichten, dass deren Dienste von den höheren
Schichten gebraucht bzw. nicht mehr gebraucht werden.
Bei den Ereignissen Open und Close handelt es sich um administrative Eingriffe, die von
Außen (z.B. durch eine User-Anforderung: Verbindung aufbauen bzw. trennen) auf die
Implementierung einwirken.
Timeout-Ereignisse werden durch den Restart-Timer und dessen Counter ausgelöst. Hierbei
erfolgt die Unterscheidung, ob es nur zum Ablaufen des Restart-Timers kam, oder ob
zusätzlich einer der Counter (Max-Terminate, Max-Configure, Max-Failure) abgelaufen ist.
40
Digitale Modulation und Internet-Protokolle
Die restlichen Ereignisse (RCR, RCA, RCN, RTR, RTA usw.) können als Konsequenz
empfangener Datenpakte angesehen werden. Der Automat reagiert auf das jeweilige Ereignis
mit der entsprechenden Aktion und einem Zustandsübergang.
Die beschriebenen Zusammenhänge sollen an einem kurzen Beispiel verdeutlicht werden.
Abbildung (2.10) beschreibt einen möglichen Ablauf des Aushandlungs-Mechanismus
zwischen zwei Protokoll-Schichten unter Berücksichtigung der jeweiligen inneren Zustände
der Implementierungen. Zum Ende nehmen beide den Opened-Zustand ein.
MSP430F149
Embedded
Soft-Modem
Ereignis-Prozessor
Initial
Open
Aktionen
Starting
Up
scr
Req-Sent
RCR+
scr
RCA
Req-Sent
RCR+
Ack-Rcvd
RCN
scr
Ack-Sent
Stopped
scn
sca
Ack-Sent
RCR-
RCA
sca
Opened
Opened
Zustandsspeicher
Abb.(2.10): Beispiel für Ablauf des Aushandlungs-Mechanismus
41
Digitale Modulation und Internet-Protokolle
2.7. PPP-Protokoll-Mitschnitt
Um der relativ trockenen Theorie, der bereits behandelten Abschnitte, mehr Anschaulichkeit
zu verleihen, erfolgt nun die Auswertung eines erfolgreichen PPP-Verbindungs-Aufbaus. Der
Protokoll-Mitschnitt wurde mit der Windows-Freeware PORTMON erstellt. Mit Hilfe von
PORTMON können alle Aktivitäten der seriellen Schnittstelle protokolliert werden. Zum
Kenntlichmachen der Sende-Richtung werden die beiden Kommunikationspartner mit A und
B bezeichnet.
Auswertung des Protokoll-Mitschnitts
Teilnehmer A hat per Modem-Einwahl eine physikalische Verbindung zu Teilnehmer B
hergestellt und beginnt mit dem Senden eines LCP-Pakets.
A
B
A
B
A
B
A
7E
7D
7D
7D
7D
7D
34
FF
22
25
27
28
2D
F7
7D
7D
7D
7D
7D
7D
7E
23
26
26
22
22
23
C0 21 7D 21 7D 21 7D 20 7D 37
7D 20 7D 2A 7D 20 7D 20
7D 20 7D 3B 7D 3B 36
7E
7D
7D
7D
7D
7D
7D
9C
FF
21
22
27
28
31
33
7D
7D
7D
7D
7D
7D
7D
7D
27
23
24
26
22
22
24
29
7E
C0 21 7D 21 7D 21 7D 20 23
7D 25 F4
7D 20 7D 2A 7D 20 7D 20
7E
7D
7D
AA
7E
7D
FB
7E
7D
7D
7D
7D
7D
7E
7D
7D
7D
7D
88
FF
31
33
66
FF
2D
3E
FF
22
25
27
28
29
FF
21
22
27
28
75
7D
7D
7D
7E
7D
7D
7E
7D
7D
7D
7D
7D
5A
7D
7D
7D
7D
7D
7E
23 C0 21 7D 24 7D 21 7D 20 7D 31
24 7D 25 F4
29 7D 23 7D 20 C0 7B 7D 5E 80 E2
7E
7D
7D
7D
7D
E2
7E
7D
7D
7D
7D
7D
FF
22
25
27
28
33
FF
21
22
27
28
5E
7D
7D
7D
7D
7D
7E
7D
7D
7D
7D
7D
86
23 C0 21 7D 22 7D 23 7D 20 7D 34
26 7D 20 7D 2A 7D 20 7D 20
26 7D 20 7D 3B 7D 3B 36
22
22
7D 26
LCP Configure-Request ID:01 Length: 19
Maximum-Receive-Unit: 1524 Bytes (0x5F4)
Async-Control-Character-Map: 00 0A 00 00
Protocol-Field-Compression
Address-and-Control-Field-Compression
unbekannte Konfig-Option 17
unbekannte Konfig-Option 19
FCS Flag-Sequenz
LCP Configure-Reject ID:01 Length: 17
Die unbekannten Konfig-Optionen (17, 19)
werden abgelehnt.
FCS Flag-Sequenz
LCP Configure-Reject ID:02 Length: 7
Ablehnen der unbekannten Konfig-Option (13)
FCS Flag-Sequenz
LCP Configure-Request ID:03 Length: 20
Async-Control-Character-Map: 00 0A 00 00
MagicNumber: 00 1B 1B 16
Protocol-Field-Compression
Address-and-Control-Field-Compression
FCS Flag-Sequenz
LCP Configure-Request ID:02 Length: 22
Maximum-Receive-Unit: 1524 Bytes
Async-Control-Character-Map: 00 0A 00 00
Protocol-Field-Compression
Address-and-Control-Field-Compression
FCS Flag-Sequenz
7D 25 F4
7D 23 7D 20 C0 7B 7D 5E 80 E2
23 C0 21 7D 24 7D 22 7D 20 7D 27
23 7D 26
23
26
26
22
22
7E
23
24
26
22
22
LCP Configure-Request ID:01 Length:23
Async-Control-Character-Map: 00 0A 00 00
Magic-Number: 00 1B 1B 16
Protocol-Field-Compression
Address-and-Control-Field-Compression
unbekannte Konfig-Option 13
FCS Flag-Sequenz
C0 21 7D 21 7D 23 7D 20 7D 34
7D 20 7D 2A 7D 20 7D 20
7D 20 7D 3B 7D 3B 36
C0 21 7D 21 7D 22 7D 20 7D 36
7D 25 F4
7D 20 7D 2A 7D 20 7D 20
LCP Configure-Ack ID:03 Length: 20
Die Konfig-Optionen des Configure-Request
mit der ID:03 werden vom Peer mit diesem
Configure-Ack angenommen.
FCS Flag-Sequenz
LCP Configure-Ack ID:02 Length: 22
Annehmen der Konfig-Optionen des ConfigureRequest mit der ID:02
23 C0 21 7D 22 7D 22 7D 20 7D 36
24 7D 25 F4
26 7D 20 7D 2A 7D 20 7D 20
22
22
7E
FCS Flag-Sequenz
42
Digitale Modulation und Internet-Protokolle
Die Verbindung wurde von LCP konfiguriert, damit ist die Establish-Phase beendet und PPP
geht in die Network-Phase über. Das IPCP konfiguriert die Einstellungen für das IP, d.h. es
wird eine dynamische IP-Adresse angefordert.
Auffällig ist, das kaum noch Control-Escape-Bytes gesendet und empfangen werden. Der
Grund dafür findet sich in den ausgehandelten ACCMs, bei denen jeweils nur Bit19 (DC3)
und Bit17 (DC1) gesetzt wurden. Hierbei handelt es sich um die ASCII-Kontroll-Zeichen für
das Modem-Xon/Xoff-Flow-Control-Protokoll.
B
A
B
A
A
B
7E
02
03
27
80
06
06
63
21 01 01 00 10
00 2D 0F 01
8D 39 01 0E
7E
IPCP Configure-Request ID:01 Length: 16
Compression-Type: Van Jacobson Comp. TCP/IP
IP-Address: 141.57.1.14
FCS Flag-Sequenz
7E
7D
B0
7E
03
BC
80
31
31
80
06
B0
FD
06
7E
21
00
7E
01 01 00 0A
00 01 01 03
Compression Control Protocol (CCP)
01 01 00 22
00 00 00
IPCP Configure-Request ID:01 Length: 34
IP-Address: Anforderung einer IP vom Peer
FCS Flag-Sequenz
7E 80 21 04 01 00 0A
02 06 00 2D 0F 01
F8 30 7E
IPCP Configure-Reject ID:01 Length: 10
Ablehnen der TCP/IP-Header-Komprimierung
FCS Flag-Sequenz
7E
80
7D
AE
7E
03
9D
FF
FD
31
A0
80
06
5C
03
01
06
7E
21
8D
7E
C0 21 08 04 00 10
01 00 0A
00 01 01 03
LCP Protocol-Reject ID:04 Length: 16
Das Compression Control Protocol wird von
der Implementierung nicht unterstützt und
angelehnt.
IPCP Configure-Request ID:02 Length:10
IP-Address: 141.57.1.14
FCS Flag-Sequenz
7E
03
33
7E
03
F4
7E
03
F4
7E
03
02
80
06
65
80
06
28
80
06
08
80
06
FB
21
8D
7E
21
8D
7E
21
8D
7E
21
8D
7E
03 02 00 16
39 E6 3C
01 02 00 0A
39 01 0E
IPCP Configure-Nak ID:02 Length:22
IP-Address: 141.57.230.60
FCS Flag-Sequenz
IPCP Configure-Ack ID:02 Length:10
Configure-Request mit der ID:02 wird
bestätigt
IPCP Configure-Request ID:03 Length:22
Enthält die im vorangegangenen Configure-Nak
vorgeschlagene IP-Adresse.
IPCP Configure-Ack ID:03 Length:22
Der Configure-Request mit der ID :03 wird
bestätigt. Damit wurde der Implementierung
die IP 141.57.230.60 zugewiesen
02 02 00 0A
39 01 0E
01 03 00 16
39 E6 3C
02 03 00 16
39 E6 3C
Das IPCP befindet sich nun im Opened-Zustand und es können IP-Datagramme über die
Verbindung ausgetauscht werden.
7E 21 45 00 00
8D 39 E6 3C 8D
55 00 3A 29 10
4F 45 50 46 45
………………… 7E
………………………………..
60
39
00
45
02
FF
01
46
AE
FF
00
45
00
00
00
43
00
89
00
45
80
00
00
50
7D
89
00
45
31
00
01
50
37
4C
20
45
30
87
45
4C
IP
Das PPP-Protocol-Feld ist nur noch ein Byte
lang, da in der Establish-Phase die LCPKonfigurations-Option Protocol-Compression
vereinbart wurde.
43
Digitale Modulation und Internet-Protokolle
Teilnehmer A möchte die Verbindung trennen. Ein Close-Ereignis kam hierdurch zustande
und PPP tritt in die Terminate-Phase ein. Die Verbindung wird von LCP durch Versenden
von Terminate-Paketen getrennt.
A
B
7E
5C
7E
91
FF
A4
FF
81
7D 23 C0 21 7D 25 7D 25 7D 20 7D 24
7E
7D 23 C0 21 7D 26 7D 25 7D 20 7D 24
7E
LCP
FCS
LCP
FCS
Terminate Request ID:05 Length: 04
Flags
Terminat-Ack ID:05 Length: 04
Flags
2.8. TCP/IP und HTTP
Die Protokoll-Struktur des Transmission-Control-Protokoll (TCP) und des Internet-Protokoll
(IP), sowie deren Implementierung in Mikrocontroller-Software ist ausführlich in [D&E]
beschrieben und dokumentiert und wird daher in dieser Arbeit nicht noch einmal erläutert.
Gleiches gilt für das HTTP-Protokoll.
Das nächste Kapitel beschäftigt sich mit den Überlegungen zum Hardware-Aufbau einer
Embedded Soft-Modem-Baugruppe und der daraus entstandenen Mikrocontroller-Baugruppe.
44
Soft-Modem-Baugruppe
3. Soft-Modem-Baugruppe
3.1. Vom Hard- zum Softmodem
Beim Entwurf einer Soft-Modem-Baugruppe macht es Sinn zuerst einen Blick auf eine
komplette Hardware-Modem-Baugruppe zu
werfen, um sich über die einzelnen
Funktionseinheiten eines Modems im Klaren zu werden. Abbildung (3.1) zeigt das
Blockschaltbild einer klassischen Modem-Baugruppe, die auf der linken Seite mit dem
öffentlichen Telefonnetz (Personal Switched Telecomunication Network, PSTN) und auf der
rechten Seite mit einem Daten-verarbeitenden Host Processor verbunden ist.
Host Processor
MSP430F149
PSTN
Datenpumpe
DAA
Rx, Tx
Codec
DSP
Mikrocontroller
Kontrollsignale: CID,RING, OH
Abb.(3.1): Blockschaltbild einer klassischen Modem-Baugruppe
Der Host Processor soll dabei der MSP430F149 sein. Typischerweise findet man in der
Modem-Baugruppe einen Hardware-Mikrocontroller, der sich um den reibungslosen
Datentransfer bzw. die Kommunikation mittels AT-Kommandos zwischen Modem und Host
Processor kümmert und eventuell vom Modemstandard geforderte FehlerkorrekturMechanismen und Kompressionsverfahren implementiert. Der Mikrocontroller steuert
weiterhin den Rufzustand der Modem-Baugruppe.
Zentraler Bestandteil der Modem-Baugruppe ist die sog. Datenpumpe, bestehend aus
Digitalem Signalprozessor (DSP) und Codec. Der DSP implementiert die Algorithmen zur
Modulation bzw. Demodulation der binären Information entsprechend des verwendeten
Standards. Der Codec realisiert ausschließlich die analog-digital- bzw. digital-analogWandlung.
Der dritte Bestandteil der Modem-Baugruppe wird als Direct Access Arrangement (DAA)
bezeichnet und stellt die tatsächliche physikalische Schnittstelle zum Übertragungsmedium,
der Telefonleitung, dar. Hierbei handelt es sich um einen Übertrageraufbau, der die
Signalpegel auf der Telefonleitung in einen Signalpegelbereich überträgt, der von der
Mikroelektronik-Seite ausgewertet werden kann. An dieser Stelle gibt es keine andere
45
Soft-Modem-Baugruppe
Möglichkeit, als mit Analogtechnik die spezielle Datenübertragung und Zustandssignalisierung zu realisieren. Mehr dazu im Abschnitt 3.2.
Der Ansatz zum Soft-Modem äußert sich darin, möglichst viele Funktionen der ModemBaugruppe als Embedded-Software in den Host Processor zu implementieren, um damit
Hardware-Bausteine zu ersetzen. In diesem Projekt war es möglich, bis auf den DAAÜbertrageraufbau,
sämtliche
Funktionseinheiten
der
Modem-Baugruppe
mit
dem
MSP430F149 zu ersetzen. Die Fachwelt spricht bereits von einem Soft-Modem, wenn nur
DAA und Codec als Hardware-Elemente zu finden sind. Um der Begrifflichkeit treu zu
bleiben, handelt es sich bei der entwickelten Applikation wohl um ein Soft-Modem ohne
Codec. Abbildung (3.2) zeigt das reduzierte Blockschaltbild.
Host Processor
MSP430F149
Kontrollsignale: CID,RING, OH
PSTN
Rx, Tx
Datenpumpe
DAA
Codec
DSP
Mikrocontroller
Embedded Software
Mikrocontroller
Funktionen
DSP
Funktionen
AD/DA
Funktionen
Abb.(3.2): Blockschaltbild der reduzierten Modem-Baugruppe
46
Soft-Modem-Baugruppe
3.2. Direct Access Arrangement (DAA)
[ELECD] und [ATI] geben einen umfassenden Überblick über die verschiedenen
Möglichkeiten eine DAA aufzubauen. Auch hierbei geht der Trend ganz klar in Richtung
Platz sparender, integrierter Schaltkreise. Für dieses Projekt viel die Wahl auf eine Ein-ChipLösung der Firma CLARE mit dem Namen LITELINK III. Durch Einsatz des LITELINK III
Entwicklungs-Boards war es möglich, ohne zusätzlichen Entwicklungsaufwand in der
Einhaltung von Vorschriften für Endgeräte am öffentlichen Telefonnetz, unmittelbar die
Verbindung zur Telefonleitung herzustellen. Die Schaltung des Entwicklungs-Boards
entspricht den Vorgaben des LITELINK III Datenblatts und erfüllt damit die europäischen
Zulassungsvorschriften
nach TBR-21. Abbildung
(3.3) zeigt das Blockschaltbild des LITELINK
III. Klar zu erkennen ist
dabei
die
Isolations-
barriere zwischen Modem
und Leitungsseite. Auf der
rechten Seite findet man
die Anschlusse für TIP
und RING der TelefonAbb.(3.3): LITELINK III CPC5621 Blockschaltbild
Zweidrahtleitung
und
links, jenseits der Isolationsbarriere, die Sende- und Empfangssignalwege (Tx+, Tx-, Rx+, Rx-) für die
Mikroelektronik sowie einige Steuer- und Kontrollsignal-Leitungen (MODE, OH, RING,
CID).
Das LITELINK III Entwicklungs-Board realisiert folgende Funktionen:
•
galvanische NF-Signal-Trennung von Leitungsseite und Modemseite mittels
integrierter Optokoppler
•
DC-Schleifencharakteristik: Elektronische Drossel (Gyrator), Leistungstransistor
CPC5602
•
DC-Leitungsstrombegrenzung (einstellbar durch einen Widerstand)
•
AC-Leitungsimpedanzanpassung (komplexe-Leitungs-Referenzimpedanz nach TBR21)
47
Soft-Modem-Baugruppe
•
Leitungsschalter inklusive galvanisch getrennter Ansteuerung
•
2-Draht/4-Draht Hybrid mit Sprecherecho-Unterdrückung, Einstellung der TIP/RINGAusgangsspannung
•
Ruferkenner, galvanisch entkoppeltes Rechteckausgangssignal für Mikrocontroller
•
Leitungssignalwege im on-hook Zustand für z.B. Caller-ID Erkennung
•
Schleifenstromerkennung durch statischen Spannungspegel an Rx+/Rx-
Der 2-Draht/4-Draht Hybrid-Schaltkreis ermöglicht das Einspeisen und Empfangen von
differentiellen Signalen, d.h. das Sendesignal kann an Pin Tx+ positiv und gleichzeitig an Pin
Tx- negativ eingespeist werden. Diese Vorgehensweise hat eine maximale SprecherechoUnterdrückung zur Folge, das Sendesignal wird im Empfangssignal um mindestens 40dB
gedämpft. Bei differentieller Einspeisung ist laut Datenblatt eine maximale Signalamplitude
von 2,2Vpp zulässig, die dann auf der Telefonleitung einem Signalpegel von 0dBm an 600Ω
entspricht. Ebenso liegt auch das Empfangssignal an Rx+ und Rx- differentiell vor und kann
eine maximale Signalamplitude von 2,2Vpp erreichen.
3.3. Die Mikrocontroller-Baugruppe
Abbildung (3.4) zeigt das komplette Blockschaltbild der Soft-Modem-Baugruppe und
Abbildung (3.5) die MSP430F149 Entwicklungs-Platine. Das LITELINK III EntwicklungsBoard wird über zwei Steckverbinderleisten auf die MSP430F149 Entwicklungs-Platine
aufgesteckt.
7,3728 MHz
JTAG
RING
OH
LITELINK III
Eval-Board
RJ45LAN
MSP430F149
analogue
Signal
Processing
LEDs: Power,
Link, Traffic
32 kHz
3,3 V
Power-Supply
Abb.(3.4): Blockschaltbild der Soft-Modem-Baugruppe
48
Abb.(3.5): MSP430F149 Entwicklungs-Platine
Soft-Modem-Baugruppe
Auf der MSP430F149 Entwicklungs-Platine befinden sich,
•
der MSP430F149 Mikrocontroller mit zwei externen Quarzen (32kHz und
7,3728MHz)
•
der Schaltkreis für die Spannungsversorgung der gesamten Baugruppe mit 3,3V
•
die JTAG-Schnittstelle zum Programmieren des MSP430F149 und Echtzeit-Debuggen
der Mikrocontroller-Software
•
eine standardmäßige RJ11-Steckerbuchse für den Anschluss der Telefonleitung
•
drei LEDs zum Anzeigen des Betriebszustandes der Baugruppe
•
analoge Schaltungen zur Signalaufbereitung der Sende- bzw. Empfangssignale
zwischen MSP430F149 und dem LITELINK III Entwicklungs-Board
Bei dem verwendeten Mikrocontroller handelt es sich um einen Vertreter der MSP430
Familie von Texas Instruments, einer sehr leistungsfähigen
Reihe von 16-Bit-
Mikrocontrollern mit RISC-Architektur, die speziell für eine extrem niedrige Stromaufnahme
entwickelt wurde. In diesem Projekt kommt der Typ MSP430F149 zum Einsatz, welcher über
einen Flash-Programmspeicher von 60Kbyte und einem Arbeitsspeicher von 2Kbyte Größe
verfügt. Abbildung (3.6) zeigt das Block-Diagramm der MSP430x14x Serie, daraus lassen
sich die integrierten Module, die in diesem Projekt zum Einsatz kommen erkennen.
Abb.(3.6): Block-Diagramm der Low-Power-Controllerfamilie MSPx14x
Vier Pins des LITELINK III Entwicklungs-Boards sind entweder direkt oder indirekt mit dem
MSP430F149 verbunden. Direkt verbunden ist der Kontroll-Eingangspin OH mit dem der
Rufzustand der DAA gesteuert werden kann. Bei einem logischen 0 Pegel an OH befindet
49
Soft-Modem-Baugruppe
sich die DAA im sog. off-hook Zustand, der, bildlich beschrieben, einem abgehobenen
Telefonhörer entspricht. Bei einem logischen 1 Pegel an OH befindet sich die DAA im sog.
on-hook Zustand, in dem ein eingehender Ruf auf der Leitung erkannt werden kann, oder
wieder bildlich beschrieben, der Telefonhörer aufgelegt ist.
Weiterhin ist der RING-Ausgangspin des LITELINK III Entwicklungs-Boards direkt mit dem
MSP430F149 verbunden. Das RING-Signal entspricht dem Ausgang des LITELINK III
Ruferkenner-Schalkreises, der bei einem eingehenden Ruf, das von der Vermittlung auf die
Leitung gegebene Rufsignal in ein, für den Mikrocontroller auswertbares Rechtecksignal
umwandelt und am RING-Pin zur Verfügung stellt.
Indirekt mit dem MSP430F149 verbunden sind die Sende- und Empfangssignalwege, die
entgegen der oben beschriebenen Vorgehensweise nicht differentiell, sondern einseitig
betrieben werden. Es hat sich während der Entwicklung gezeigt, dass die SprecherechoUnterdrückung bei einseitiger Betriebsweise dennoch ausreichend für die Realisierung der
Soft-Modem-Applikation ist. Es folgt nun eine getrennte Beschreibung der analogen
Schaltungen, die sich im Sende- bzw. Empfangssignalweg befinden.
Sendesignal
Die im MSP430F149 implementierten Modulator-Algorithmen erzeugen am ModulatorAusgangspin (P1.7) ein Wechselsignal mit einer Signalamplitude von 3,3Vpp. Bei einseitiger
Signaleinspeisung darf aber am Pin Tx+ ein Signal mit nur maximal 1,1Vpp anliegen, was
einem Signalpegel von
  1,1V  2 
 
 
  2⋅ 2  
P = 10 ⋅ log
 = −5,985dBm
Ω
⋅
600
1
mW






Gl. (3.1)
entsprechen würde. Ein Modem darf jedoch, wie
bereits oben erwähnt, nur einen maximalen Pegel
von –9dBm auf die
P1.7
Leitung geben. Das
9.1k
TX+
560
10n
Modulator-Ausgangssignal wird daher über einen
Spannungsteiler mit RC-Tiefpass-Charakteristik
Ufsk
Utx
(s. Abbildung(3.7)) in den Sendepin Tx+ des
LITELINK III Entwicklungs-Boards eingespeist.
50
Abb.(3.7): Spannungsteiler und RC-Tiefpass
Soft-Modem-Baugruppe
Der Spannungsteiler reduziert die Amplitude auf
Utx _ max =
560 Ω
⋅ 3,3Vpp = 0,191Vpp
9,1kΩ
Gl. (3.2)
Dies entspricht einem Sendepegel von –21,2dBm.
Durch die zusätzliche Tiefpass-Charakteristik werden die modulierten Sendefrequenzen von
1650Hz und 1850Hz, sowie störende Oberwellen noch weiter gedämpft. Die Eckfrequenz des
RC-Gliedes ergibt sich zu:
fc =
1
= 1749 Hz
2 ⋅ π ⋅ 9,1kΩ ⋅ 10 nF
Gl. (3.3)
Aus der Frequenzabhängigkeit der Ausgangsspannung Utx des RC-Gliedes lässt sich die
Signalamplitude und die zusätzliche Dämpfung der charakteristischen Signalfrequenzen
berechnen.
Utx ( f ) =
1
1 + j ⋅ 2 ⋅ π ⋅ 9,1kΩ ⋅ 10 nF ⋅ f
Gl. (3.4)
Tabelle (3.1) gibt die berechneten Werte wieder.
f
Utx_max(f)
20⋅log|Utx(f)|
resultierender Pegel
1650Hz
0,139Vpp
-2,8dB
-24,0dBm
1850Hz
0,131Vpp
-3,3dB
-24,5dBm
Tab.(3.1): Signalpegel und maximale Amplituden des Sendesignals
Die relativ geringen Signalpegel des Sendesignals sind vollkommen ausreichend für die
Kommunikation, da davon ausgegangen wird, dass das empfangende Modem Signale mit
Pegeln bis zu –43dBm sicher erkennen kann.
Empfangssignal
Am Empfangspin Rx+ des LITELINK III Entwicklungs-Boards steht ein DC-entkoppeltes
reines Wechselsignal zur Verfügung, dessen Signalamplitude maximal 340mVpp (bei
maximalem Empfangspegel von –9dBm) annehmen kann. Messungen haben ergeben, dass
sich die reale Amplitude des Empfangssignals im Bereich von 200mVpp bewegt. Zusätzlich
ist das Signal von einer Menge Störungen überlagert, die einerseits vom Übertragungskanal
und andererseits vom, ebenfalls sich auf der Leitung befindenden, Sendesignal stammen. Das
Diagramm in Abbildung (3.8) soll so ein typisches 980Hz Empfangssignal veranschaulichen.
51
Soft-Modem-Baugruppe
0.1
U/V
0.05
0
-0.05
-0.1
0
0.5
1
1.5
2
t/s
2.5
3
3.5
4
x 10
-3
Abb.(3.8): LITELINK III Eval-Board Rx+ Ausgangssignal
Bevor das Signal nun auf den Demodulator-Eingangspin des MSP430F149 gegeben wird,
erfolgt eine geringfügige Signalaufbereitung mittels zweier aufeinander folgender OPVSchaltungen, die in Abbildung (3.9) dargestellt sind.
Vcc
Vcc
100n
180k
51k
-
10k
47p
2k
+
51k
+
-
22k
4,7n
100n
Abb.(3.9): OPV-Schaltung zur Signalaufbereitung
Mit Hilfe der ersten OPV-Stufe wird das Empfangssignal um den Faktor 18 verstärkt und mit
einem Gleichspannungs-Offset der halben Betriebsspannung (1,65V) überlagert. Abbildung
(3.10) zeigt das Empfangssignal am Ausgang der ersten OPV-Schaltung.
U/V
3
2
1
0
0
0.5
1
1.5
2
t/s
2.5
3
3.5
4
x 10
-3
Abb.(3.10): Signal am Ausgang der Verstärkerstufe
Durch unsymmetrische Spannungsversorgung der Operations-Verstärker mit 3,3V und 0V als
Betriebsspannung und Überlagerung des Gleichspannungs-Offsets befindet sich das
Empfangssignal jetzt im Bereich zwischen 0 und 3,3V und demnach im Spannungsbereich,
der vom MSP430F149 ausgewertet werden kann.
52
Soft-Modem-Baugruppe
Die zweite OPV-Stufe entspricht einem Chebychef-Tiefpass-Filter 2.Ordnung mit einer Cutoff-Frequenz von 1300Hz und einer Verstärkung von 1. Damit werden störende Frequenzen,
die oberhalb der zu empfangenden charakteristischen Frequenzen im Kanal Nr.1 liegen, aus
dem Signal herausgefiltert. Das Tiefpass-Filter wurde mit der Software „FilterPro“ der Firma
Texas Instruments dimensioniert. Das Programm steht kostenlos auf der Internet-Seite von
Texas Instruments zum Download zur Verfügung und liefert unter Eingabe verschiedener
Filter-Parameter eine fertig dimensionierte OPV-Schaltung mit den vorgegebenen
Eigenschaften. Wie Abbildung (3.11) zeigt, steht dann am Ausgang der OPV-Schaltungen ein
fast reines Sinussignal zur Demodulation mit dem MSP430F149 bereit.
U/V
3
2
1
0
0
0.5
1
1.5
2
t/s
2.5
3
3.5
4
x 10
-3
Abb.(3.11): Signal am Ausgang der TP-Schaltung
Abschließend noch ein paar Worte zu den Kontroll-LEDs auf der MSP430F149
Entwicklungs-Platine. Die blaue LED (D1) liegt direkt an Betriebsspannung und zeigt
demnach an, ob die Baugruppe mit Spannung versorgt ist, oder nicht.
Die gelbe LED (D2) wird per Software gesteuert und signalisiert den Rufzustand der
Baugruppe. Im on-hook Zustand leuchtet die LED nicht. Ein eingehendes und als gültig
erkanntes Rufsignal wird dann durch einmaliges Aufleuchten der LED dem Anwender
visualisiert. Beim Wechsel in den off-hook Zustand, d.h. beim entgegennehmen eines Anrufs
blinkt die LED kurz um anschließend wieder zu erlöschen, bis der Verbindungsaufbau
komplett abgeschlossen ist. Sobald die Soft-Modem-Baugruppe bereit ist, Daten zu
Empfangen und zu Senden, leuchtet die LED permanent.
Die rote LED (D3) visualisiert den Datentransfer in Echtzeit, durch software-gesteuertes Einbzw. Ausschalten der LED entsprechend der im Moment empfangenen bzw. gesendeten
Bitfolge.
Im Folgenden wird nun konkret auf die Mikrocontroller-Software eingegangen, die den obern
beschriebenen Hardware-Aufbau eigentlich erst zur Soft-Modem-Applikation macht.
53
Funktionsblöcke der Software
4. Funktionsblöcke der Software
Abbildung (4.1) zeigt eine Zusammenfassung der Funktionsblöcke der KommunikationsProtokolle, die als Software im MSP430F149 Mikrocontroller implementiert wurden, in
Zusammenhang mit der dazugehörigen Netzwerkschicht, entsprechend des DoD-Standards
der TCP/IP-Protokollstapel-Architektur.
Application
Transport
Internet
Network
send
Header
Header
Header
Data
HTTP
Header
Header
Header
Data
TCP
Header
Header
Header
Data
IP
Header
Header
Header
Data
receive
PPP
FCS
Modulation bzw. Demodulation der V.21 Signale
asynchrones Senden & Empfangen von Bytes
(Start/Stopp-Betrieb)
V.21
Ring-Detektion
Steuerung des Rufzustands
LITELINK DAA
MSP430F149
Abb.(4.1): Protokollschichten und Datenkapselung
Es ist weiterhin zu erkennen, dass nur zwei Funktionsblöcke (Ring-Detektion und V.21) in
direkter Verbindung zu der physikalischen DAA-Schnittstelle stehen.
In den folgenden Abschnitten wird bis ins Detail erklärt, wie die Realisierung der geforderten
Aufgaben in einzelnen Blöcken umgesetzt wurde. Die Betrachtung erfolgt von „unten nach
oben“ bis zur fertigen Applikation.
4.1. Rufsignalerkennung und Steuerung des Rufzustandes
In Abbildung (4.2) ist der Ruferkenner-Schaltkreis des LITELINK III dargestellt. Abbildung
(4.3) zeigt im oberen Diagramm ein typisches Rufsignal
auf der Telefonleitung (typisch für Deutschland
60V@25Hz, bei Nebenstellenanlagen 48V@50Hz), im
unteren Diagramm der Abbildung (4.3) ist das
Ausgangssignal
Abb.(4.2): Ring Signal Detection Circuit
(RING)
des
LITELINK
III
Vollwellenruferkenners abgebildet. Es handelt sich
hierbei um einen Vollwellenruferkenner, der für jede
Halbwelle der Rufton-Wechselspannung einen Impuls am RING-Ausgang erzeugt. Das
Rechtecksignal muss vom Mikrocontroller, entsprechend des in Abbildung (4.4) dargestellte
54
Funktionsblöcke der Software
Zeitschemata, ausgewertet werden. Das
Rufsignal auf Tip und Ring @25Hz
20
Rufsignal wird jeweils für eine Sekunde
gegeben,
zwischen
zwei
-40
U/V
von der Vermittlung auf die Leitung
0
-20
-60
Rufsignalen
-80
-100
herrscht für vier Sekunden Sendepause.
International
unterschieden
sich
0
0.02
0
0.02
die
3
und befinden sich in einem Bereich
2
U/V
Frequenzen der Rufsignal-Töne erheblich
zwischen 16⅔Hz und 64Hz, was, bei einer
1
Signaldauer von einer Sekunde und dem
0
LITELINK Vollwellenruferkenner, 33 bis
0.04
0.06
0.08
0.1
0.12
t/s
Vollw ellenerkennung RING Ausgangssignal
0.04
0.06
0.08
t/s
0.1
0.12
0.14
0.16
0.14
0.16
Abb.(4.3): Rufsignale
128 Impulsen am RING Ausgangspin
entspricht. Der Software-Algorithmus zur Rufsignalerkennung sollte so angelegt sein, dass er
in diesem Frequenzbereich gültige
1s
4s
Rufsignale erkennt.
1s
Weiterhin kann es bei der Rufsignalisierung zu zwei Arten von
Störungen kommen, die in Abbildung
RING
(4.4) mit den kleinen Gewitterwolken
visualisiert sind. Es kann z.B. vorkommen, dass während der Sendepause
durch Störeinflüsse auf der Leitung ein
Abb.(4.4): Rufsignale im Zeitkontext mit Störungen
RING-Impuls durch den RuferkennerSchaltkreis erzeugt wird, dem eigentlich gar kein Rufsignal zugrunde liegt. Oder der zweite
Fall wäre, dass sich tatsächlich ein Rufsignal auf der Leitung befindet, aber einzelne
Rufimpulse ausbleiben. Der auswertende Software-Algorithmus muss, robust gegenüber diese
Arten von Störungen, sicher ein Rufsignal als gültig bewerten können.
Für den verwendeten Algorithmus wird lediglich ein interruptfähiger Port-Einganspin (P2.5)
am MSP430F149 benötigt, an den der RING-Ausgangspin angeschlossen ist und ein interner
Intervall-Timer, mit dessen Hilfe der Zeitkontext für die Validierung des Rufsignals
hergestellt wird. Hierfür kommt der Watchdog-Timer (WDT) des MSP430F149 zum Einsatz,
da sich dieser mit Hilfe des 32kHz-Quarzes für eine Intervallzeit von 250ms Sekunden
konfigurieren lässt, sodass, nach dem Starten des Timers, alle 250ms die WDT-Interrupt55
Funktionsblöcke der Software
Routine aufgerufen wird. Die Interrupt-Routinen
für den Eingangspin P2.5 und den WDT finden sich
im Software-Modul ring_detection.c. Abbildung
(4.5) zeigt das Blockschaltbild des WDT.
In Abbildung (4.6) ist der Programmablaufplan für
die Rufsignalerkennung abgebildet. Darin wird das
Zusammenspiel von Port-Interrupt und IntervallTimer-Interrupt veranschaulicht.
Abb.(4.5): Watchdog Timer Blockschaltbild
Abb.(4.6): Ring-Detektion Software-Algorithmus
Die Aufgabe des Port-Interrupts besteht hauptsächlich darin RING-Impulse mit Hilfe der
Variablen ring_puls_cntr zu zählen. Die Variable wird beim Programmstart mit 0
initialisiert. Beim Auftreten des ersten RING-Impulses wird, innerhalb des Port-Interrupts, der
WDT durch Aufruf der Funktion StartWDT_IntervalTimer() als Intervall-Timer
gestartet. Nach 15 erkannten RING-Impulsen erfolgt die Deaktivierung des Port-Interrupts
und gleichzeitig wird das Statusflag ValidRingFG im Statusregister ModemStatusReg
gesetzt. Bei einer minimalen Rufsignal-Frequenz von 16⅔Hz ist nach 15 RING-Impulsen
mindestens eine Zeit von 0,45s vergangen.
Der WDT-Interrupt wird 250ms nachdem der erste RING-Impuls registriert wurde zum ersten
Mal generiert. Die Interrupt-Routine kontrolliert, ob in dem Zeitintervall von 250ms noch
weitere RING-Impulse registriert wurden (ring_puls_cntr > 1). Bei minimaler Frequenz
56
Funktionsblöcke der Software
von 16⅔Hz sollten das bis zu 8 Impulse sein. Für den Fall, dass es sich nur um einen
einzelnen Störimpuls gehandelt hat, wird der Ruferkennungs-Algorithmus neu initialisiert,
d.h. der Intervall-Timer durch Aufruf der Funktion StopWDT() angehalten und, durch
Aufruf der Funktion Init_RingDetection() der Port-Interrupt aktiviert und die
Variable ring_puls_cntr auf 0 zurückgesetzt.
Nach 750ms kontrolliert die WDT-Interrupt-Routine, ob das Flag ValidRingFG gesetzt
wurde. Ausgehend von der minimalen Rufsignal-Frequenz und einem gültigen Rufsignal auf
der Leitung sollten bereits mehr als 15 RING-Impulse registriert sein. Sollte dies nicht der
Fall sein, kam es wohl zu mehreren durch Störung verursachten RING-Impulsen und die
Ruferkennung wird neu initialisiert. Bei gesetztem ValidRingFG Flag läuft der IntervallTimer weiter, das Flag wird zurückgesetzt und die gelbe LED wird zur Visualisierung des
eingehenden Rufsignals angeschaltet.
Nach zwei Sekunden wird dann die Zählvariable ValidRing_cntr für gültig erkannte
Rufsignale um eins erhöht und die gelbe LED wieder ausgeschaltet. Danach erfolgt eine
Fallunterscheidung bzgl. der Anzahl bereits gültig erkannter Rufsignale. Mit der Konstanten
MAX_RINGS wird in der Software festgelegt, nach wie viel erkannten Rufsignalen der
eingehende Ruf angenommen werden soll. Wenn ValidRing_cntr den Wert
MAX_RINGS angenommen hat, erfolgt durch Aufruf der Funktion go_off_hook() die
Änderung des Rufzustands der Soft-Modem-Baugruppe und der Ruf wird entgegen
genommen. Andernfalls wird die Ruferkennung neu initialisiert und das nächste Rufsignal
ausgewertet.
Im Weiteren können nun zwei Fälle unterschieden werden. Der Ruf wurde noch nicht
angenommen. Im Normalfall würde das bedeuten, dass mit Auftreten eines RING-Impulses,
der oben beschriebene Algorithmus erneut durchlaufen wird. Sollte jedoch nach 10 Sekunden
kein weiterer RING-Impuls auftreten, hat es sich wohl um ein einzelnes Rufsignal gehandelt
und der vermeintliche Gesprächspartner hat den Verbindungsaufbau zu der Soft-ModemBaugruppe aufgegeben. Die Ruferkennung wird neu initialisiert, sowie der Ruftonzähler
ValidRing_cntr auf 0 zurückgesetzt.
Im Fall der Rufannahme wartet die Software zwei Sekunden (s. auch Abschnitt 4.3) , bevor
mit Hilfe das Flags OFF_HOOK im Statusregister ModemStatusReg dem Hauptprogramm
mitgeteilt wird, dass sich die Baugruppe im off-hook Zustand befindet.
57
Funktionsblöcke der Software
4.2. Digitale Modulation nach V.21
Dieser Abschnitt beschreibt die eigentliche Grundlage zur Übertragung binärer Information
über das öffentliche analoge Telefonnetz, die Modulation von digitalen Daten in analoge
Signale und die Demodulation von analogen Signalen in digitale Information. Wie bereits
beschrieben soll dabei nach dem V.21-Modemstandard vorgegangen werden. Die
beschriebenen Software Funktionen und Interrupt-Routinen sind im Modul v_21.c zu finden.
Es erfolgt zunächst eine nähere Betrachtung des implementierten FSK-Modulators.
4.2.1. V.21 FSK-Modulator
Entgegen der gängigen Meinung, eine Frequenzumtastung müsse auf reinen Sinussignalen
beruhen, hat die Entwicklung gezeigt, dass die geforderte Frequenzumtastung auch durch
Umtastung von Rechtecksignalen realisiert werden kann. Dabei wird davon ausgegangen,
dass das empfangende Modem tolerant gegenüber im Signal auftretende Oberwellen ist und
die richtigen Frequenzanteile herausfiltern und erkennen kann. Die in Kapitel 3 Abschnitt 3
beschriebene Tiefpass-Charakteristik der Koppelschaltung zwischen Modulator-Ausgangspin
und Sendepin Tx+ des LITELINK III Entwicklungs-Boards hat nur geringe dämpfende
Wirkung auf die Oberwellen der erzeugten Modulator-Frequenzen.
Der V.21-Modulator-Algorithmus muss also eine FSK mit den definierten charakteristischen
Frequenzen des Kanal Nr.2 (1650Hz und 1850Hz) realisieren. Die Erzeugung eines
Rechtecksignals einer bestimmten Frequenz gestaltet sich mit dem MSP430F149 relativ
einfach. Hierzu wird das Timer_A Modul verwendet (s. Abbildung (4.7)).
Abb.(4.7): MSP430F149 Timer_A Blockschaltbild
58
Funktionsblöcke der Software
Hierbei handelt es sich um ein 16-Bit breites Zählregister, dass mit drei Capture/CompareBlöcken verbunden ist. Für die Realisierung des FSK-Modulators wird konkret der CCR2Block im Compare-Modus betrieben. Durch Übereinstimmung des Timer_A Zählerwertes
und des Wertes im Compare-Register (CCR2) erfolgt die Generierung eines Interrupt. Jeder
Capture/Compare-Block des Timer_A ist weiterhin mit einer separaten Ausgabeeinheit
verbunden, die acht verschiedene Betriebsarten beherrschen. Die Ausgabeeinheit kann so
konfiguriert werden, dass bei Übereinstimmung des Timer_A Zählerwertes mit dem
Compare-Register Inhalt hardwaremäßig, ohne weiteres Eingreifen per Software, der Pegel
eines Ausgangspins geändert wird. Die Erzeugung einer definierten Signalfrequenz ergibt sich
aus dem Zusammenspiel zwischen Compare-Interrupt und entsprechender Konfiguration der
Ausgabeeinheit, unter Zuhilfenahme einer Speichervariablen (BitFreq), deren Inhalt dem
Zählerwert der halben zu erzeugenden Signalperiode entspricht. Die Werte für die Variable
BitFreq berechnen sich aus der Frequenz, mit der der Timer_A getaktet wird und der zu
erzeugenden Signalfrequenz nach der Formel:
BitFreq =
Timer _ A Zählfreque nz
2 ⋅ Signalfreq uenz
Gl. (4.1)
Timer_A wird mit vollem Systemtakt von 7,3728MHz getaktet. Hieraus ergeben sich die in
Tabelle (4.1) aufgelisteten BitFreq-Werte für die FSK-Frequenzen im Kanal Nr.2.
charakteristische Frequenz
BitFreq
binär 0
1850Hz
1993
binär 1
1650Hz
2235
Tab.(4.1): Werte für BitFreq
In Abbildung (4.8) ist der Programmablaufplan der CCR2-Interrupt-Routine abgebildet. In
der Routine wird lediglich der Inhalt der Variablen BitFreq auf
CCR2 Interrupt
Service Routine
den aktuellen CCR2-Register Inhalt aufaddiert. Damit wird stets
nach BitFreq Zählschritten des Timer_A ein weiterer Interrupt
CCR2 = CCR2 + BitFreq
generiert. Durch Konfiguration der CCR2-Ausgabeeinheit im
„Toggle“-Modus wird am Modulator-Ausgangspin
Return from Interrupt
Abb.(4.8): CCR2 Interrupt
(P1.7) ein
Rechtecksignal mit der gewünschten Frequenz erzeugt.
Um zu erreichen, dass die Frequenz des Ausgangssignals
entsprechend der zu sendenden Bitfolge umgetastet wird, kommt an
59
Funktionsblöcke der Software
dieser Stelle das UART-Modul zum Einsatz. Die Bitgeschwindigkeit wird mit 300bit/s
initialisiert und das UART-Ausgangssignal wird wiederum hardwaremäßig auf einen
interrupt-fähigen MSP430F149 Eingangspin (P1.3) geschaltet. Das UART-Modul arbeitet
CPU-unabhängig, d.h. die Software muss lediglich ein Datenbyte in das UART-Senderegister
schreiben und anschließend generiert das UART-Modul ein asynchrones Ausgangssignal mit
StartP1.3 Interrupt
Service Routine
und
Stoppbit
und
einer
Bit-
geschwindigkeit von 300bit/s. Abbildung
(4.9) zeigt den Programmablaufplan für den
nein
Eingangspin-Interrupt
ja
von
P1.3.
Der
high-low-Flanke?
Interrupt wird jeweils durch eine steigende
BitFreq den Wert für
1650Hz zuweisen
oder fallende Flanke des UART-Signals
BitFreq den Wert für
1850Hz zuweisen
generiert. Bei einer fallenden Flanke wird die
Variable BitFreq mit dem Wert für die
Flankensensibilität für P1.3
Interrupt andern
Frequenz 1850Hz (logisch 0) und bei einer
steigenden Flanke mit dem Wert für die
Frequenz 1650Hz (logisch 1) initialisiert.
Return from Interrupt
Abbildung (4.10) zeigt eine Zusammen-
Abb.(4.9): P1.3 Interrupt
fassung der Realisierung des Modulations-
Mechanismus und Abbildung (4.11) soll das Zusammenspiel der einzelnen Interrupt-Routinen
MSP430F149
noch einmal veranschaulichen. Die Software
UART
Transmit Logic
verwendet zum Starten des Modulators zwei
UART Tx
Output
Funktionen. SetupFSKModem() initialisiert
sämtliche Hardware-Module des MSP430F149,
P1.3
Interrupt Routine
die für die Modulation und Demodulation verwendet
werden.
startet
den
schließend
StartFSKModulator()
Modulator-Mechanismus,
kann
dann
mit
der
an-
Funktion
BitFreq
P1.7
Output
Timer_A CCR2
Compare Logic
putchr() das UART-Senderegister mit Bytes
beschrieben werden, die dann eine entsprechende Modulierung erfahren..
60
Abb.(4.10): FSK-Modulator
P1.3
Input
Funktionsblöcke der Software
UART-Signal
P1.3 Interrupt
1
0
1
1
0
P1.7 Output
t
CCR2 Compare-Interrupt
Abb.(4.11): UART- und P1.7-Modulator-Ausgangssignal
4.2.2. V.21 FSK-Demodulator
Abbildung (4.12) eine kleine Auswahl an Möglichkeiten zur Demodulation eines FSKSignals.
analoge
Filterung
AD-Wandlung
Software zur
Ampl.auswertung
AD-Wandlung
digitale
Filterung
Software zur
Ampl.auswertung
AD-Wandlung
FFT
2 x Goertzel
Comparator
PeriodendauerMessung
0...1
Abb.(4.12): Demodulationsarten
Der Weg über analoge Filterung und anschließende Amplitudenbewertung mittels ADWandlung wurde verworfen, da der Hardware-Aufwand zu umfangreich erschien und zudem
in diesem Projekt die Aufgabe bestand, mit möglichst wenig Hardware auszukommen.
Simulationen mit der Software Matlab/Simulink haben ergeben, dass die Realisierung von
DSP-typischen digitalen Filter-Algorithmen zu viel Rechenzeit beanspruchen würden, sodass
61
Funktionsblöcke der Software
es möglicherweise zu Problemen bei der Implementierung der höheren Protokoll-Schichten
kommen würde. Deshalb wurde in diesem Projekt ein etwas unkonventioneller Lösungsweg
bei
der
Realisierung
der
Demodulation des FSK-Signals
gegangen.
Mit
integrierten
Hilfe
des
MSP430F149
Comparator_A-Moduls
(s.
Abbildung 4.13)) werden die
Nulldurchgänge
der
FSK-
Schwingung erkannt und anschließend
aus
den
Zeit-
punkten der Nulldurch-gänge
die Periodendauer des Signals
bestimmt. Das in Kapitel 3
Abschnitt 3 beschriebene auf-
Abb.(4.13): Comparator_A Blockschaltbild
bereitete Empfangssignal wird
über den Eingangspin P2.3 auf den nicht-invertierenden Eingang des Comparator_A
geschaltet. An den invertierenden Comparator_A Eingang wird per Software-Initialisierung
eine interne Referenzspannung gelegt, die der halben Betriebsspannung entspricht. Da das
Empfangssignal durch die in Kapitel 3 Abschnitt 3 beschriebene OPV-Schaltung mit einem
Gleichspannungs-Offset der
halben
Comparator Eingangs- & A usgangssignal @980Hz
Betriebsspannung
3
chen die Flankenwechsel am
U/V
überlagert wurde, entspre-
1
Ausgang des Comparator_A
0
genau den Nulldurchgängen
des
empfangenen
Signals.
Abbildung
0
FSK-Signal
zu-
sammensetzt, zusammen mit
der Referenzspannung und
dem
Comparator_A
1
2
2.5
3
x 10
-3
3
2
1
0
0
0.5
Aus-
gangssignal, dargestellt in-
1.5
t/s
Comparator Eingangs- & A usgangssignal @1180Hz
(4.14)
U/V
das
0.5
FSK-
zeigt die Signale aus denen
sich
2
1
1.5
t/s
2
2.5
3
x 10
Abb.(4.14): Comparator_A Eingans- und Ausgangssignale
62
-3
Funktionsblöcke der Software
nerhalb der Bitzeit. Dabei handelt es sich im oberen Diagramm um ein Wechselsignal mit der
Frequenz 980Hz (binär 1) und im unteren Diagramm um ein Signal mit der Frequenz 1180Hz
(binär 0).
Das Comparator_A Ausgangssignal kann intern auf den Eingang des CCR1 Capture-Moduls
geschaltet werden (s. Abbildung (4.7) und Abbildung (4.13)). Dadurch kann mit jeder Flanke
des Comparator_A Ausgangssignals der CCR1 Capture-Interrupt generiert werden.
Abbildung (4.15) zeigt den Programmablaufplan der CCR1 Capture-Interrupt-Routine. Die
Routine berechnet
Comparator_A
aus zwei korrespondierenden
Ausgangssignals
und
entscheidet
Flanken
die
anschließend,
Periodendauer des
ob
die
berechnete
Periodendauer mit einer
der erwarteten Perioden-
CCR1
Capture-Interrupt
Service Routine
Zeitdifferenz zur
vorangegangenen
low-high-Flanke
berechnen
nein
Zeitdifferenz zur
vorangegangenen
high-low-Flanke
berechnen
ja
high-low-Flanke?
dauern
(Perioden
für
980Hz
oder
1180Hz)
übereinstimmt.
Entspre-
chend wird dann entweder
die Variable zeros, für
Entspricht
Zeitdifferenz
Periodendauer von
1180Hz?
ja
Zähler zeros
inkrementieren
eine erkannte 0-Signalperiode, oder die Variable
nein
ones, für eine erkannte 1Zähler ones
inkrementieren
ja
Entspricht
Zeitdifferenz
Periodendauer von
980Hz?
nein
Signalperiode,
um
erhöht.
Perioden-
Die
dauern werden durch 16-
Return from Interrupt
Bit Werte repräsentiert,
Abb.(4.15): CCR1 Capture-Interrupt-Routine
die
einem
Zählerwert
Timer_A
entsprechen
und sich aus der Taktfrequenz des Timer_A nach folgender Formel berechnen lassen.
Zählerwert =
eins
Timer _ A Zählfreque nz
Signalfreq uenz
63
Gl. (4.2)
Funktionsblöcke der Software
Tabelle (4.2) enthält die Zählerwerte für die erwarteten charakteristischen Frequenzen im
Kanal Nr.1 bei einer Timer_A Zählfrequenz von 7,3728MHz.
Signalfrequenz
Zählerwert
980Hz
7523
1180Hz
6248
Tab.(4.2): Signalfrequenzen und korrespondierende Zählerwerte
Da die real berechneten Werte wohl kaum exakt mit den theoretischen Werten in Tabelle (4.2)
übereinstimmen werden und zusätzlich vom V.21-Standard eine Demodulator-Toleranz von
±12Hz gefordert wird, ist in der CCR1 Interrupt-Routine bei der Periodendauer-Bewertung
ein Toleranzfenster eingebaut. Der Toleranz-Rahmen lässt sich mittels der Konstanten
CHN1_MARGIN einstellen und ist in der Software auf 500 Zählerwerte festgelegt. Damit
ergeben sich die in Tabelle (4.3) zusammengestellten Toleranzbereiche für die FrequenzDetektion innerhalb der CCR1 Capture-Interrupt-Routine.
charakteristische Frequenzen
Toleranzbereich
binär 0
1180Hz
1093Hz - 1283Hz
binär 1
980Hz
919Hz – 1050Hz
Tab.(4.3): Toleranzbereich für charakteristische Frequenzen bei der Detektion
Aus Abbildung (4.14) ist zu erkennen, dass für ein Signal mit 980Hz innerhalb der Bitzeit
fünf Signalperioden erkannt werden können und für ein Signal mit 1180Hz sechs
Signalperioden. Um nun aus den erkannten Signalperioden wieder ein Datenbyte zu erhalten,
wird mit dem noch zur Verfügung stehenden CCR0 Compare-Interrupt ein Bitzähler
realisiert. Nach sechs erkannten 0-Signalperioden, es wird davon ausgegangen, dass es sich
dabei um ein Startbit handelt, wird der Bitzähler gestartet. Nach sechs 0-Signalperioden ist
mittlerweile auch die Bitzeit für das vermeintliche Startbit vergangen. Der Bitzähler generiert
dann neun mal hintereinander im Bitzeittakt den CCR0 Compare-Interrupt. Abbildung (4.16)
zeigt den Programmablaufplan der Interrupt-Routine. Die Routine entscheidet dann darüber,
ob in der vergangenen Bitzeit mehr 0 oder 1 Signalperioden erkannt wurden, durch Vergleich
der Zählerstände von zeros und ones. Entsprechend wird der Pegel am Ausgangspin P1.2
auf logisch 0 oder 1 gesetzt. Anschließend werden die Variablen ones und zeros auf 0
64
Funktionsblöcke der Software
zurückgesetzt. Dadurch entsteht am Ausgangspin P1.2 ein zeitdiskretes Ausgangssignal im
Bittakt, das hardwaremäßig auf den Eingangspin des UART-Moduls geschaltet ist.
CCR0
Compare-Interrupt
Service Routine
BitCounter
inkrementieren
ja
CCR0 Compare-Interrupt
deaktivieren
BitCounter = 9?
nein
P1.2 Output auf
Low-Pegel
zurücksetzen
nein
ones > zeros?
ja
P1.2 Output auf
High-Pegel
setzen
Return from Interrupt
Abb.(4.16): CCR0 Compare-Interrupt-Routine
Abbildung (4.17) stellt das Zusammenspiel der an der Demodulation beteiligten HardwareModule dar.
MSP430F149
UART
Receive Logic
UART Rx
Input
Timer_A CCR0
Compare Interrupt
Timer_A CCR1
Capture Logic
P2.3
Input
Comparator_A
Abb.(4.17): FSK-Demodulator
65
P1.2
Output
Funktionsblöcke der Software
Abbildung (4.18) zeigt den realisierten MSP430F149 Modulator und Demodulator noch
einmal im Zusammenhang.
MSP430F149
UART Tx
Output
P1.3
Input
P1.7
Output
Transmit Buffer
Receive Buffer
FSK-Modulator
FSK-Demodulator
UART
Transmit Logic
UART
Receive Logic
P1.3
Interrupt Routine
Timer_A CCR0
Compare Interrupt
BitFreq
Timer_A CCR1
Capture Logic
UART Rx
Input
P1.2
Output
P2.3
Input
Timer_A CCR2
Compare Logic
Comparator_A
Abb.(4.18): Modulator und Demodulator
Es wird ersichtlich, dass das UART-Modul die Schnittstelle zur höher liegenden
Kommunikations-Protokoll-Schicht darstellt. Dieses Konzept lässt sich damit begründen, dass
das PPP-Software-Modul ursprünglich so konzipiert wurde, dass es die serielle RS232Schnittstelle zur Kommunikation mit einem externen Modem nutzt und die RS232Schnittstelle mit dem UART-Modul realisiert wurde. Damit kann das PPP-Modul, ohne
Veränderung, mit einem externe oder integriertem Soft-Modem eingesetzt werden.
Mit der Funktion SetupFSKModem() wird der Demodulator initialisiert und mit
StartFSKDemodulator() gestartet.
66
Funktionsblöcke der Software
4.3. V.21 Negotiation-Handshake
Zwischen Rufannahme und dem eigentlichen Datentransfer nach V.21-Standard müssen sich
beide Modems der Kommunikationspartner auf einen gemeinsamen Modulations-Standard
einigen. Dies erfolgt im sog. Negotiation-Handshake. Die Soft-Modem-Applikation
implementiert ausschließlich den V.21-Standard. Das Modem am anderen Ende der
Telefonleitung wird aber sicherlich mehrere Standards beherrschen und dementsprechend
muss dem Modem mitgeteilt werden, dass von der Soft-Modem-Applikation eine
Kommunikation nach V.21-Standard gewünscht wird. Der V.21-Standard definiert keinen
eigenen Negotiation-Handshake. Man behilft sich deshalb durch einen Blick in den V.22oder V.25-Standard. Abbildung (4.20) zeigt die zeitliche Abfolge des HandshakeMechanismus aus Sicht der Soft-Modem-Applikation.
Rufannahme
Antwort-Ton
2100Hz
Ring-Detektion
2150ms
3300ms
Senden binärer 1en
1650Hz
75ms
155ms
Daten
600ms
Abb.(4.20): V.21 Negotiation-Handshake
Nach der Rufannahme herrscht zuerst für 2150ms Ruhe auf der Leitung, davon stammen noch
2 Sekunden vom Ruferkennungs-Algorithmus, die restlichen 150ms, sowie alle weiteren
Zeitabschnitte werden vom CCR0 Compare-Interrupt gesteuert, der zu gegebenem Zeitpunkt
eine Zustands-Änderung der Variablen HandshakeStateMachine, innerhalb des
Handshake-Algorithmus veranlasst. Die Ruhepause ist dafür gedacht, dass den DAAs in
beiden Modems genügend Zeit zur Verfügung steht, den Übergang in den Rufszustand
vollkommen abzuschließen. Nach der Ruhepause sendet die Soft-Modem-Baugruppe für
3300ms einen 2100Hz Antwort-Ton an das rufende Modem. Die Erzeugung des 2100Hz
Antwort-Ton erfolgt durch Aufruf der Funktion StartAnswerSequence(), indem der
Modulator gestartet und die Variable BitFreq mit dem entsprechenden Wert für 2100Hz
initialisiert wird. Nach 3300ms erfolgt der Aufruf der Funktion StopAnswerSequence()
und es herrscht für weitere 75ms wieder Ruhe auf der Leitung. Anschließend wird wieder der
Modulator, diesmal mit der Funktion StartFSKModulator() gestartet und die SoftModem-Applikation sendet binäre 1en, im Kanal Nr.2 in Form eines Signals mit der
konstanten Frequenz von 1650Hz, an das rufende Modem. Ebenfalls zu diesem Zeitpunkt
erfolgt das Starten des Demodulators mit der Funktion StartFSKDemodulator(). Der
67
t
Funktionsblöcke der Software
folgende Zeitabschnitt ist mit keiner konkreten Zeitdauer beziffert. Das rufende Modem hat
nun Zeit zu erkennen, dass ihm der V.21-Standard als Kommunikations-Protokoll angeboten
wird. Sobald das rufende Modem den V.21-Standard erkannt hat, beginnt es ebenfalls binäre
1en, im Kanal Nr.1 in Form eines Signals mit der konstanten Frequenz von 980Hz, an die
Soft-Modem-Baugruppe zu senden. Die Soft-Modem-Applikation muss nun für 155ms die
binären 1en im Kanal Nr.1 erkennen. Die Erkennung erfolgt im Rahmen der CCR1 CaptureInterrupt-Routine durch Zählen von 1-Signalperioden. In die Zeit von 155ms passen knapp
152 Signalperioden bei einer Frequenz von 980Hz. Da die Capture-Routine aber auf jeden
Nulldurchgang des Empfangsignals reagiert, werden innerhalb von 155ms doppelt so viele
Signalperioden erkannt. Es werden also mit der Variablen EdgeCounter 300
Signalperioden gezählt, bis der Negotiation-Handshake in die nächste Phase übergeht. Die
Anzahl der zu zählenden Signalperioden lässt sich mit der Konstanten DetectTime_Chn1
variieren. In der nächsten Phase wartet die Soft-Modem-Applikation noch weitere 600ms bis
dann anschließend der Transfer von Daten beginnen kann.
Die Einbindung des V.21-Moduls in ein Anwender-Programm erfolgt über die beiden
Funktionen ModemInit() und modem(). Abbildung (4.21) zeigt schematisch die
Einbindung des V.21-Moduls in ein Anwender-Programm. Dabei steuert die Routine
modem() den Zustand der Modembaugruppe und
muss zyklisch vom Hauptprogramm aufgerufen
ModemInit()
werden. Der aktuelle Modem-Zustand wird in der
globalen
modem()
Variablen
ModemStateMachine
gespeichert. Bei Programmstart befindet sich das
Modem im Zustand RingDetection. Sobald ein Ruf
sonstiges
Anwenderprogramm
entgegen genommen und das Flag OFF_HOOK
gesetzt
sonstiges
Anwenderprogramm
Abb.(4.21): Verwendung des V.21-Moduls
wurde,
beschriebenen
erfolgt
die
Modulator-
Initialisierung
und
der
Demodulator-
Mechanismen. Anschließend wechselt das Modem
in den Zustand AnsweringHandshake. In diesem
Zustand findet der Negotiation-Handshake statt.
Nachdem der Handshake-Mechanismus abgeschlossen ist, nimmt das Modem den DataModeZustand ein. Im diesem Zustand wird fortwährend kontrolliert, ob ein Empfangssignal
vorhanden ist. Dies geschieht mit Hilfe des OFF_HOOK-Flags. Mit jeder erkannten
Signalperiode durch die CCR1 Capture-Interrupt-Routine wird gleichzeitig das OFF_HOOKFlag gesetzt. Im DataMode-Zustand wird bei jedem Aufruf der Routine modem() das Flag
68
Funktionsblöcke der Software
zurückgesetzt. Beim Ausbleiben des Empfangsignals erfolgt kein erneutes Setzen des Flags
und
jeder
Aufruf
der
Routine
modem()
hat
eine
Erhöhung
des
Zählers
Off_Hook_TimeOut_cntr zur Folge. Nachdem der Zähler einen bestimmten Wert
erreicht hat, ist sichergestellt, dass kein Empfangssignal mehr verfügbar ist und
dementsprechend wird die Modem-Verbindung getrennt und die Software neu initialisiert.
Abbildung (4.22) zeigt die Zustände des Modem in Form eines Phasen-Diagramms.
ja
RingDetection
OFF_HOOK?
nein
AnsweringHandshake
nein
OnesDetected?
ja
ja
nein
OFF_HOOK?
DataMode
Abb.(4.22): Modem-Zustände und Übergangsbedingungen
69
Funktionsblöcke der Software
4.4 PPP im Server-Betrieb
Die Implementierung des PPP erfolgt durch das Software-Modul ppp.c und dessen HeaderDatei ppp.h. Der Empfangs-Interrupt des UART-Empfangsregisters und das UARTSenderegister stellen die unmittelbare Schnittstelle zwischen dem Senden und Empfangen von
Bytes nach V.21-Modulations-Standard und der PPP-Schicht dar.
Es soll nun zuerst ein Blick auf den Empfangspfad gerichtet werden. Innerhalb des UARTEmpfangsinterrupts wird die Funktion ppp_RXroutine() aufgerufen. Die Funktion
ppp_RXroutine()
realisiert
das
organisierte
Speichern
von
Datenpaketen
im
Empfangspuffer RXBuffer, mit Hilfe der Struktur-Variablen BufferTable. Die Variable
BufferTable entspricht einer Tabelle mit MaxDataPackets Zeilen, bei der jede Zeile aus
zwei Zellen besteht. Die erste Zelle ist vom Typ unsigned char* und die zweite Zelle vom
Typ unsigned int. Damit lassen sich MaxDataPackets Datenpakete im Empfangspuffer für
die spätere Auswertung adressieren. Eine Zeile der Variable BufferTable wird
dementsprechend mit Startadresse und Byte-Anzahl eines empfangenen Datenpakets
beschrieben. Abbildung (4.23) soll diesen Sachverhalt an einem kleinen Beispiel
veranschaulichen.
RXBuffer[ ]
address
BufferTable[3]
unsigned char*
unsigned int
1
36
37
42
79
33
content
1
0x03
2
0xFF
... ...
36
0x56
37
0x21
... ...
78
0x5A
79
0xC0
... ...
111
0xB9
112
0xAB
... ...
Abb.(4.23): Organisation des Empfangspuffers
Zum zyklischen Beschreiben der einzelnen Tabellenzeilen dient die Index-Variable
TableIndex.
Abbildung
(4.24)
zeigt
den
Programmablaufplan
der
Funktion
ppp_RXroutine(). Der Zeiger pRXBuffer dient zum Adressieren der Speicherzellen
des Empfangspuffer. Die Routine unterscheidet, ob eine Flag-Sequenz, ein Control-EscapeByte oder ein beliebiges Datenbyte empfangen wurde. Flag-Sequenzen und Control-Escape70
Funktionsblöcke der Software
Bytes werden nicht im Empfangspuffer gespeichert, sodass ausschließlich Nutzdaten und FCS
im Empfangspuffer vorliegen. Sollte es während des Empfangs eines Datenpakets zum
Puffer-Überlauf kommen, werden die bereits empfangenen Datenbytes an den Anfang des
Empfangspuffers kopiert und anschließend mit der Beschreibung des Puffers fort gefahren.
„Start Flag Sequenz“
aktuelle Adresse auf die pRXBuffer
zeigt in BufferTable[TableIndex]
speichern
empfangenes Byte
nein
ja
Flag Sequenz?
mit TableIndex nächste Tabellenzeile
indizieren
RXBufferSize = 0
RXpackets inkrementieren
RXBufferSize = 0?
ja
nein
„End Flag Sequenz“
Anzahl empfangener Datenbytes
(RXBufferSize) in
BufferTable[TableIndex] speichern
ja
Control-Escape?
FRX_CE Flag setzen
nein
ja
Empfangenes Byte mit 0x20
exklusiv-oder Verknüpfen und
FRX_CE zurücksetzen
FRX_CE gesetzt?
nein
empfangenes Byte auf die Adresse auf
die pRXBuffer zeigt speichern und
Zeiger pRXBuffer inkementieren
nein
ja
Pufferüberlauf?
pRXBuffer und
BufferTable[TableIndex] mit
Startadresse des Puffers
beschreiben
nein
RXBufferSize > 120
bereits empfangene Bytes des
Datenpakets an den Anfang des
Puffers kopieren
ja
RXBufferSize = 0
Return from Subroutine
Abb.(4.24): Programmablaufplan von ppp_RXroutine()
71
Funktionsblöcke der Software
Diese Vorgehensweise kommt nicht zum Einsatz, wenn bei einem Überlauf bereits mehr als
120Bytes eines einzigen Datenpakets empfangen wurden. Die Implementierung erwartet
Datenpaket mit einer maximalen Gesamtlänge von ca. 100Bytes, bei einem Datenpaket, dass
bereits die Anzahl von 120Bytes überschritten hat, kann es sich sicher nicht um ein Paket
handeln, dass für die Applikation von Interesse ist. Die Software wechselt also unbeirrt zum
Anfang des Empfangspuffer und setzt dort mit dem Beschreiben fort. Bei der Berechnung der
FSC wird daraufhin ein Fehler auftreten und das „zu große“ Datenpaket verworfen. Nachdem
ein komplettes Datenpaket empfangen wurde, wird die Variable RXpackets um eins erhöht.
Damit wird der Routine ppp_sdu(), die vom Hauptprogramm zyklisch aufgerufen werden
muss, mitgeteilt, dass mindestens ein Datenpaket im Empfangspuffer zur Auswertung bereit
liegt.
Die Funktion ppp_sdu() implementiert die Establish-, Network- und Terminate-Phase des
PPP und muss vom übergeordneten Hauptprogramm zyklisch aufgerufen werden. Die aktuelle
Phase des PPP, sowie die Zustände des LCP und IPCP stehen über die globalen Variablen
PPPphase, LCPAutomaton und IPCPAutomaton jederzeit für die Anwendung zur
Verfügung. Abbildung (4.25) stellt den Programmablaufplan für die Funktion dar. Die
Terminate-Phase dient lediglich zur Neuinitialisierung des PPP-Stacks. Das PPP befindet sich
nach dem Programmstart oder einer Neuinitialisierung in der Establish-Phase. Solange sich
das LCP nicht im Opened-Zustand befindet bleibt PPP in der Establish-Phase und es wird die
Funktion ProcessLCP() aufgerufen. ProcessLCP() implementiert den OptionNegotiation-Automat für das LCP. Anschließend wird kontrolliert, ob Datenpakete im
Empfangspuffer zur Auswertung bereit liegen. Sollte dies der Fall sein (RXpackets > 0),
wird die Funktion EvalRXpacket() aufgerufen, die dann das zuletzt empfangene
Datenpaket auswertet. Auf EvalRXpacket() wird weiter unten noch detaillierter
eingegangen. Das Auswerten eines Datenpakets sollte jedoch zum Auftreten eines Ereignisses
führen, das dann in der Variablen Event genauer spezifiziert ist. Beim nächsten Durchlauf
von ppp_sdu() führt das aufgetretene Ereignis dann eventuell zu Zustandsübergängen und
zum Versenden von Datenpaketen innerhalb der Routine ProcessLCP(). Die Routine
EvalRXpacket() liefert zudem in der globalen Variablen ProtocolType den
Protokoll-Typ, der im zuletzt ausgewerteten PPP-Datenpaket transportiert wurde. In der
Establish-Phase sind nur LCP-Datenpakete erlaubt. Sollte es sich im letzten Datenpaket um
einen anderen Protokoll-Typ gehandelt haben, wird kein Ereignis generiert. Sobald LCP den
Opened-Zustand eingenommen hat, wird der IPCP Option-Negotiation-Automat entsprechend
initialisiert und es erfolgt der Übergang in die Network-Phase.
72
Funktionsblöcke der Software
IPCPAutomaton = Starting
PPPphase = Network
Event = Up
PPPphase
ja
ja
Establish?
LCPAutomaton =
Opened?
nein
ProcessLCP()
nein
nein
RXpackets > 0?
ja
EvalRXpacket()
ProtocolType =
LCP?
nein
Event = NONE
ja
ja
Network?
nein
ProcessIPCP()
RXpackets > 0?
ja
nein
EvalRXpacket()
ProtocolType =
LCP?
nein
ja
ja
Event = RCR?
PPPphase = Establish
IPCPAutomaton = Initial
nein
ja
Event = RTR?
PPPphase = Terminate
nein
Event = NONE
ProcessLCP()
ja
Terminate?
ppp_Init()
nein
Return from Subroutine
Abb.(4.25): Programmablaufplan von ppp_sdu()
73
Funktionsblöcke der Software
Die Behandlung der Network-Phase gestaltet sich ähnlich wie die der Establish-Phase. Der
Aufruf von ProcessIPCP() implementiert den Option-Negotiation-Automat für IPCP.
Anschließend wird wieder kontrolliert, ob Datenpakete zur Auswertung bereit stehen. In der
Network-Phase wird jedoch zusätzlich die Verarbeitung von LCP-Datenpaketen erlaubt.
Dementsprechend wird beim Empfang eines LCP-Pakets die Routine ProcessLCP()
aufgerufen. Der Empfang eines LCP-Configure-Request führt zum Übergang in die EstablishPhase. Ein Terminate-Request zum Übergang in die Terminate-Phase. Im Gegensatz zu
ProcessLCP() verwendet ProcessIPCP() die Funktionen This_Layer_Up() und
This_Layer_Down(). Wenn IPCP den Opened-Zustand einnimmt, wird entsprechend
dem Option-Negotiation-Mechanismus, die Funktion This_Layer_Up() aufgerufen.
Darin wird das Flag PPP_Up im Statusregister PPPstatus gesetzt. Damit wird den höheren
Protokoll-Schichten angezeigt, dass die PPP-Schicht für die Kommunikation zur Verfügung
steht. Die Funktion This_Layer_Down() setzt das Flag PPP_Up wieder zurück. Die
PPP-Schicht steht dann nicht mehr
für die höheren Protokoll-Schichten
zur Verfügung.
FCS berechnen
Wie bereits oben beschrieben dient
ja
die Routine EvalRXpacket()
nein
FCS korrekt?
zum Auswerten und ProtokollProtokoll-Typ bestimmen
Multiplexen
Datenpaketen.
ProtocolType =
LCP?
ja
von
empfangenen
Abbildung
(4.26)
soll den Programmablaufplan der
EvalLCPpacket()
Routine
veranschaulichen.
Die
Routine
liest
der
nein
ProtocolType =
IPCP?
ja
mit
Hilfe
Variablen ReadTableIndex den
EvalIPCPpacket()
letzten
nein
Tabellen-Eintrag
aus
BufferTable und beginnt die
ja
ProtocolType = IP?
Service-Access-Point für IP initialisieren
ppp_RXpacket, ppp_RXpacketSize
FCS des Datenpakets zu berechnen.
Eine
nein
falsche
FCS
führt
zum
Verwerfen des Datenpakets. Sollte
RXpackets
dekrementieren
die FCS des Datenpakets korrekt
sein wird zuerst der Protokoll-Typ
Return from Subroutine
des
Abb.(4.26): Programmablaufplan von EvalRXpacket()
74
Pakets
anschließend
ermittelt,
zur
um
weiteren
Funktionsblöcke der Software
Auswertung
die
entsprechenden
Routinen
EvalLCPpacket()
oder
EvalIPCPpacket() aufzurufen, die dann ein entsprechendes Ereignis erzeugen. Handelt
es sich bei dem empfangenen Datenpaket um ein IP-Datagramm, wird, für den Fall, dass sich
sowohl LCP als auch IPCP im Opened-Zustand befinden, der Zeiger ppp_RXpacket auf
den Anfang des IP-Pakets initialisiert und in der Variablen ppp_RXpacketSize die
Anzahl der Bytes, die das IP-Datagramm umfasst, gespeichert. Zusätzlich wird das Flag
RXData_Available im Statusregister PPPstatus gesetzt, um dem TCP/IP-Stack
anzuzeigen, dass IP-Daten empfangen wurden und bereit stehen. ppp_RXpacket und
ppp_RXpacketSize stellen damit den Service-Access-Point (SAP) der PPP-Schicht für
den TCP/IP-Stack dar.
Sämtliche Funktionen, die das Versenden eines Datenpakets zur Folge haben, entsprechen den
bereits oben beschriebenen Aktion des Option-Negotiation-Automat und werden aufgrund
eines aufgetretenen Ereignisses von den Routinen ProcessLCP() und ProcessIPCP()
aufgerufen. Alle diese Funktionen beschreiben zuerst den Sendepuffer (TXBuffer) mit
einem
entsprechenden
Datenpaket
und
greifen
dann
auf
die
Funktion
TransmitTXBuffer() zurück. Der Routine TransmitTXBuffer() wird jeweils ein
Zeiger auf den Anfang des Datenpakets und die Länge des Datenpakets in Byte übergeben.
Anschließend berechnet die Routine die zugehörige FCS und speichert diese im Sendepuffer,
am Ende des Datenpakets ab. Danach erfolgt das Byteweise Versenden des Datenpakets mit
Hilfe der Funktion putchr(). Dabei wird jedes einzelne Byte entsprechend der ACCM des
Kommunikations-Partners überprüft und gegebenenfalls eine Maskierung mittels ControlEscape-Byte vorgenommen.
Sämtliche Option-Negotiation-Mechnismen die zum erneuten Senden von Datenpaketen
führen oder Timout-Ereignisse verursachen wurden in dieser Lösung nicht implementiert. Der
PPP-Stack verlässt sich auf die PPP-Implementierung des Kommunikations-Partners, die bei
Bedarf ein nicht-beantwortetes Datenpaket erneut sendet oder die Verbindung vorzeitig
beendet.
Zum Versenden von IP-Datagrammen stellt das PPP-Modul dem TCP/IP-Stack die beiden
Funktionen ppp_TransmitFrame1() und ppp_TransmitFrame2() zur Verfügung.
Die beiden Routinen sind von ihrer Funktion her identisch. Der TCP/IP-Stack arbeitet jedoch
mit zwei getrennten Sendpuffern (TxFrame1 und TxFrame2) und deshalb wird für jeden
Puffer eine eigene Sendefunktion bereit gestellt. Die Funktionen bestücken das, im jeweiligen
Sendepuffer liegende, IP-Datagramm mit den notwendigen PPP-Header-Informationen und
75
Funktionsblöcke der Software
greifen dann wiederum auf die Funktion TransmitTXBuffer() zurück. Abbildung (4.27)
zeigt das Pufferkonzept für PPP und TCP/IP-Stack.
TxFrame1 = TXBuffer
(Pufferung kompletter PPP-Datenrahmen inklusive
gekapselter LCP-, IPCP- und TCP/IP-Datenrahmen)
TxFrame2 = TXBuffer_2
(Pufferung kompletter PPP-Datenrahmen die TCP/IPNICHT-Datenrahmen sowie ICMP-Daten kapseln)
RXBuffer
(Ablage kompletter empfangener PPP-Datenrahmen, wird
ähnlich einem Ringspeicher verwendet)
Abb.(4.27): Pufferkonzept
4.5. Maßnahmen zur Anpassung des TCP/IP-Stacks an das PPP
Der „easyWeb“-TCP/IP-Stack wurde an folgenden Punkten verändert und an die neuen
Protokoll-Strukturen auf der Netzwerk-Schicht angepasst:
•
Verzicht auf das Ethernet-Modul cs8900.c und cs8900.h und Ersatz sämtlicher
Funktionen, die das TCP/IP-Modul ursprünglich genutzt hat durch Funktionen, die
von der PPP-Schnittstelle bereit gestellt werden
•
Entfernen sämtlicher Algorithmen und Funktionen des Address-Resolution-Protokolls
(ARP), sowie aller Code-Zeilen die Ethernet-Header-Informationen und MACAdressen behandeln
•
Realisierung des Taktgenerators für die „Initiale Sequenznummer“, sowie die
Inkrementierung des Registers TCPTimer mittels Watchdog-Timer IntervallInterrupt.
Anpassung
(Verlängerung)
Übertragungsrate
76
der
Timeout-Zeiten
an
die
geringe
Funktionsblöcke der Software
Die
ausschlaggebenden
Veränderungen
wurden
hauptsächlich
an
der
Funktion
DoNetworkStuff() vorgenommen. Die beiden Routinen SendFrame1() und
SendFrame2() werden komplett von den PPP-Routinen ppp_TransmitFrame1() und
ppp_TransmitFrame2()
ersetzt.
Es
muss
weiterhin
kein
Speicherplatz
im
Ethernetcontroller angefordert werden. Durch Aufruf der Funktion ppp_Available()
wird lediglich kontrolliert, ob die PPP-Verbindung für die Datenübermittlung zur Verfügung
steht.
Da bei einer PPP-Verbindung
keine
Broadcast-Adressierung
verwendet
wird,
entfällt
das
Demultiplexing von empfange-
Frame empfangen?
ppp_DataAvailable()
ja
ProcessEthIAFrame()
nen Datenpaketen. Im Falle eines
nein
empfangenen
IP-Datagramms
wird stets die EreignisbehandTimer-Event
aufgetreten?
lungs-Funktion
ProcessEthIAFrame()
aufgerufen.
Abbildung
ja
Retransmission oder Timeout-Fehler
handhaben, Verbindung beenden
nein
(4.28)
zeigt den überarbeiteten Pro-
Zustand der TCPStateMachine
entsprechend globaler Flags ändern
grammablaufplan der Routine
angelehnt an die Darstellung in
[D&E].
Die
Routinen
TxFrame2-Puffer
senden?
ja
ppp_TransmitFrame2(TxFrame2Size)
ProcessEthIAFrame(),
nein
ProcessICMPFrame()
und
ProcessTCPFrame() wurden
so angepasst, dass anstelle der
TxFrame1-Puffer
senden?
Auslese-Funktionen des Ethernet-Moduls
nun
ppp_RXpacket
der
und
ja
ppp_TransmitFrame1(TxFrame1Size)
nein
Zeiger
die
Variable ppp_RXpacketSize
Abb.(4.28): Routine DoNetworkStuff()
zum Auswerten eines empfangenen IP-Datagramms verwendet werden.
Mit den beschriebenen Veränderungen ist der TCP/IP-Stack einsatzbereit zur Anwendung auf
einer seriellen Punkt-zu-Punkt-Verbindung.
77
Funktionsblöcke der Software
4.6. Embedded Soft-Modem Applikation
Das Aufsetzen der Webserver-Applikation
erfolgt
nach dem gleichen Schema
Systemtaktgeber initialisieren
HardwareInit()
wie in [D&E] ausführlich
beschrieben. Es müssen nur
Modemfunktionen initialisieren
ModemInit()
noch zusätzlich die unteren
Protokoll-Schichten
PPP-Schicht initialisieren
ppp_Init()
und
V.21)
mit
(PPP
in
Hauptprogramm
TCPLowLevelInit()
HTTP-Server Flag-Register initialisieren
TCPLocalPort = TCP_PORT_HTTP
bunden
das
einge-
werden.
Dies
geschieht durch zyklisches
modem()
Aufrufen
der
Funktionen
und
modem()
ppp_sdu()
ppp_sdu() in der Hauptprogrammschleife.
nein
bildung (4.29) zeigt den
ppp_Available()?
Programmablaufplan
ja
des
Webserver-
nein
SOCK_ACTIVE?
Ab-
TCPPassiveOpen()
Hauptprogramms.
Nach
Initialisierung der Hardware
ja
und sämtlicher Protokoll-
DoNetworkStuff()
Module implementiert die
HTTPServer()
Abb.(4.29): Webserver-Hauptprogramm
Hauptschleife
alle
be-
schriebenen
Protokoll-
Schichten vom V.21 bis hin
zum HTTP-Server.
Nach der Programmierung des MSP430F149 kann die Baugruppe an eine Telefondose
angeschlossen werden. Ein internet-fähiger PC mit Modem hat nun die Möglichkeit zur SoftModem-Baugruppe eine DFÜ-Verbindung herzustellen. Sobald die Verbindung aufgebaut
wurde, kann der PC-Anwender mit einem Standard-Internet-Browser die dynamische
Webseite (s. Abbildung (4.30)) des integrierten Webservers abrufen.
78
Funktionsblöcke der Software
Abb(4.30): Beispiel-Webseite
Die verwendete Beispiel-Webseite stellt dynamische Inhalte bereit. Das Einfügen der
dynamischen Inhalte in die Webseite wird in [D&E] ausführlich beschrieben. Im konkreten
Fall handelt es sich hierbei um das Ergebnis der Temperaturmessung mittels AD-Wandlung
und Chip-interner Referenzdiode, sowie dem Pegelzustand des Einganspins P6.6.
Die DFÜ-Verbindung zur Soft-Modem-Baugruppe muss von PC-Seite aus getrennt werden.
79
Ressourcen-Untersuchungen und Ausblick
5. Ressourcen-Untersuchungen und Ausblick
Die vorgestellte Embedded Soft-Modem Applikation benötigt bei Compilierung für einen
MSP430F149 folgende Speicherressourcen:
•
ca. 14 KByte Flash EEPROM für den Programmspeicher
•
ca. 1 KByte Flash EEPROM als Konstantenspeicher
•
Ca. 740 Byte RAM, inklusive zweier jeweils 300Byte fassender Sende- und
Empfangspuffer für PPP-Datenrahmen
Bei den vom Controller zur Verfügung stehenden Speicherressourcen von 60 KByte Flash
EEPROM
und
2
KByte
RAM
bleibt
also
noch
viel
Raum
für
zusätzliche
Anwendungsmöglichkeiten. Da die Modem-Funktionalität im Wesentlichen durch InterruptProzesse realisiert wurde, ist der Prozessor nicht komplett ausgelastet und bietet noch Luft für
weitere Anwendungen im Hauptprogramm. Dadurch würde es unter Umständen nur zu einer
zeitlichen Verzögerung bei der Übertragung der Webseite kommen.
Den Hauptanteil der Speicherressourcen benötigt das PPP-Modul. Bei alleiniger Betrachtung
des V.21- und Ruferkenner-Moduls, durch welche die Modem-Funktionalität realisiert wird,
würden bereits ca. 1,7 KByte Flash EEPROM und ca. 30 Byte RAM den Anforderungen
genügen. Wenn es also darum geht nur eine geringe Menge an Daten zu verarbeiten und zu
übertragen, in Form eines benutzerdefinierten Übertragungs-Protokolls, würde bereits ein
wesentlich „kleinerer“ Mikrocontroller die Aufgaben erfüllen können.
Die Diskussion bzgl. der Leistungsaufnahme beim Betrieb der Soft-Modem-Baugruppe stand
in diesem Projekt im Hintergrund, da die Baugruppe problemlos, bei entsprechender
Beschaltung und Einhaltung von Isolations-Vorschriften, aus der Telefonleitung mit
Spannung gespeist werden könnte. Bei einer Betriebsspannung der Baugruppe von 3,3V
benötigt der LITLINK III im off-hook-Zustand 8mA und der MSP430F149 maximal 1mA.
Die Summe der Ströme liegt weit unter dem zugelassenen Wert, der von einem Endgerät an
der Telefonleitung eingehalten werden muss. Wobei es sich hierbei um Maximalwerte
handelt. Die Messung der Leistungsaufnahme des MSP430F149 müsste gemittelt werden, da
der Controller, entsprechend dem Betriebszustand der kompletten Baugruppe, über die meiste
Zeit hinweg wesentlich weniger Strom benötigt. Nur beim gleichzeitigen Empfangen,
Verarbeiten und Senden von Daten steigt die Leistungsaufnahme auf ihren Maximal-Wert.
80
Ressourcen-Untersuchungen und Ausblick
An dieser Stelle sollen nun noch ein paar Ideen für die Weiterentwicklung und Verbesserung
der Applikation angesprochen werden.
Timer
Die vorgestellte Software-Lösung verwendet zum leichteren Verständnis zwei
unterschiedliche Timer-Module des MSP430F149 (Timer_A und Watchdog Timer). Es wäre
jedoch durchaus denkbar, sämtliche Timer-Funktionen allein mit dem Timer_A-Modul des
MSP430F149 zu realisieren.
Externe Quarze
Es wäre zu Überlegen, ob der MSP430F149 nicht gänzlich auf den externen HF-Quarz mit
7,3728MHz verzichten könnte und für die Realisierung der zeitkritischen Funktionen
(Modulation, Demodulation und Ruferkennung) der 32kHz-Quarz ausreichen würde.
UART-Modul
Die Funktionen des UART könnten komplett in Software realisiert werden. Gerade im
Empfangsweg stellt die Generierung eines zeitdiskreten UART-Empfangssignals mittels
CCR0 Compare-Interrupt einen zusätzlichen Mehraufwand dar. Diese Vorgehensweise wurde
nur aus Symmetriegründen zum leichteren Verständnis der Schnittstelle zur PPP-Schicht
gewählt.
Analoge Filterung
Durch geschickte Programmierung der Periodendauer-Messung mittels CCR1 CaptureInterrupt könnte auf das Tiefpass-Filter im Empfangssignalweg verzichtet werden und eine
Art softwaremäßige Filterung realisiert werden, die das gleiche Ergebnis liefert.
Direct Acces Arrangement
Gerade in Betracht der geringen realisierten Übertragungsrate von 300bit/s, würde es
wirtschaftlich Sinn machen eine andere DAA als den vorgestellten LITLINK III Chip zu
verwenden, die z.B. auf Datenraten bis 2400bit/s beschränkt ist.
81
Ressourcen-Untersuchungen und Ausblick
Kombination mit Ethernet (Gateway)
Durch Erweiterung des TCP/IP-Stacks und Kombination der Modem-Funktionalität mit
Ethernet könnte die Soft-Modem-Baugruppe als Schnittstelle zu einem auf Ethernet
basierenden IP-Netzwerk dienen.
V.22 Modemstandard
Es wäre zu Überlegen und zu Testen, ob sich die vom V.22-Standard geforderte 4Phasenumtastung ebenfalls durch die Umtastung von Rechtecksignalen realisieren lassen und
umgekehrt die Phasenlage des Empfangssignals mit Hilfe des Comparator erkannt und
demoduliert werden könnte. Weiterhin steht noch der AD-Wandler des MSP430F149
unbenutzt zur Verfügung, mit Hilfe dessen zusätzlich eine Amplitudenauswertung des
Empfangsignal stattfinden könnte und Überlegungen zur Demodulation eines QuadraturAmplituden modulierten Signals ins Leben ruft.
Soft-Modem als Internet-Client
Der Betrieb der Soft-Modem-Baugruppe in die „andere Richtung“. Die Applikation könnte
sich selbständig mit einem Internet-Service-Provider verbinden und dann Dienste wie FTP
und EMAIL nutzen. Die Generierung von DTMF-Tönen für den Wahlvorgang ließe sich
durch eine Pulsweiten-Modulation realisieren. Hierzu wurden bereits Untersuchungen im
Rahmen diese Projekts unternommen. Zusätzlich müsste die analoge Signalaufbereitung im
Empfangsweg eine Änderung erfahren, da die Filter-Stufe für den Empfang von Frequenzen
im Kanal Nr.1 dimensioniert wurde. Als Internet-Client würde die Soft-Modem-Baugruppe
aber im Kanal Nr.1 senden und entsprechend im Kanal Nr.2 empfangen.
82
Zusammenfassung
6. Zusammenfassung
Diese Arbeit hat gezeigt, dass sich grundlegende Funktionen einer klassischen ModemBaugruppe durch Programmierung geeigneter Embedded Software mit dem MSP430F149
Mikrocontroller ersetzen lassen und darauf aufbauend eine komplette Embedded Internet
Applikation mit minimalem Hardware-Aufwand entwickelt werden kann.
Im Bereich der digitalen Modulation bzw. Demodulation wurden dabei relativ
unkonventionelle Wege beschritten, die sicherlich nicht ganz unproblematisch erscheinen
mögen, in Bezug auf Zulassungsvorschriften im öffentlichen Telefonnetz und Schutz vor
Fehlern bei der Übertragung von Daten. Jedoch eröffnen sich dadurch ganz neue
Ansatzpunkte bei der Realisierung einer Modem-Funktionalität auf Soft-Modem-Basis.
Der „easyWeb“-TCP/IP-Stack wurde erfolgreich an die Kommunikation über eine serielle
Punkt-zu-Punkt-Verbindung angepasst und ermöglicht damit die Realisierung einer
Webserver-Anwendung, die im Rahmen der Soft-Modem-Applikation oder gegebenenfalls
auch mit einem externen Modem über das öffentliche Telefonnetz betrieben werden kann.
Damit können Informationen Mikrocontroller-basierter Geräte über das Telefonnetz zur
Verfügung gestellt und per Standard-Verbindung und Standard-Software abgerufen werden.
Die Machbarkeitsstudie, als welche diese Diplomarbeit betrachtet werden darf, konnte also
mit einem positiven Ergebnis abgeschlossen werden und bietet zugleich ein ganzes Paket an
Ideen zur sinnvollen Weiterentwicklung.
83
Literatur- und Quellenverzeichnis
A
Literatur- und Quellenverzeichnis
[CCITT]
G. Schenck
CCITT-Empfehlungen der V-Serie und der X-Serie 6., erweiterte
Auflage, Band 1.1 Datenübertragung über das Telefonnetz V.1-V.33,
Heidelberg 1990, ISBN 3-7685-1190-1
[FHL]
Dipl.-Ing. F. Schubert
Technologien der Text- und Datendienste, Basiskenntnisse für das
5.Semester, Vorlesungsbegleitende Arbeitsblätter, Deutsche Telekom
AG Fachhochschule Leipzig 2003
[TCP/IP]
Hein, Mathias:
TCP/IP Internet-Protokolle im professionellen Einsatz;
4. Aufl. – Bonn [u.a.] : Internat. Thomson Publishing., 1998
Design&Elektronik: Embedded Internet Extraheft
Design&Elektronik, September 2001
[D&E]
[RFC791]
Postel, Jon: Internet Protocol (IP). RFC-791,
September 1981
[RFC793]
Postel, Jon: Transmission Control Protocol. RFC-793,
September 1981
[RFC1171]
Perkins, D.: PPP for the Transmission of Multi-Protocol Datagramms
Over Point-to-Point Links. RFC-1171
Juli 1990
[RFC1172]
Perkins, D.; Hobby, R.: PPP Initial Configuration Options. RFC-1172
Juli 1990
[RFC1661]
Simpson, W.: Point-to-Point Protocol. RFC-1661
Juli 1994
[RFC1662]
Simpson, W.: PPP in HDLC-like Framing. RFC-1662
Juli 1994
[RFC1332]
McGregor, G.: PPP Internet Protocol Control Protocol. RFC-1332
Mai 1992
[RFC1334]
Lloyd, B.; Simpson, W.: PPP Authentication Protocols. RFC-1334
Oktober 1992
Texas Instruments: MSP430x13x, MSP430x14x Mixed Signal
Microcontroller Datasheet. Texas Instruments Inc. Juli 2000
[MSP430DS]
[MSP430UG]
Texas Instruments: MSP430x1xx Family User’s Guide. Texas
Instruments Inc. August 2000
[LITELINK]
Clare/Ixys, CPC5620/CPC5621 LITELINK III Phone Line Interface IC
(DAA) Datasheet, Clare Inc. 2002
[LLEVAL]
Clare/Ixys, CPC5621-EVAL-RDL/CPC5621-EVAL-CDL LITELINK III
Evaluation-Board User’s Guide, Clare Inc. 2002
84
Literatur- und Quellenverzeichnis
[ATI]
Klaus Wiedorn, Analoges Telefon-Interface, Embedded Internet 2003
Handout Juni 2003
[ELECD]
Jeff Sorensen (TDK Semiconductor), Direct-Access Arrangements Are
Crucial To Successful Embedded-Modem Designs, Electronic Design
20.August 2001
Reynolds, J.; Postel, J.: Assigned Numbers. RFC-1700
Oktober 1994
[RFC1700]
85
Schaltplan und Bestückungsliste
B
Schaltplan und Bestückungsliste
86
Schaltplan und Bestückungsliste
87
Herunterladen