Introduktion
Jeg har opdaget noget fantastisk: Vi er stærkere sammen. Det gælder også elektronik! Hvordan forbedrer vi kommunikationen mellem to dele, der knap forstår hinanden? Bare rolig, vi undersøger nogle af svarene. Det handler om grænseflader!
Forståelse af grænsefladeteknikker, herunder kommunikationsprotokoller, dataoverførsel og enhedsdrivere, er afgørende for elektronikbyggere, der vil forbinde deres enheder med andre systemer. Uden grænseflader kunne elektronik ikke tale sammen, og det ville være trist. Lad os derfor lære at forbinde delene!
Metoder til dataoverførsel
Transmissionsformer er tre metoder, hvor moduler enten kan sende data, modtage data eller gøre begge dele samtidig. De tre typer er simplex, halv duplex og fuld duplex.
Simplex
Simplex beskriver to moduler, sender og modtager, se figur 1. Det ene modul sender, og det andet modtager. De kan ikke bytte roller, så kommunikationen går kun én vej.

Figur 1: Simplex-overførsel. Pilens retning viser, at data kun går fra senderen til modtagermodulet.
Sendermodulet kan bruge hele kommunikationsmediets kapacitet, eksempelvis radiosignaler eller kabler, til at sende data. En envejsradioudsendelse er et simplex-eksempel; moderne tastaturer og radiostyrede enheder kan også have en returkanal.
Halv duplex
Ved halv duplex kan to moduler skifte mellem rollerne som sender og modtager, se figur 2. Begge kan sende og modtage. De kan bytte roller, men hvert modul kan ikke have begge roller samtidig.

Figur 2: Halv duplex-overførsel. Pilene viser, at begge moduler kan sende og modtage, men et modul kan kun have én rolle ad gangen.
Ved halv duplex kan man ligesom ved simplex bruge hele kommunikationsmediets kapacitet. Halv duplex bruges eksempelvis i walkie-talkier.
Fuld duplex
Ved fuld duplex kan to moduler have begge roller samtidig: Begge kan sende og modtage på samme tid, se figur 3.
Fuld duplex stiller krav til transmissionsmediets kapacitet. Både simplex og halv duplex kan bruge hele mediets kapacitet, mens denne motorvej for data ved fuld duplex skal deles mellem modulerne, eller hvert modul skal have sit eget transmissionsmedie.

Figur 3: Fuld duplex-overførsel. Pilene viser, at begge moduler kan sende og modtage samtidig.
Fuld duplex bruges eksempelvis ved telefonsamtaler og i mikrocontrollerkortet Arduino UNO.
Seriel og parallel kommunikation
Seriel
Data mellem sender og modtager kan overføres serielt eller parallelt. Med andre ord kan data sendes serielt eller som flere bit parallelt. Seriel kommunikation sender bit efter hinanden; timingen kan bruge en fælles clock eller aftalt asynkron bittiming, se figur 4.

Figur 4: Seriel kommunikation mellem to moduler. De sendte dataværdier ankommer én efter én til modtagermodulet.
Seriel kommunikation er billigere og enklere end parallel kommunikation og bruges typisk også over længere afstande.
Parallel
Parallel overførsel bruger flere ledninger, én for hver bit, der skal overføres pr. clockcyklus, se figur 5.

