FreeBSD handboek
Terug | Hoofdstuk 27. Seriële communicatie | Volgende

# 27.2. Inleiding

> WaarschuwingVanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van `/dev/cuad`N`` naar `/dev/cuau`N`` en van `/dev/ttyd`N`` naar `/dev/ttyu`N``. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.

## 27.2.1. Terminologie

bps

  Bits per seconde: de snelheid waarmee gegevens verstuurd worden

DTE

  Data Terminal Equipment (apparatuur voor gegevensterminal): bijvoorbeeld een computer

DCE

  Data Communications Equipment (apparatuur voor gegevenscommunicatie): een modem

RS-232

  EIA standaard voor hardwarematige seriële communicatie

Deze sectie gebruikt niet de term baud als er over snelheden van gegevenscommunicatie gesproken wordt. Baud verwijst naar het aantal elektrische toestandsovergangen dat binnen een tijdsperiode gemaakt mag worden, bps (bits per seconde) is de correcte term om te gebruiken (de oude mopperkonten schijnen zich er niet erg druk over te maken).

## 27.2.2. Kabels en poorten

Om een modem of terminal met een FreeBSD-systeem te verbinden, dienen een seriële poort op een computer en een kabel om verbinding te maken met een serieel apparaat aanwezig te zijn. Indien kennis over hardware en de benodigde kabel reeds aanwezig is, kan deze sectie veilig worden overgeslagen.

### 27.2.2.1. Kabels

Er zijn verschillende soorten seriële kabels. De twee meest voorkomende types in deze context zijn nulmodem-kabels en standaard (rechte) RS-232-kabels. De documentatie van de hardware beschrijft het type kabel dat nodig is.

#### 27.2.2.1.1. Nulmodem-kabels

Een nulmodem-kabel geeft sommige signalen, zoals Aardesignaal recht door, maar kruist andere signalen. Bijvoorbeeld, de Verzonden Gegevens-pin aan de ene kant gaat naar de Ontvangen Gegevens-pin aan de andere kant.

Een nulmodem-kabel voor het gebruik met terminals kan ook zelf worden gemaakt (bijvoorbeeld voor kwaliteitsdoeleinden). Deze tabel toont de RS-232C signalen en de pinnummers op een DB-25-aansluiting. De standaard vereist ook een Aardebescherming rechte lijn van pin 1 naar pin 1, maar deze wordt vaak weggelaten. Sommige terminals werken goed met slechts pin 2, 3 en 7, terwijl andere instellingen eisen die afwijken van die in de onderstaande voorbeelden.

Tabel 27-1. DB-25 naar DB-25 nulmodem-kabel

Signaal | Pin # |  | Pin # | Signaal
--- | --- | --- | --- | ---
SG | 7 | verbonden met | 7 | SG
TD | 2 | verbonden met | 3 | RD
RD | 3 | verbonden met | 2 | TD
RTS | 4 | verbonden met | 5 | CTS
CTS | 5 | verbonden met | 4 | RTS
DTR | 20 | verbonden met | 6 | DSR
DTR | 20 | verbonden met | 8 | DCD

In de onderstaande tabellen volgen twee schema's die momenteel meer gebruikelijk zijn:

Tabel 27-2. DB-9 naar DB-9 nulmodem-kabel

Signaal | Pin # |  | Pin # | Signaal
--- | --- | --- | --- | ---
RD | 2 | verbonden met | 3 | TD
TD | 3 | verbonden met | 2 | RD
DTR | 4 | verbonden met | 6 | DSR
DTR | 4 | verbonden met | 1 | DCD
SG | 5 | verbonden met | 5 | SG
DSR | 6 | verbonden met | 4 | DTR
DCD | 1 | verbonden met | 4 | DTR
RTS | 7 | verbonden met | 8 | CTS
CTS | 8 | verbonden met | 7 | RTS

Tabel 27-3. DB-9 naar DB-25 nulmodem-kabel

Signaal | Pin # |  | Pin # | Signaal
--- | --- | --- | --- | ---
RD | 2 | verbonden met | 2 | TD
TD | 3 | verbonden met | 3 | RD
DTR | 4 | verbonden met | 6 | DSR
DTR | 4 | verbonden met | 8 | DCD
SG | 5 | verbonden met | 7 | SG
DSR | 6 | verbonden met | 20 | DTR
DCD | 1 | verbonden met | 20 | DTR
RTS | 7 | verbonden met | 5 | CTS
CTS | 8 | verbonden met | 4 | RTS

