Professional Documents
Culture Documents
Serialcomm
Serialcomm
En korte inleiding op
seriële verbindingen
DUPACO B.V.
Olmenlaan 6
3833 AV LEUSDEN
033 - 94 88 88
Seriële communicatie
1. Inleiding
Dit artikel beschrijft de asynchrone seriële communicatie zoals die tot heden algemeen wordt gebruikt
tussen computers, terminals en printers.
Er zal daartoe worden ingegaan op de manier waarop deze apparatuur die communicatie tot stand brengt, en
er zal aandacht worden besteed aan de gangbare standaarden op dit gebied.
Dit document streeft geenszins volledigheid na, echter wél voldoende (technische) diepgang om effectief
bij te dragen aan een wat beter begrip in de complexe seriële communicatie.
3. Standaardisatie
Er zijn vele vormen van seriële communicatie. Van de eenvoud van een TV afstandsbediening via HP-IB
meetapparatuur besturing tot de complexiteit van inter-IC communicatie.
Eén bepaalde klasse is wel heel populair geworden: de communicatie tussen computers, terminals en
printers. Niet in de laatste plaats omdat in een vroeg stadium reeds standaard manieren zijn ontwikkeld om
deze typen apparatuur te koppelen.
Er zijn een aantal instanties bezig geweest met het standaardiseren van communicatie over seriële lijnen ten
behoeve van terminal en modem fabrikanten. Verschillende zijn uitgekomen met suggesties over hoe de de
communicatie moet verlopen. Dit is de oorzaak van veel verwarring over deze klasse van seriële
verbindingen. Tevens worden door verschillende fabrikanten de standaarden nogal eens "vrij"
geïnterpreteerd, hetgeen ook niet bijdraagt aan de duidelijkheid.
© DUPACO
2 $Revision: 1.5 $
Seriële communicatie
De standaarden zijn allen erg omvangrijk. Ze definiëren een zeer groot aantal aspecten van dit type
verbinding, waaronder testsignalen voor verschillende loop-back circuits in modems en kabels. Een
volledige uitleg zou in het kader van dit artikel te ver voeren.
Alle vet gedrukte signaal namen worden hieronder besproken en uitgelegd wat ze betekenen. De andere
signaal namen worden weinig gebruikt en zullen niet verder aan de orde komen. In 90 procent van de
gevallen kan volstaan worden met de vetgedrukte signaal namen.
Protective ground Dit signaal is verbonden met de aarde van de kast waarin de aansluiting zit. Deze
pen wordt verbonden met de afschermings mantel van de kabel, aan slechts één kant
(!). (Dit om aardlussen te voorkomen)
Signal ground Dit signaal heeft eigenlijk niets te maken met aarde (ground = (eng.) aarde). Deze
leiding doet dienst als gemeenschappelijk referentie punt voor alle signalen op de
interface.
Transmitted data (output) TxD is de uitgaande data lijn van DTE naar DCE. Deze lijn vervoert de
seriële data van de DTE (terminal) naar de DCE (modem).
Received data (input) RxD is de binnenkomende data lijn. Data van DCE naar DTE.
Data set ready (input) DSR gaat van de DCE (modem) naar de DTE (terminal) DSR geeft aan, dat
de DCE (modem) met het datacommunicatie kanaal verbonden is. DCE (modem) is
dan dus niet meer in spraak, kies of test mode. DSR geeft niet aan, dat er een
verbinding is met het andere station.
Data carrier detect (input) DCD gaat van DCE (modem) naar DTE (terminal). DCD geeft aan, dat de
draaggolf van het andere station ontvangen wordt. DCD geeft dus aan, dat de
verbinding tot stand is gebracht.
Data terminal ready (output) DTR gaat van DTE (terminal) naar DCE (modem). DTR geeft aan, dat de
DTE (terminal, computer) ingeschakeld is, en dat DTE goed functioneert. Met
andere woorden: DTR geeft aan, dat DTE klaar is om data zenden of te ontvangen.
Wanneer de DTE (terminal, computer) DTR inactief maakt, dan is dat voor de DCE
(modem) reden om de verbinding te verbreken.
Request to send (output) RTS gaat van DTE (terminal) naar DCE (modem). RTS wordt gebruikt om
het modem door de terminal in zend mode te laten zetten. Na het actief maken van
RTS moet er gewacht worden totdat de DCE (modem) de CTS actief maakt.
Clear to send (input) CTS gaat van DCE naar DTE. CTS geeft aan, dat de DCE (modem) gereed is
voor dataoverdracht. (Indien natuurlijk DSR en DCD ook actief zijn)
De standaarden gaan uit van de klassieke computer - terminal verbinding waarbij een modem wordt
gebruikt. De standaard zit zó in elkaar, dat tussen modem en terminal (of computer, ook een DTE) een
kabel gebruikt wordt, die alle benodigde pennen rechtstreeks met elkaar verbindt.
4. Seriële verbindingen
Na deze beschrijving van de definities van de seriële communicatie een aantal verbindingen. De alom
gevreesde problemen treden pas op, wanneer er connecties tussen apparatuur moeten worden gemaakt, die
niet precies in het kader van de standaard vallen.
© DUPACO
4 $Revision: 1.5 $
Seriële communicatie
TxD 2 2 TxD
RxD 3 3 RxD
RTS 4 4 RTS
CTS 5 5 CTS
DSR 6 6 DSR
GND 7 7 GND
DCD 8 8 DCD
DTR 20 20 DTR
Null-modems zijn in de vorm van kleine, handzame verloopconnectoren verkrijgbaar voor erg lage prijzen.
Deze zogenaamde "jumperboxen" nodigen steeds meer bedrijven uit, om nog maar één type kabel
configuratie te gebruiken, en voor alle speciale verbindingen een jumperbox. Zodoende onstaat er minder
verwarring kan over het gebruik van bepaalde kabels.
TxD 2 2 TxD
RxD 3 3 RxD
RTS 4 4 RTS
CTS 5 5 CTS
DSR 6 6 DSR
GND 7 7 GND
DCD 8 8 DCD
DTR 20 20 DTR
5. Handshaking
Handshaking is het Engelse woord voor "handenschudden". In de computertechniek wordt deze term
gebruikt om stuurcode uitwisseling aan te geven tussen twee apparaten. Eerder genoemd in dit verband is
de parallelle printer, die door middel van een strobe (of busy) signaal de computer aangaf, dat geen data
ontvangen kon worden.
Ook bij seriële communicatie is het mogelijk, dat een device (apparaat) sneller kan zenden dan dat het
andere apparaat kan verwerken. Het traagste device moet dan over een mechanisme beschikken, om de
snellere tegen te kunnen houden.
Er zijn twee manieren van handshaking:
— Software handshaking; synchronisatie door middel van het uitwisselen van een speciaal teken.
— Hardware handshaking; synchronisatie door middel van veranderen van signaal niveau’s.
© DUPACO
6 $Revision: 1.5 $
Seriële communicatie
Natuurlijk moet er wel iets worden gedaan om de computer te laten reageren op het RTS signaal. De
hardware methode is mede daardoor iets lastiger te implementeren. Derhalve zal in het onderstaande een
voorbeeld geheel worden uitgewerkt.
5.3.1 De HP-laserjet aan een Computone poort
Een voorbeeld van een printer met DTE interface gekoppeld aan een DCE is de combinatie van de door
Hewlett Packard gebouwde Laserjet laserprinters aan een door Computone gemaakte seriële poort (De
combinatie die ook gebruikt is voor het printen van dit artikel).
Deze verbinding werkt ogenschijnlijk direct; de signalen passen op elkaar; er is geen null-modem nodig. De
Laserjet werkt dan ook onmiddelijk. Dit artikel is geprint met behulp van troff, een typesetter voor UNIX®.
Eroff (de troff van Elan) laadt zelf soft-fonts voor de Laserjet. Die font files kunnen zeer omvangrijk zijn:
soms wel honderden kilobytes voor één lettertype. De font files zorgen hier voor een handshake probleem.
De Laserjet kan geen data ontvangen terwijl er wordt geprint; wanneer er een soft-font wordt geladen
tijdens het doorvoeren van een vel papier, is het zonder meer noodzakelijk dat de computer wordt
tegengehouden.
Wanneer de buffer van de Laserjet vol raakt kan, afhankelijk van de instelling, een Xoff karakter naar de
computer worden verstuurd, of het DTR signaal inactief worden gemaakt.
Nu lijkt het logischer daarvoor RTS (Request To Send) te gebruiken. HP heeft echter, net zoals vele andere
printer fabrikanten, gekozen de handshake te laten verlopen via het DTR (Data Terminal Ready) signaal.
Dat signaal was daar eigenlijk niet voor bedoeld; maar vele printer fabrikanten gebruiken het ervoor.
Eigenlijk zou DTR gebruikt moeten worden wanneer het papier of de inkt o.i.d. op zou zijn, het geeft dan
aan, dat de printer niet in staat is data te ontvangen, omdat de printer niet kan functioneren, hetgeen iets
anders is dan RTS, hetgeen aangeeft dat geen data ontvangen kan worden omdat het databuffer (tijdelijk!)
vol is.
De Computone poort trekt zich in de standaard situatie niets aan van de status van het RTS signaal. Dat
moet eerst "enabled" worden via de busyready optie in de ic_control file, of door de ctsflow rtsflow
stty settings in het lineprinter interface script op te nemen. Het is verstandig, de correcte werking eerst te
controleren door middel van een break-out box. Printer "tdlaser" is ter kantore van DUPACO gekoppeld aan
ttyi23 (32 poorten, door 2 AT16’s). In de navolgende voorbeelden wordt eveneens uitgegaan van ttyi23. De
verificatie verloopt als volgt: Door middel van het versturen van een grote file wordt ervoor gezorgd dat de
poort constant data verzendt. Dat kan door middel van het commando: cp /etc/termcap
/dev/ttyi23. Er moet natuurlijk een andere devicenaam worden opgeven wanneer de printer via een
andere poort gekoppeld is. De op de poort aangebrachte LED indicator box begint dan te knipperen, na een
paar minuten dooft het weer. Door nu in ic_control toe te voegen:
ttyi23:
#
## ttyi23
#
buffers:
receive%=20
communications:
baud=9600
stopbits=1
bits=8
parity=none
handshake=busyready
wordt het Computone board dusdanig geïnitialiseerd, dat alleen data verzonden kan worden indien RTS
actief is. Die initialisatie gebeurd door middel van het programma ic_init. Dat programma wordt
automatisch gestart wanneer de machine van single naar multi-user mode gaat. Het eenvoudigst is dus de
machine te "shutten" door middel van shutdown (of haltsys).
Als de cp /etc/termcap /dev/ttyi23 nu herhaald wordt dan mogen TxD of RxD op de LED box
niet gaan knipperen. Pas nadat CTS met RTS verbonden is (op de bij DUPACO gebruikte LED boxjes licht
de LED dan rood op) mag de TxD LED gaan knipperen. Direct nadat de verbinding weer is weggenomen,
moet de TxD LED weer groen worden, ten teken dat geen data meer gezonden wordt.
De volgende stap is het koppelen van de Laserjet aan de Computone poort. Daartoe moet een speciale
verbinding worden gemaakt, de laserprinter gebruikt immers DTR voor de handshake lijn. Nu is het
mogelijk, een speciale kabel daartoe te maken, waarbij pin 20 van de printer aan pin 4 van het computone
poort verbonden (naast, natuurlijk, alle andere verbindingen).
Een betere oplossing is een apart verloopstekkertje, waarin de speciale verbinding wordt gesoldeerd, en
voorts alleen nog rechte seriële kabels. Het geeft de mogelijkheid de configuratie op het boxje te tekenen,
waardoor nooit meer onduidelijkheden behoeven te onstaan. Deze "mini patch" boxes zijn algemeen
verkrijgbaar bij de computeronderdelen handelaar, waarmee zelf een willekeurige verbinding kan worden
gerealiseerd.
De configuratie kan het best symmetrisch worden gemaakt, zodat het niet uitmaakt aan welke kant de
printer komt te zitten. De volledige configuratie is in de figuur weergegeven.
TxD 2 2 TxD
RxD 3 3 RxD
RTS 4 4 RTS
CTS 5 5 CTS
DSR 6 6 DSR
GND 7 7 GND
DCD 8 8 DCD
DTR 20 20 DTR
Vervolgens moet de printer op DTR handshake worden gezet, dit geschied door middel van het setup menu
(de methode verschilt per printer). Door nu een LED boxje aan te sluiten kan worden gecontroleerd of de
DTR-RTS omzetting functioneert: Door de "on-line" knop in te drukken moet RTS van rood in groen
veranderen (met andere woorden: inactief worden). En vice versa, uiteraard.
De volgende stap is het koppelen. Bij het verzenden van een file (nog steeds met cp /etc/termcap
/dev/ttyi23) moet nu af en toe, wanneer de printer een vel papier doorvoert, de seriële verbinding stil
komen te liggen doordat RTS inactief wordt. Wanneer cp wordt gebruikt, moet de hardware handshake zijn
enabled in /etc/ic_control. In het geval dat het stty commando in het printer interface script van
ctsflow rtsflow wordt voorzien, moet de line printer spooler worden gebruikt voor deze test (Het
commando is dan: lpr /etc/termcap).
5.3.2 Line printer spooler interfaces op UNIX en XENIX
In het voorgaande is meerdere malen een line printer interface ter sprake gekomen. Een line printer
interface is een shell script, welke de allerlaatste stap vormt in de programmatuur die een printerjob naar de
printer stuurt. Het line printer systeem zit (globaal) als volgt in elkaar: wanneer het commando lp (of het
alias lpr) wordt gebruikt, dan wordt de printer data in een wachtrij gezet totdat de betreffende printer klaar
is om de job in behandeling te nemen.
Dit mechanisme is nodig, omdat op een multi-user systeem de gebruikers niet van elkaar (kunnen) weten,
of de printer die ze willen gebruiken vrij is. Derhalve neemt het operating system (of liever: het line printer
spooling system) de job altijd aan, maar voert die pas uit wanneer de betreffende printer vrij is. Het systeem
werkt volgens het "wie het het eerst komt, het eerst maalt" principe.
© DUPACO
8 $Revision: 1.5 $
Seriële communicatie
Wanneer een printer job eenmaal aan de beurt is, dat wordt de data niet zomaar naar de printer poort
gestuurd, maar eerst door een interface programma geleid. Dat programma is dan verantwoordelijk voor het
aansturen van een sheetfeeder, of het manipuleren van het communicatie kanaal. De printerdata van de job
wordt tijdelijk bewaard in een file op de harddisk, in de directory /usr/spool/lp/request (tenzij
anders aangegeven bij het starten van de opdracht).
Het interface programma, dat meestal bestaat uit een shell script, krijgt zes argumenten. Die zijn:
id De id is het volgnummer waaronder de printerjob in het print systeem bekend is.
user De login-naam van de gebruiker die de print opdracht gaf.
title De eventuele titel (wanneer die is meegegeven door de gebruiker).
copies Het aantal exemplaren dat moet worden afgedrukt.
options Alle extra, met de -o vlag meegegeven, opties. Deze kunnen per printer interface nogal
uiteenlopen.
file De volledige naam van de file, waarin de printerdata zich bevindt.
De standard input (de "file", waar de input van het programma uit wordt gehaald), is /dev/null. Een
eventuele leesactie van het interface script zal dus niets opleveren. De standard error wordt opgevangen in
een file, die per electronische post (mail) naar de gebruiker wordt gezonden. De standard out gaat naar het
device.
In de interface bevindt zich meestal een stty commando, dat de communicatie parameters van de printer
poort kan zetten. Daar is het mogelijk, de baudrate te zetten, en de handshake methode te kiezen. Met
behulp van een normale editor kan deze file eenvoudig worden aangepast (zie boven).
De locatie van het interface script is verschillend:
XENIX /usr/spool/lp/interface
UNIX /usr/spool/lp/admins/lp/interfaces.
De files moeten lees- en executeerbaar zijn voor de gebruiker "lp". Meestal is het overnemen van de
permissies van de andere files in de directory het zekerst. Soms is het voor de andere (niet-
systeembeheerder-) gebruikers handig dat de interfaces leesbaar zijn. Wanneer er geen beveiligingsgevaren
aan kleven kan lees permissie voor allen worden gegeven.
Inhoudsopgave
1. Inleiding ............................................................................................................................................... 2
2. Inleiding seriële communicatie ............................................................................................................ 2
3. Standaardisatie ..................................................................................................................................... 2
3.1 EIA en CCITT .............................................................................................................................. 3
3.2 Overzicht V.24 en RS232C ........................................................................................................... 3
4. Seriële verbindingen ............................................................................................................................ 4
4.1 Een DTE - DTE verbinding .......................................................................................................... 4
4.2 Een DCE - DCE verbinding ......................................................................................................... 5
4.3 De meest eenvoudige verbinding .................................................................................................. 5
5. Handshaking ........................................................................................................................................ 5
5.1 Software handshake ...................................................................................................................... 6
5.2 Hardware handshake ..................................................................................................................... 6
5.3 Een printer aan een DCE .............................................................................................................. 6
5.3.1 De HP-laserjet aan een Computone poort .......................................................................... 7
5.3.2 Line printer spooler interfaces op UNIX en XENIX .......................................................... 8