Introduktion
Jag har upptäckt något fantastiskt: Vi är starkare tillsammans. Det gäller även elektronik! Hur förbättrar vi kommunikationen mellan två delar som knappt förstår varandra? Ta det lugnt, vi undersöker några av svaren. Det handlar om gränssnitt!
Förståelse för gränssnittstekniker, inklusive kommunikationsprotokoll, dataöverföring och enhetsdrivrutiner, är avgörande för elektronikbyggare som vill ansluta enheter till andra system. Utan gränssnitt skulle elektronik inte kunna prata med varandra, och det vore tråkigt. Låt oss därför lära oss att koppla ihop delarna!
Metoder för dataöverföring
Överföringslägen är tre metoder där moduler antingen kan skicka data, ta emot data eller göra båda samtidigt. De tre typerna är simplex, halvduplex och fullduplex.
Simplex
Simplex beskriver två moduler, sändare och mottagare, se figur 1. Den ena modulen sänder och den andra tar emot. De kan inte byta roller, så kommunikationen går bara åt ett håll.

Figur 1: Simplexöverföring. Pilens riktning visar att data bara går från sändaren till mottagarmodulen.
Sändarmodulen kan använda hela kommunikationsmediets kapacitet, exempelvis radiosignaler eller kablar, för att skicka data. En enkelriktad radiosändning är ett simplexexempel; moderna tangentbord och radiostyrda enheter kan också ha en returkanal.
Halvduplex
Vid halvduplex kan två moduler växla mellan rollerna sändare och mottagare, se figur 2. Båda kan sända och ta emot. De kan byta roller, men varje modul kan inte ha båda rollerna samtidigt.

Figur 2: Halvduplexöverföring. Pilarna visar att båda modulerna kan sända och ta emot, men en modul kan bara ha en roll åt gången.
Vid halvduplex kan man liksom vid simplex använda hela kommunikationsmediets kapacitet. Halvduplex används exempelvis i komradio.
Fullduplex
Vid fullduplex kan två moduler ha båda rollerna samtidigt: Båda kan sända och ta emot på samma gång, se figur 3.
Fullduplex ställer krav på överföringsmediets kapacitet. Både simplex och halvduplex kan använda hela mediets kapacitet, medan denna motorväg för data vid fullduplex måste delas mellan modulerna, eller varje modul måste ha ett eget överföringsmedium.

Figur 3: Fullduplexöverföring. Pilarna visar att båda modulerna kan sända och ta emot samtidigt.
Fullduplex används exempelvis vid telefonsamtal och i mikrokontrollerkortet Arduino UNO.
Seriell och parallell kommunikation
Seriell
Data mellan sändare och mottagare kan överföras seriellt eller parallellt. Data kan alltså skickas seriellt eller som flera bitar parallellt. Seriell kommunikation skickar bitar i följd; tidsstyrningen kan använda en gemensam klocka eller överenskommen asynkron bittiming, se figur 4.

Figur 4: Seriell kommunikation mellan två moduler. De skickade datavärdena anländer en efter en till mottagarmodulen.
Seriell kommunikation är billigare och enklare än parallell kommunikation och används vanligtvis även över längre avstånd.
Parallell
Parallell överföring använder flera ledningar, en för varje bit som ska överföras per klockcykel, se figur 5.

