serial ports

Bevor wir Datenübertragung via "ppp-dialin" Leitungen besprechen können zuerst mal die Grundlagen:
Serielle Leitungen (auch RS232 oder V24 Schnittstellen genannt).

Eine der ältesten Schnittstellen zur Datenübertragung. Der Stecker hat entweder 24 oder 9 Pole. Es gibt eine Leitung auf der Daten gesendet werden: TxD (transmit data) und eine Leitung auf der Daten empfangen werden: RxD sowie eine Masse-Leitung als Referenzpotential.

(Das TxD auf der einen Seite muss mit RxD auf der anderen Seite verbunden werden und umgekehrt. Dazu benötigt man ein ausgekreuztes Kabel - manche Schnittstellen haben auch den Stecker schon intern ausgekreuzt dann benötigt man ein "gerades" Kabel auf dem die Leitungen 1:1 durchverbunden sind)

Damit kann man schon Daten hin und her senden. Die Daten werden Bit für Bit (seriell) übertragen, ohne ein zusätzliches Protokoll. Schliesst man am einen Ende ein Terminal Programm (oder falls man so etwas noch besitzt: ein echtes Hardware Terminal) an so sieht man direkt jedes Zeichen das ankommt.

Wie weiss jetzt die eine Seite ob die andere überhaupt bereit ist, noch Daten zu empfangen? Dazu gibt es 2 Arten von "Handshake":

"Software Handshake": Die Gegenstelle schickt ein bestimmtes Zeichen wenn sie keine Daten mehr empfangen kann "XOFF" bzw. wenn sie wieder bereit ist das Zeichen "XON".
Vorteil: man benötigt keine zusätzlichen Adern am seriellen Kabel als die Datenleitung (TxD/RxD). Nachteil: die Zeichen XON/XOFF dürfen ansonsten nicht im Datenstrom vorkommen.

"Hardware Handshake": es werden 2 extra Leitungen auf dem RS232 Kabel benutzt die Anzeigen ob die jeweilige Gegestelle bereit ist Daten zu empfangen: DTR/DSR RTS/CTS)
Vorteile/Nachteile genau umgekehrt zu "Software Handshake"


Langer Rede kurzer Sinn: Jede dieser seriellen Leitungen hat im Unix ein "device". Unter Linux: "/dev/ttyS0" , "/dev/ttyS1" , usw..

"/dev/ttyS0" entspricht dabei dem COM1 im DOS/Windows.

Wie diese Schnittelle in deinem Computer aussieht sagt dir das Programm "setserial":

setserial -b /dev/ttyS0

gibt dir die Daten der seriellen Schnittstelle S0 auf deinem Computer aus und würde es auch erlauben diese zu ändern (was normalerweise nicht notwendig ist).

Wir können z.B. mit "echo" direkt Daten auf den Port hinausschreiben:

echo blabla > /dev/ttyS0

hängt auf der anderen Seite vom Kabel ein Terminal so könenn wir das blabla dort lesen. Vorausgesetzt es passt alles, was stimmen muss
das ist vorallem:

* die Baudrate: (wie schnell die Daten übertragen werden: typisch z.B.: 9600 oder 19200 Baud. 1Baud ist hier 1Bit/Sekunde)

* das Kabel muss richtig durchverbunden sein. Also ausgekreuzt oder nicht je nachdem ob die Schnittstelle schon ausgekreuzt ist oder nicht.

* Hardware/Software Handshake

* Zahl der Bits (normalerweise verwendet man 8 )

Die Einstellungen des Terminals kann man z.B. mit dem Program "stty" verändern:

stty raw crtscts ispeed 9600 ospead 9600 -F /dev/ttyS0

würde den Port "/dev/ttyS0" auf "raw" schalten, "Hardware Handshake" einschalten (crtscts), und die Geschwindikgeit auf 9600 Baud stellen.

Direkt mit "echo" zu kommunizieren ist ein wenig mühsam. Meist verwendet man eher ein Terminal Programm, z.B. "minicom":

minicom

startet "minicom".

mit
control-a o kommt man in ein Optionen Menü wo man die Terminal Einstellungen ändern kann.

control-a q beendet "minicom" wieder.

Ansonsten werden alle Tasten eins zu eins an die Schnittstelle weitergegeben.

Wenn die Leitung z.B. mit einem anderen Computer verbunden ist dann kann man sich via serielle Schnittstelle am anderen Rechner einloggen..

Will man selbst am eigenen Rechner einen seriellen Port zu einer Konsole machen auf der man via serieller Leitung arbeiten kann, dann gibt man in sein file /etc/inittab folgende zeile:

T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

und danach:

telinit Q

Jetzt kann man von aussen auf den seriellen Port ttyS1 mit einem Terminal mit 9600 Baud zugreifen. (Hängt ein Modem an dem Rechner so sollte man statt "getty" den "mgetty" verwenden. Der kann auch das Modem abheben etc..) (Achtung: solange der "getty" auf der Leitung läuft kann man die Leitung nicht mit "minicom" oder ähnlichem benutzen da der "getty" den Port blockiert)

Hat man auf der seriellen Leitung ein Modem hängen so kann man mit "minicom" direkt mit dem Modem sprechen. Die meisten Modems sprechen den AT Befehlssatz:

tippt man

AT

oder

at

so antwortet das Modem mit:

OK

Die wichtigsten AT Befehle sind:

ATH1 ... hebt die Leitung ab (hängt das Modem am Telefon hört man dann das Freizeichen)

ATH0 ... legt auf

ATL1 oder

ATL2 stellt meist die Lauststärke ein.

ATDT1503;

... ruft die Nummer 1503 an (in Österreich die Zeitansage) (der Strichpunkt am Ende besagt, dass das Modem keine Datenverbindung aufbauen soll.. )

ATDT01404830

ruft die Wiener VBS Dialinnummer an. (Das T steht übrigens für Tonwahl. Ist man auf einem sehr alten Telefonanschluss benötigt man eventuell Pulswahl: P . Weiters muss man natürlich eventülle Vorwahlen zum rauswählen auf einer Telefonanlage berücksichtigen.)

ATA würde einen Datenanruf beantworten...

ATZ resetet das Modem

AT&F0 bringt es in die Firmen-Default-Konfiguration


Hat man via ATDT (oder via ATA) eine Datenverbindung aufgebaut, so meldet das Modem "CONNECT" und sagt eventuell die Geschwindigkeit. Danach ist man mehr oder weniger transparent mit der Gegenstelle verbunden. Ist auf der anderen seite ein "getty" am Werk so kann man schon einloggen.

Heute baut man über Modem-Verbindungen aber meist keine direkten Terminal-Verbindungen auf sonder man will ins Internet. Zu diesem Zweck fährt man auf der seriellen Leitung mit dem PPP Protokokoll. Das besagt wie man Internet-Pakete auf dieser seriellen Leitung transportieren soll.


EXERCISES:

* Sieh dir mit "setserial" die Einstellungen deiner seriellen Schnittstelle an.

* Wenn du 2 Computer hast, so versuche diese via RS232 Schnittstelle zu verbinden. Starte auf beiden seiten ein Terminal-Programm ("minicom" o.ä.).

* Versuche mit "stty" die Baudrate zu ändern und mit "echo" direkt auf den Port zu schreiben.

* Installiere einen "getty" und versuche mit einem Terminal darauf zuzugreifen. Danach deinstalliere den "getty" wieder

* Hänge ein Modem an den Port und spiele ein wenig mit den AT Befehlen.


REFERENCES:

man setserial

man minicom

man stty

man getty

Serial-HOWTO.txt