> Opmerking: Als een pin aan het ene eind verbonden is met een pinnenpaar aan het andere eind, is dit meestal geïmplementeerd met een korte draad tussen het pinnenpaar in de stekker en een lange draad naar de andere, enkele pin.

Bovenstaande ontwerpen lijken het populairst. In een andere variatie (uitgelegd in het boek RS-232 Made Easy) worden de volgende verbindingen gemaakt: SG met SG, TD met RD, RTS en CTS met DCD, DTR met DSR en vice-versa.

#### 27.2.2.1.2. Standaard RS-232C-kabels

Een standaard seriële kabel laat alle RS-232C-signalen recht door. Dit betekent dat de Verzonden Gegevens-pin aan de ene kant naar de Verzonden Gegevens-pin aan de andere kant gaat. Dit type kabel wordt gebruikt om een modem met een FreeBSD-systeem te verbinden en is ook geschikt voor sommige terminals.

### 27.2.2.2. Poorten

Seriële poorten zijn apparaten die gebruikt worden om gegevens te versturen tussen een FreeBSD gastcomputer en een terminal. Deze sectie beschrijft de bestaande soorten poorten en hoe deze aangesproken worden in FreeBSD.

#### 27.2.2.2.1. Soorten poorten

Er bestaan verschillende soorten seriële poorten. Controleer of een kabel past op de poorten van een terminal en een FreeBSD-systeem alvorens deze te kopen of te maken.

De meeste terminals hebben DB-25-poorten. PC's, inclusief PC's die FreeBSD draaien, hebben DB-25- of DB-9-poorten. Indien een meerpoortige seriële kaart voor een PC beschikbaar is, kan het zijn dat er RJ-12- of RJ-45-poorten aanwezig zijn.

In documentatie die bij hardware zit, staan specificaties over het soort poort dat gebruikt wordt. Vaak volstaat ook een visuele inspectie van een poort.

#### 27.2.2.2.2. Poortnamen

In FreeBSD wordt elke seriële poort benaderd door een ingang in de map `/dev`. Er zijn twee verschillende soorten ingangen:

- Inbelpoorten heten `/dev/ttyu`N`` waarbij `N` het poortnummer is, beginnend met nul. In het algemeen kunnen inbelpoorten voor terminals gebruikt worden. Inbelpoorten stellen de eis dat een seriële kabel ervoor zorgt dat het data carrier detect (DCD) signaal correct werkt.

- Uitbelpoorten heten `/dev/cuau`N``. In het algemeen worden uitbelpoorten niet voor terminals maar voor modems gebruikt. Gebruik een uitbelpoort als een seriële kabel of terminal het carrier detect-signaal niet ondersteunt.

Als er een terminal met de eerste seriële poort (`COM1` in MS-DOS®) verbonden is, wordt `/dev/ttyu0` gebruikt om naar de terminal te verwijzen. Als een terminal op de tweede seriële poort is aangesloten (ook bekend als `COM2`), dient `/dev/ttyu1` gebruikt te worden, enzovoort.

## 27.2.3. Kernelinstellingen

FreeBSD ondersteunt standaard vier seriële poorten. In de wereld van MS-DOS staan ze bekend als `COM1`, `COM2`, `COM3` en `COM4`. FreeBSD ondersteunt momenteel domme meerpoortige seriële interfacekaarten, zoals de BocaBoard 1008 en 2016, alsook intelligentere meerpoortige kaarten van fabrikanten als Digiboard en Stallion Technologies. De kernel kijkt echter alleen naar de standaard COM-poorten.

Bekijk de boodschappen tijdens het opstarten van de kernel om te zien of de kernel seriële poorten herkent of gebruik het commando `/sbin/dmesg` om de opstartboodschappen van de kernel te herhalen. Kijk in het bijzonder naar boodschappen die met de tekens `sio` beginnen.

> Tip: Gebruik het volgende commando om alleen de boodschappen die het woord `sio` bevatten te zien:

>     # /sbin/dmesg | grep 'sio'

Voor bijvoorbeeld een systeem met vier seriële poorten, zijn dit de opstartboodschappen van de kernel die specifiek zijn voor de seriële poorten:

    sio0 at 0x3f8-0x3ff irq 4 on isa
    sio0: type 16550A
    sio1 at 0x2f8-0x2ff irq 3 on isa
    sio1: type 16550A
    sio2 at 0x3e8-0x3ef irq 5 on isa
    sio2: type 16550A
    sio3 at 0x2e8-0x2ef irq 9 on isa
    sio3: type 16550A