Figur 5: Parallell kommunikation. Varje ledning representerar en bit som överförs per klockcykel.
Parallell kommunikation används ofta över korta avstånd. Den överför flera bitar åt gången men är inte i sig snabbare än seriell kommunikation: klockfrekvens, kodning, signalintegritet och länkens utformning avgör datahastigheten.
Kommunikationsprotokoll
Ett kommunikationsprotokoll är ett regelsystem som låter två eller flera parter i ett kommunikationssystem överföra information genom variation i en fysisk storhet. Protokollet definierar regler, syntax, betydelse, synkronisering och eventuella metoder för felåterhämtning.
Protokoll mellan och inom system
För att förstå inter- och intrasystemprotokoll måste vi först fastställa vad ett protokoll är: En uppsättning regler som två eller flera moduler följer för att förstå varandra. En analogi kan vara två personer som talar danska och en tredje som talar hindi. Om de dansktalande inte kan hindi och den hinditalande inte kan danska framstår kommunikationen som slumpmässiga bokstäver eller konstiga ljud. De behöver en översättare.
Skillnaden mellan inter- och intrasystemprotokoll beror på om två moduler kommunicerar inom ett system, exempelvis ett kretskort, eller med en modul utanför systemet. Intrasystemprotokoll kommunicerar internt. I vår analogi motsvarar det att de dansk- och hinditalande kan kommunicera utan hjälp utifrån och förstår varandras språk. Intersystemprotokoll kommunicerar däremot över ett systems gränser.
Den konkreta metoden för dataöverföring, både internt och mellan system, bestäms av kommunikationsprotokollet som används. Exempel är SPI, I2C och UART.
SPI
SPI använder en ”MasterSlave”-princip. SPI, Serial Peripheral Interface, överför synkront och seriellt och har ingen inbyggd felkontroll. Kommunikationen mellan master och slave, som ungefär motsvarar sändar- och mottagarmoduler, är fullduplex: Båda enheterna skickar en bit per klockcykel.
Den vanliga SPI-kopplingen med fullduplex använder fyra signalförbindelser samt gemensam referens/jord och lämplig strömförsörjning: MISO (Master Input Slave Out), MOSI (Master Out Slave Input), SS/CS (Slave select/chip select) och SCLK (Clock).
En modul är master och de andra är slavar. Mastern hanterar de andra modulerna och bestämmer kommunikationshastigheten.
I2C
I2C, IIC, ”I squared C” eller ”Inter-Integrated-Circuit” är ett bussprotokoll med seriell, synkron överföring. Ett system kan ha flera mastrar och slavar. Protokollet använder två signalförbindelser, SDA (Serial DAta) och SCL (Serial CLock). SCL är en styrbuss med klocksignalen som bestämmer dataöverföringens hastighet.
I2C använder start- och stoppvillkor för att avgränsa överföringar; dessa garanterar inte i sig felfria data, se figur 6.

Figur 6: Data eller meddelandet börjar med ett START-villkor följt av adressen till slaven som mastern vill kommunicera med. Därefter kommer en läs-/skrivbit som talar om för slaven om mastern vill läsa eller skriva. ACK/NACK är en kvittensbit från mottagaren, antingen slav eller master, som kvitterar en byte eller anger utebliven kvittens; den är inte en kontrollsumma som bevisar felfria data. Figuren visar 2 x 8 bit efter den första ACK/NACK. Dessa databyte kvitteras eller avvisas före paketets stoppvillkor.
UART
UART beskriver kommunikation mellan två enheter där den ena omvandlar parallella data till seriella och skickar dem till den andra som omvandlar tillbaka. UART överför seriellt och asynkront. Det finns ingen gemensam klockledning; båda ändar behöver ändå kompatibla baudhastigheter och lokala klockor. Grundläggande UART är punkt-till-punkt och tilldelar inte i sig master-/slavroller.
UART-datapaket är uppbyggda enligt figur 7.
Enhetsdrivrutiner
Nu vet vi lite mer om hur data skickas och tas emot i elektronik. Men vart skickar vi data och var tar vi emot dem? Till det använder vi enhetsdrivrutiner. Vad är de då?
En enhetsdrivrutin är ett datorprogram som låter datorns operativsystem kommunicera med olika typer av hårdvara som kopplar ihop moduler. Tanken är att en hårdvarutillverkare kan skapa en typ av hårdvara som fungerar på olika operativsystem. En drivrutin måste därför ta hänsyn till många faktorer för att kunna användas för olika former av kommunikation mellan elektroniska enheter så effektivt som möjligt.
