9.4.5 Andere serielle Schnittstellen – RS422, RS423, RS485, TTY Für längere Kabelverbindungen bis zu mehreren km und störungssicherere Daten-verbindungen, als sie die RS232-Schnittstelle
Trang 1Programmlisting: Serial Bit
program Serial_Bit;
const
COM1 = $3F8;{Basisadressen, maximal 4 serielle Schnittstellen}
COM2 = $2F8;
COM3 = $3E8;
COM4 = $2E8;
COM=COM2; Benutzte Schnittstelle(COM1 COM4) hier festlegen}
Modem_Ctrl=COM+4; {Modem-Control-Register}
Modem_Status=COM+6;{Modem-Statusregister}
{*************************************************************}
procedure write_bit_RTS(bit:boolean);
{Setzt die RTS-Leitung auf 1 oder 0}
begin
if bit then port[Modem_Ctrl]:=port[Modem_Ctrl] or 2
{1 senden}
else port[Modem_Ctrl]:=port[Modem_Ctrl] and $FD; {0 senden}
end; {write_bit_RTS}
{*************************************************************}
function read_bit_CTS:boolean; {Liest Bit von der CTS-Leitung}
var bit:boolean;
begin
if (port[Modem_Status] and 16)>0 then bit:=true else bit:=false;
read_bit_CTS:=bit;
end; {read_bit_CTS}
{*************************************************************}
var Bit:boolean;
begin {Beispiel-Hauptprogramm}
{Nicht vergessen: verwendeten COM-Port oben in der Konstante
COM einstellen!}
write_bit_RTS(true); {Setzt RTS-Leitung auf 1}
write_bit_RTS(false); {Setzt RTS-Leitung auf 0}
Bit:=read_bit_CTS; {Liest CTS-Leitung}
write(‘Zustand der CTS-Leitung: ‘);
if Bit then writeln(‘1’) else write(‘0’);
Trang 2Programmlisting: Serial Byte
program Serial_Byte;
const
COM1 = $3F8; {Basisadressen, maximal 4 serielle Schnittstellen} COM2 = $2F8;
COM3 = $3E8;
COM4 = $2E8;
COM=COM2;{Benutzte Schnittstelle (COM1 COM4) hier einstellen} Oszillatorfrequenz=1843200; {Oszillatorfrequenz in Hertz} int_enable=COM+1; {Interrupt-Enable-Register}
FIFO_Ctrl=COM+2; {FIFO-Buffer-Control-Register}
Line_Ctrl=COM+3; {Line-Control-Register}
Line_Status=COM+5; {Line-Statusregister}
{*************************************************************} function hbyte(Zahl:word):byte;
{Gibt das High-Byte der Zahl zurueck} var erg: byte;
begin
Zahl:=Zahl shr 8;
{High-Byte (obere 8 Bits) in Low-Byte schieben} hbyte:=Zahl;
{verschobenes High-Byte als Ergebnis zurueckgeben} end;
{*************************************************************} function lbyte(Zahl:word):byte;
{Gibt das Low-Byte der Zahl zurueck} var erg : byte;
begin
Zahl:=Zahl and $00ff; {High-Byte loeschen}
lbyte:=Zahl;
{verbleibendes Low-Byte als Ergebnis zurueckgeben} end;
{*************************************************************}
Trang 3procedure Baudrate_einstellen(Baudrate:longint);
var
Wert : byte;
Teilwert : word;
begin
if Baudrate<4 then begin
writeln(‘Baudrate ‘,Baudrate,’ ist zu klein!’);
exit; {Prozedur wegen falscher Baudrate beenden}
end;
Wert:=port[Line_Ctrl]; {Line-Control-Register lesen}
Wert:=Wert or $80; {Bit 7 (Divisor Latch Bit) setzen}
port[Line_Ctrl]:=Wert;
{ und wieder in Line-Control-Register schreiben}
Teilwert:=Oszillatorfrequenz div (16*Baudrate);
port[COM] :=lbyte(Teilwert);
{niederwertiges Byte schreiben}
port[COM+1]:=hbyte(Teilwert);
{hoeherwertiges Byte schreiben}
Wert:=port[Line_Ctrl]; {Line-Control-Register lesen}
Wert:=Wert and $7F; {Bit 7 (Divisor Latch Bit) loeschen}
port[Line_Ctrl]:=Wert;
{ und wieder in Line-Control-Register schreiben}
end; {Baudrate_einstellen}
{*************************************************************}
procedure init(Datenbits:byte; Stoppbits:boolean; Parity:boolean;
even_Parity:boolean; Sticky_Parity:boolean);
{Datenbits:Anzahl Datenbits, 5 8 moeglich}
{Stoppbits:Anzahl Stoppbits, false:1 Stoppbit,true:2 Stoppbits}
{beim 16550 bei 5 Datenbits: true: 1.5 Stoppbits}
{Parity: Paritaetsbit einschalten}
{even_Parity: true: gerade Paritaet, false: ungerade Paritaet}
{Sticky_Parity: true: Paritaetsbit low-aktiv (?)}
var Wert:byte;
Trang 4port[int_enable]:=0;
{Interrupts abschalten, d.h der UART soll keine Interrupts generieren} port[FIFO_ctrl]:=0;
{FIFO-Buffer (wenn vorhanden) ausschalten}
if Datenbits>8 then Datenbits:=8;
{maximal 8 Datenbits moeglich}
{Jetzt Wert fuer Line-Control-Register berechnen:}
Wert:=Datenbits-5; {Bits 0,1: Anzahl der Datenbits-5}
if Stoppbits then Wert:=(Wert or 4);
{Bit 2: Anzahl Stoppbits (s.o.)}
if Parity then Wert:=(Wert or 8);
{Bit 3: Parity einschalten}
if even_Parity then Wert:=(Wert or 16);
{Bit 4: 1:even Parity, 0:odd P.}
if Sticky_Parity then Wert:=(Wert or 32);
{Bit 5: Sticky-Parity-Bit (s.o.)}
{Bit 6: Break-Bit, unterbricht Verbindung}
{Bit 7: Divisor-Latch-Bit, nur gleich 1 fuer Einstellung der Baudrate(s Prozedur Baudrate_einstellen)}
port[Line_Ctrl]:=Wert;
{Wert in Line-Control-Register schreiben}
end;
{*************************************************************************} procedure write_byte(Wert : byte);
{Sendet Byte ueber die TD-Leitung (Transmit Data) mit der eingestellten Baudrate und den Einstellungen von Prozedur init}
var
Send_buffer_empty : byte;
begin
repeat {Warten, bis Datenbyte gesendet werden kann:}
Send_buffer_empty:=port[Line_Status] and 32;
until Send_buffer_empty>0;
port[COM]:=Wert; {Datenbyte senden}
end; {write_byte}
{*************************************************************************}
Trang 5function read_byte : byte;
{Empfaengt Byte ueber die RD-Leitung (Receive Data)mit der eingestellten Baudrate und den Einstellungen der Prozedur init}
var
Data_in_receiver : byte;
begin
repeat {Warten, bis Datenbyte vorhanden:}
Data_in_receiver:=port[Line_Status] and 1;
until Data_in_receiver>0;
read_byte:=port[COM]; {Datenbyte lesen}
end; {read_byte}
{*************************************************************************} {Nicht vergessen: verwendeten COM-Port oben in der Konstante COM festlegen und Oszillatorfrequenz der Schnittstelle oben in der Konstante Oszillator-frequenz einstellen, denn dort steht jetzt ein Standardwert)}
begin {Beispiel-Hauptprogramm}
init(8,false,false,false,false);
{8 Datenbits, 1 Stoppbit, kein Parity}
Baudrate_einstellen(115200); {115200 Baud einstellen}
write_byte(67); {als Beispiel Zahl 67 ausgeben}
end
9.4.5 Andere serielle Schnittstellen – RS422, RS423,
RS485, TTY
Für längere Kabelverbindungen (bis zu mehreren km) und störungssicherere Daten-verbindungen, als sie die RS232-Schnittstelle bietet, werden verschiedene andere serielle Schnittstellen eingesetzt, für die es entsprechende Einsteckkarten gibt Diese Karten sind jedoch meist nicht im typischen PC-Handel zu erwerben, sondern meist bei Firmen, die sich mit der Industrieautomatisierung und/oder der PC-Mess-technik beschäftigen Die folgende Tabelle zeigt ein paar Beispiele
In diesem Zusammenhang ist es besonders wichtig, daran zu denken, ob von den Herstellern auch entsprechende (Treiber-)Programme für die beabsichtigte Anwen-dung geliefert werden, falls man nicht selbst programmieren möchte Oft ist es jedoch auch möglich, diese spezielleren Schnittstellenkarten programmtechnisch wie eine Standard-RS232-Schnittstelle anzusteuern Es werden dann automatisch die entsprechenden Adressen und Interrupts verwendet, wie sie für die RS232-Schnittstelle gelten
Trang 6Typ Bus Schnittstellen Besonderheiten Hersteller
konfigurierbar
PCL-745 PC 2 * RS422/RS485 galvanische Trennung Spectra
Tabelle 9.15: Einsteckkarten für optionale serielle PC-Schnittstellen
Die RS422-Schnittstelle
Die Spezifikation EIA-RS422-A aus dem Jahre 1975 definiert eine symmetrische Schnittstelle Sie weist ein verbessertes Störverhalten gegenüber RS232 auf, da hier mit Differenz- statt mit asymmetrischen (auf Masse bezogenen) Spannungen gearbeitet wird, was im Kapitel über den SCSI-Bus genauer erläutert ist
Die maximale Übertragungsgeschwindigkeit ist mit 10 Mbit/s (RS232: 20 000 Bit/s) festgelegt und es können Systeme mit bis zu 10 Empfängern (Simplex) aufgebaut werden Eine typische Anwendung ist die Datenübertragung von einem Computer zu mehreren Peripherie-Einheiten wie beispielsweise verteilten Messsystemen
Die RS423-Schnittstelle
Eine einfachere Ausführung der RS422-A-Schnittstelle stellt die RS423-A-Schnitt-stelle dar Sie ist im Prinzip mit RS422 identisch, mit dem wichtigen Unterschied allerdings, dass sie wie die RS232-Schnittstelle asymmetrisch ausgeführt ist, je-doch mit einer Übertragungsgeschwindigkeit von bis zu 100 Kbit/s arbeiten kann Die Treiber- und Empfängerbausteine müssen hierfür explizit ausgelegt worden sein
Trang 7Die RS485-Schnittstelle
Die bisher erläuterten seriellen Schnittstellen erlauben lediglich einen Sender pro Schnittstellensystem In EIA-RS485-A aus dem Jahre 1983, einer Erweiterung der RS422-A-Schnittstelle, sind die elektrischen Eigenschaften einer busfähigen bidirektionalen Schnittstelle festgelegt
Bild 9.38: Der beispielhafte Aufbau einer RS485-Übertragungsstrecke
Mit Hilfe dieser Schnittstelle lassen sich bis zu 32 Teilnehmer verbinden, die so-wohl als Sender als auch als Empfänger arbeiten können (Half Duplex) Die Realisie-rung von Mini-LANs, beispielsweise zwischen einem Zentral-Computer und diversen Kassensystemen, wie sie in Supermärkten zu finden sind, ist eine typische Anwen-dung Des Weiteren ist die RS485-Schnittstelle in der Industrieautomatisierung besonders verbreitet und wird als Interface für verschiedene Feldbussysteme einge-setzt
Die TTY-Schnittstelle
Eine der ältesten seriellen Schnittstellen, die ursprünglich für die Ansteuerung
mechanischer Fernschreiber (TeleTYpe) konzipiert wurde und der Schnittstelle
da-mit auch ihren Namen gab, ist die TTY-Schnittstelle Sie wird auch als Linienstrom-oder 20-mA-Schnittstelle bezeichnet und häufig dort eingesetzt, wo eine Potential-trennung der zu koppelnden Geräte notwendig ist, wie etwa in der
Medizintech-nik Vielfach wird sie auch zur Steuerung einer
Trang 8Speicher-Programmierbaren-Steue-Bild 9.39: Die Kopplung zweier DEEs (Computer) über die TTY-Schnittstelle
Die in den Fernschreibern enthaltenen Hubmagnete (Relais) werden direkt über die Stromschleifen angesteuert Eine Stromschleife versorgt den »Empfangsmagneten«, die andere den »Sendemagneten« Dabei erfolgt die Speisung der Schleifen in der Regel allein von dem aktiven Gerät der Datenstrecke aus, wobei der Fernschreiber als passiv zu verstehen ist Diese Form der TTY-Schnittstelle ist mittlerweile veral-tet und auch nicht zur Kopplung zweier aktiver Geräte (DEE-DEE) geeignet Daher werden statt der Relais Optokoppler verwendet, wie es im Bild 9.39 gezeigt ist
Übertragungsart asymmetrisch asymmetrisch symmetrisch symmetrisch
Trang 9Fortsetzung der Tabelle
Empfänger
Pegelzuordnung
Sender
Tabelle 9.16: Die wichtigsten seriellen Schnittstellen im Vergleich
Trang 1110 Bussysteme
Ein Bussystem stellt allgemein die Verbindung zwischen verschiedenen Komponen-ten oder Teilnehmern dar Je nach Einsatzgebiet und Anwendung kann es die un-terschiedlichsten Funktionen erfüllen und besitzt dementsprechend eine individu-elle Architektur, so dass beispielsweise die Verbindungen innerhalb eines Mikro-prozessors oder auch die Verbindungen von industriellen Steuerungen (SPS) als
Bus bezeichnet werden können In diesem Zusammenhang sind jedoch nur
diejeni-gen Bussysteme von Belang, die in einem PC zur Anbindung von Peripherie, sei es auf einer Einsteckkarte (z.B ISA, PCI) oder als externes Gerät (z.B USB), zum Einsatz kommen.
10.1 PC-Bussystemübersicht
Für die Verbindung der PC-Einsteckkarten mit der Mainboard-Elektronik sind je nach PC-Typ verschiedene Steckplätze (Slots) auf dem Mainboard vorgesehen, die die Signale des jeweiligen Bussystems führen Mit dem ursprünglichen Original-PC der Firma IBM wurde der 8 Bit breite PC-Bus eingeführt, der später um Signale für
den 16-Bit-Betrieb erweitert wurde und unter der Bezeichnung ISA-Bus (Industry Standard Architecture) firmiert.
Die Firma IBM integrierte ab ihrer PS/2-Familie ein leistungsfähigeres Bussystem,
das als MicroChannel bezeichnet wird Es entstand aus der Notwendigkeit heraus,
für die 32-Bit-Prozessoren (ab 386-CPU) eine entsprechend leistungsfähige Schnitt-stelle zu schaffen und Funktionen wie Multitasking und Busarbitrierung zur Verfü-gung stellen zu können IBM wollte zudem mit der MCA (Micro Channel Architecture) einen neuen Standard schaffen, um sich nicht weiter mit der Konkurrenz auf dem umkämpften ISA-Bus-Markt auseinandersetzen zu müssen und um damit wieder eine Vormachtstellung auf dem PC-Sektor einnehmen zu können, denn für MicroChannel-PCs sind entsprechende Lizenzgebühren an IBM zu zahlen
Der MicroChannel und die dazugehörige Hardware auf dem Mainboard sind gänz-lich anders aufgebaut als bei einem ISA-System, so dass die »alten« Karten nicht mehr in einem MCA-PC verwendet werden können Dies war sicher auch einer der Gründe, warum sich die Computer laut MCA nicht am Massenmarkt durchsetzen konnten
Gleichwohl haben einige der hier erstmalig zu findenden Errungenschaften wie die PS/2-Maus, die PS/2-SIMMs, die Integration von Peripherie-Bauelementen, die bis dato über Einsteckkarten – wie beispielsweise die Schnittstellen – hinzuzufügen waren, und die automatische Konfigurierung (Plug&Play) andere Architekturen wie EISA und PCI maßgeblich beeinflusst Nicht nur PCs, sondern beispielsweise auch Workstations (z.B RS/6000) der Firma IBM verwenden den MicroChannel (noch) als Bussystem
Trang 12Bild 10.1: Zum Vergleich: Oben eine MC-Karte, in der Mitte eine EKarte und unten eine
ISA-Karte
Von einem Firmenkonsortium (z.B Compaq, HP, NEC) wurde ein als Konkurrenz zum MicroChannel vorgesehenes 32-Bit-Konzept definiert, das zwar eine ähnliche Leistung wie der MC bietet, dennoch nicht mit dem ISA-Standard bricht Dieses
System hat in Anlehnung an ISA die Bezeichnung EISA (Extended Industry Stan-dard Architecture), was gleich signalisiert, dass es sich dabei nicht um eine völlig
neue Busarchitektur handelt, sondern dass es sich bei EISA vielmehr um eine Er-weiterung des ISA-Bus handelt
Die Konfigurierung eines EISA-Systems erfolgt nicht durch zahlreiche DIP-Schalter, mit denen den einzelnen Einheiten Adressen, Interrupt- und DMA-Kanäle zugeord-net werden, sondern per Software mit Hilfe von Konfigurationsdateien, die zu jeder EISA-Einsteckkarte gehören, und einer EISA-Configuration-Utility (ECU), die
zu jedem EISA-Mainboard mitgeliefert wird Die MCA verfährt auf eine ähnliche Art
und Weise, nur nennen sich hier die entsprechenden Konfigurationsdaten Adapter
Definitions Files (ADF).
Trang 13Der Bustakt beträgt bei EISA wie bei einem ISA-Sytem 8,33 MHz Die gegenüber ISA höhere Datenübertragungsrate (33 Mbyte/s = 8,33 MHz x 4 Byte) ergibt sich durch die Busbreite von 32 Bit und nicht etwa durch einen höheren Bustakt, denn damit würden die alten ISA-Karten, die sich auch in einem EISA-Steckplatz (da abwärts-kompatibel) betreiben lassen, nicht mehr funktionieren
Weder EISA noch dem MicroChannel ist es jedoch gelungen, die ISA-Systeme vom PC-Massenmarkt zu verdrängen Sie haben den alten Standard nicht ersetzen kön-nen, zumal derartige PCs auch wesentlich teurer waren als PCs auf der Basis von ISA Andererseits musste ein schnelleres, aber preisgünstiges 32-Bit-Bussystem her, das insbesondere für die Anbindung von Grafikkarten notwendig ist
Bei den Erläuterungen in den Kapitel 6 und 7 wurde des Öfteren der lokale Bus (Local Bus) erwähnt, der in einem System mit mindestens einer 386-CPU über eine Datenbreite von 32 Bit verfügt, mit dem CPU-Takt betrieben wird und der Kommu-nikation zwischen der CPU mit dem Speicher (DRAM, Cache) dient Aufgrund der hier gegenüber ISA und EISA höheren möglichen Datenübertragungsraten erschien eine derartige Verbindung insbesondere für Grafikkarten gut geeignet, die somit für einen möglichst verzögerungsfreien Bildaufbau sorgen können
Eine Reihe von Herstellern wie Orchid, Mylex, Elite und Dell haben daher auf Grafik-karten und Mainboards einen speziellen Local-Bus-Anschluss vorgesehen, der dem-entsprechend auch im Form eines speziellen Slots auf dem Mainboard unterstützt werden muss Leider existieren hierfür die unterschiedlichsten herstellerspezifischen Lösungen, so dass sich kein allgemein verbindlicher Standard ergeben hat
Aus diesem Grunde hat die VESA (Video Engineering Standards Association) – eine
Vereinigung von Firmen, die sich mit der Entwicklung von Hard- und Software für
Grafiksysteme im weiteren Sinne beschäftigt – den VLB (VESA Local Bus)
defi-niert