Als een kernel niet alle seriële poorten herkent, dan dient waarschijnlijk de kernel aangepast te worden in het bestand `/boot/device.hints`. Het is ook mogelijk regels uit te schakelen of volledig te verwijderen voor apparaten die niet aanwezig zijn.

Zie de hulppagina sio(4) voor meer informatie over het instellen van seriële poorten en meerpoortige kaarten. Bij gebruik van een instellingenbestand dat eerder voor een andere versie van FreeBSD werd gebruikt is voorzichtigheid geboden omdat de apparaatvlaggen en de syntaxis tussen de versies veranderd zijn.

> Opmerking: `port IO_COM1` is een substitutie voor `port 0x3f8`, `IO_COM2` is `0x2f8`, `IO_COM3` is `0x3e8` en `IO_COM4` is `0x2e8`, welke redelijk algemene poortadressen zijn voor hun overeenkomstige seriële poorten. Interrupts 4, 3, 5 en 9 zijn redelijk algemene interruptlijnen. Reguliere seriële poorten kunnen geen interrupts delen op ISA-bus-PC's (meerpoortige kaarten hebben elektronica die alle 16550A's op een kaart in staat stellen om één of twee interruptlijnen te delen).

## 27.2.4. Speciale apparaatbestanden

De meeste apparaten in de kernel worden benaderd met speciale apparaatbestanden die in de map `/dev` staan. De apparaten `sio` worden benaderd met de apparaten `/dev/ttyu`N`` (inbellen) en `/dev/cuau`N`` (uitbellen). FreeBSD biedt ook initialisatie-apparaten (`/dev/ttyu`N`.init` en `/dev/cuau`N`.init`) en slotapparaten (`/dev/ttyu`N`.lock` en `/dev/cuad`N`.lock`). De initialisatie-apparaten worden gebruikt om telkens als een poort wordt geopend de parameters van de communicatiepoorten te initialiseren, zoals `crtscts` voor modems die gebruik maken van `RTS/CTS`-signalering voor gegevensstroombeheer. De slotapparaten worden gebruikt om vlaggen op poorten op slot te zetten om te voorkomen dat gebruikers of programma's bepaalde parameters veranderen. In de hulppagina's termios(4), sio(4) en stty(1) staat informatie over respectievelijk terminalinstellingen, apparaten op slot zetten en initialiseren en terminalopties instellen.

## 27.2.5. De seriële poort instellen

Het apparaat `ttyu`N`` (of `cuau`N``) is het gebruikelijke apparaat dat geopend dient te worden voor de applicaties. Wanneer een proces het apparaat opent, heeft het een standaardverzameling aan terminal I/O-instellingen. Bekijk deze instellingen met het volgende commando:

    # stty -a -f /dev/ttyu1

Als de instellingen van dit apparaat veranderd worden, blijven de instellingen geldig totdat het apparaat gesloten wordt. Als het heropend wordt, gaat het terug naar de standaardverzameling. Om de standaardverzameling te veranderen, dient het apparaat voor de initiële toestand geopend te worden en die instellingen veranderd te worden. Om bijvoorbeeld de `CLOCAL`-modus, 8-bits-communicatie en `XON/XOFF`-gegevensstroombeheer voor apparaat `ttyu5` standaard aan te zetten:

    # stty -f /dev/ttyu5.init clocal cs8 ixon ixoff

De systeembrede initialisatie van de seriële apparaten wordt beheerd in `/etc/rc.d/serial`. Dit bestand heeft invloed op de standaardinstellingen van seriële apparaten.

Om te voorkomen dat bepaalde instellingen door een applicatie worden veranderd, dienen wijzigingen aan het slottoestand-apparaat te worden aangebracht. Om bijvoorbeeld de snelheid van `ttyu5` vast te zetten op 57600 bps:

    # stty -f /dev/ttyu5.lock 57600

Nu blijft een applicatie die `ttyu5` en de snelheid van de poort probeert te veranderen zitten op 57600 bps.

Uiteraard dienen de apparaten voor de initiële toestand en de slottoestand alleen voor het account `root` schrijfbaar te zijn.

Terug | Begin | Volgende
Seriële communicatie | Omhoog | Terminals