Figur 5: Parallel kommunikation. Hver ledning repræsenterer en bit, der overføres pr. clockcyklus.
Parallel kommunikation bruges ofte over korte afstande. Den overfører flere bit ad gangen, men er ikke i sig selv hurtigere end seriel kommunikation: clockfrekvens, kodning, signalintegritet og forbindelsens design bestemmer datahastigheden.
Kommunikationsprotokoller
En kommunikationsprotokol er et regelsæt, der lader to eller flere parter i et kommunikationssystem overføre information via variation i en fysisk størrelse. Protokollen definerer regler, syntaks, betydning, synkronisering og eventuelle metoder til fejlretning.
Protokoller mellem og inden for systemer
For at forstå inter- og intrasystemprotokoller skal vi først fastslå, hvad en protokol er: Et regelsæt, som to eller flere moduler følger for at forstå hinanden. En analogi kunne være to personer, der taler dansk, og en tredje, der taler hindi. Hvis danskerne ikke taler hindi, og den hinditalende ikke taler dansk, fremstår kommunikationen som tilfældige bogstaver eller mærkelige lyde. De har brug for en oversætter.
Forskellen mellem inter- og intrasystemprotokoller afhænger af, om to moduler kommunikerer inden for et system, eksempelvis et printkort, eller med et modul uden for systemet. Intrasystemprotokoller kommunikerer internt. I vores analogi svarer det til, at de dansk- og hinditalende kan kommunikere uden hjælp udefra og forstår hinandens sprog. Intersystemprotokoller kommunikerer derimod ud over et systems grænser.
Den konkrete metode til dataoverførsel, både internt og mellem systemer, bestemmes af den anvendte kommunikationsprotokol. Eksempler er SPI, I2C og UART.
SPI
SPI bruger et ”MasterSlave”-princip. SPI, Serial Peripheral Interface, sender synkront og serielt og har ingen indbygget fejlkontrol. Kommunikationen mellem master og slave, som omtrent svarer til sender- og modtagermoduler, er fuld duplex: Begge enheder sender én bit pr. clockcyklus.
Den normale SPI-opkobling med fuld duplex bruger fire signalforbindelser samt fælles reference/stel og passende strømforsyning: MISO (Master Input Slave Out), MOSI (Master Out Slave Input), SS/CS (Slave select/chip select) og SCLK (Clock).
Ét modul er master, og de øvrige er slaver. Masteren administrerer de andre moduler og bestemmer kommunikationshastigheden.
I2C
I2C, IIC, ”I squared C” eller ”Inter-Integrated-Circuit” er en busprotokol med seriel, synkron overførsel. Et system kan have flere mastere og slaver. Protokollen bruger to signalforbindelser, SDA (Serial DAta) og SCL (Serial CLock). SCL er en kontrolbus med clocksignalet, der bestemmer dataoverførslens hastighed.
I2C bruger start- og stopbetingelser til at afgrænse overførsler; de garanterer ikke i sig selv fejlfri data, se figur 6.

Figur 6: Dataene eller beskeden begynder med en START-betingelse efterfulgt af adressen på den slave, masteren vil kommunikere med. Derefter kommer en læse-/skrivebit, der fortæller slaven, om masteren vil læse eller skrive. ACK/NACK er en kvitteringsbit fra modtageren, enten slave eller master, der kvitterer for en byte eller angiver manglende kvittering; den er ikke en checksum, der beviser fejlfri data. Figuren viser 2 x 8 bit efter den første ACK/NACK. Disse databytes kvitteres eller afvises før pakkens stopbetingelse.
UART
UART beskriver kommunikation mellem to enheder, hvor den ene omformer parallelle data til serielle data og sender dem til den anden, som omformer dem tilbage. UART sender serielt og asynkront. Der er ingen fælles clockledning; begge ender kræver stadig kompatible baudrater og lokale clocks. Grundlæggende UART er punkt-til-punkt og tildeler ikke i sig selv master-/slaveroller.
UART-datapakker er opbygget som vist i figur 7.
Enhedsdrivere
Nu ved vi lidt mere om, hvordan data sendes og modtages i elektronik. Men hvor sender vi data hen, og hvor modtager vi dem? Til det bruger vi enhedsdrivere. Hvad er de så?
En enhedsdriver er et computerprogram, der lader computerens operativsystem kommunikere med forskellige typer hardware, som forbinder moduler med hinanden. Idéen er, at en hardwareproducent kan lave én type hardware, der fungerer på forskellige operativsystemer. En driver skal derfor tage højde for mange forhold for at kunne bruges til forskellige former for kommunikation mellem elektroniske enheder så effektivt som muligt.
