Prispevki glavni

Komunikacijski protokoli razloženi: UART, SPI, I2C, CAN, RS-232 in 1-Wire

Komunikacijski protokoli razloženi: primerjava UART, SPI, I2C, CAN, RS-232 in 1-Wire

Predstavljaj si, da poskušaš govoriti s prijateljem na drugi strani sobe. Dogovoriti se morata, kateri jezik bosta govorila, kako hitro bosta govorila in kdo ima prednost, če začneta govoriti hkrati. V svetu elektronike morajo mikročipi in senzorji početi popolnoma enako. Jeziki in pravila, ki jih uporabljajo za medsebojni pogovor, se imenujejo komunikacijski protokoli.

Komunikacijski protokoli za mikrokontrolerje so temeljno znanje vsakega elektroničarja – od preprostega serijskega vmesnika do zanesljivega industrijskega omrežnega protokola.

Spodaj je poglobljeni pregled šestih najpomembnejših protokolov, ki jih srečate pri delu z mikrokontrolerji, senzorji in industrijsko opremo – kaj vsak dela, kako deluje od znotraj in kdaj ga izberete.

1. UART – Universal Asynchronous Receiver Transmitter

UART je eden najstarejših in najpreprostejših načinov komunikacije med dvema napravama. Uporablja samo dve žici – eno za pošiljanje (TX) in eno za sprejemanje (RX). Med napravama ni skupne ure, kar pove že beseda asinhron v imenu. Namesto tega obe napravi pred začetkom komunikacije dogovorita hitrost prenosa, ki jo imenujemo baudna hitrost (baud rate).

Tipična baudna hitrost znaša od 9600 do 115200 baudov, pri čemer morata obe napravi biti nastavljeni na točno enako vrednost. Za začetek sporočila UART uporabi start bit, ki naprave opozori, da prihajajo podatki, na koncu pa stop bit, ki označi konec sporočila. Če bi bila hitrost le malo napačna, bi sporočilo hitro postalo popolnoma nerazumljivo – kot dva človeka, ki govorita različno hitro in se ne razumeta.

UART boste srečali na Arduino ploščicah (pini 0 in 1), GPS modulih in Bluetooth adapterjih. Ni najhitrejši protokol, je pa izjemno preprost za nastavitev – kar pojasnjuje, zakaj ostaja vseprisoten po desetletjih. UART in RS-232 sta komunikacijska protokola za neposredno točka-točka komunikacijo, medtem ko so I2C, SPI in CAN komunikacijski protokoli za vodilno komunikacijo z več napravami. Podrobna referenca je dostopna v Arduino serijski dokumentaciji.

UART – komunikacijski protokoli za asinhrono točka-točka komunikacijo z baudno hitrostjo

2. I2C – Inter-Integrated Circuit

I2C je pameten kompromis, ko želi en glavni mikrokontroler komunicirati z veliko različnimi senzorji hkrati. Uporablja samo dve žici – SDA (podatki) in SCL (ura) – a po istih dveh žicah lahko komunicira z do 127 različnimi napravami hkrati.

Deluje kot učitelj v učilnici: Master (glavna naprava) pokliče edinstven 7-bitni naslov naprave – le tista naprava, ki ima točno ta naslov, odgovori s potrditvijo (ACK). Vse ostale molijo. Protokol obvezno uporablja pull-up upore, ki držijo linijo v visokem stanju, dokler nihna ne začne oddajati.

Tipične hitrosti so 100 kHz (standardni način), 400 kHz (hitri način) in do 1 MHz (ultra-hitri način). I2C je pogost pri temperaturnih senzorjih, OLED zaslonih in žiroskopih. Ko potrebujete priključiti veliko naprav brez porabe številnih priključkov na mikrokontrolerju, je I2C najboljša izbira. Arduino knjižnica Wire pokriva celoten I2C protokol.

I2C protokol – Master-Slave arhitektura z naslavljanjem naprav in pull-up upori na SDA in SCL

3. SPI – Serial Peripheral Interface

SPI je protokol, ki ga potrebujete, ko želite premikati podatke zelo hitro. Uporablja štiri žice:

  • CLK – skupna ura (naredi protokol sinhroni)
  • MOSI – podatki od Master naprave k Slave napravi
  • MISO – podatki od Slave naprave k Master napravi
  • CS/SS – Chip Select, izbira aktivne naprave

Ker imata Master in Slave vsak svojo podatkovno žico, omogoča SPI polni dupleks – podatki tečejo v obeh smereh hkrati, za razliko od walkie-talkieja. Hitrosti zlahka presegajo 10 MHz in celo 100 MHz, kar je bistveno več kot UART ali I2C.

Pomanjkljivost: SPI nima sistema naslovov. Namesto tega Master uporablja ločeno žico Chip Select (CS) za vsako napravo posebej. Vsaka nova naprava zahteva dodatno CS žico, kar pri več napravah hitro zakomplicira žičenje. SPI najdemo v SD karticah, barvnih TFT zaslonih in flash pomnilniških čipih.

Komunikacijski protokoli: UART, SPI in I2C

UART SPI I2C
Število žic 2 4+ 2
Tip Asinhrono Sinhrono Sinhrono
Hitrost Nizka Visoka Srednja
Naprave na vodilu 2 2+ (ena CS na napravo) Do 127
Polni dupleks Da Da Ne
Komunikacijski protokoli SPI, I2C in UART – primerjava po številu žic, hitrosti in arhitekturi

4. CAN Bus – Controller Area Network

CAN je protokol, ki ga je Bosch razvil leta 1983 posebej za avtomobile – in je bil zasnovan za preživetje v električno hrupnem okolju. Sodobni avtomobil vsebuje desetine računalnikov: krmilna enota motorja, zavore, airbagi, armaturna plošča, menjalnik – vsi morajo med seboj zanesljivo komunicirati. CAN jih poveže prek samo dveh žic (CAN High in CAN Low), ki sta običajno zviti skupaj.

Ključna lastnost je diferencialna signalizacija: protokol meri zgolj razliko v napetosti med žicama, ne absolutne vrednosti. Če motor povzroči velik električni udar, se ta razlika ne spremeni – sporočilo preživi popolnoma nepoškodovano.

CAN nima nobenega Masterja. Namesto tega uporablja bitno arbitražo: vsako sporočilo ima svojo ID številko. Če dve napravi začneta oddajati hkrati, sporočilo z nižjo ID številko (npr. „Pritisni zavore!“) avtomatsko preglasi tisto z višjo ID (npr. „Zamenjaj pesem“) – brez izgube podatkov in brez zamude. CAN najdemo v vsakem sodobnem avtomobilu, tovornjaku, industrijskem robotu in medicinski opremi. Za priklop CAN vodila na Arduino ali ESP32 je potreben namenski modul, na primer MCP2515 CAN Bus modul.

CAN Bus protokol – diferencialna signalizacija in bitna arbitraža za zanesljivo industrijsko komunikacijo

5. RS-232

RS-232 je eden najstarejših komunikacijskih standardov, ki je še vedno v aktivni uporabi – definiran je bil leta 1960. Deluje podobno kot UART (serijska, točka-točka komunikacija), a za prenos uporablja bistveno višje napetosti: do +15 V za logično 0 in do −15 V za logično 1. Ta velik napetostni zamah je bil zasnovan za boljšo odpornost na šum pri daljših kablih – zanesljivo deluje še na razdaljah 15 metrov in več.

RS-232 boste prepoznali po 9-pinski priključnici DB9 (ali starejši 25-pinski DB25), ki je bila nekoč standardna na vsakem osebnem računalniku. Na potrošniških napravah ga je zamenjal USB, v industrijskih napravah, znanstvenih laboratorijih, starih strojih in prodajnih terminalih pa ostaja neposežen. Adapterji USB–RS232 so standardno orodje vsakogar, ki dela s starejšo industrijsko opremo, zgrajeno pred desetletji in nikoli zamenjano.

RS-232 protokol – fizični sloj z DB9 prikljuckom in napetostnimi nivoji do ±15 V

6. 1-Wire

Ime pove vse. 1-Wire komunicira prek ene same žice – in ista žica hkrati napaja priključene naprave. Vsaka naprava ima pri proizvodnji vgrajen edinstven 64-bitni identifikator – na svetu ne obstajata dve napravi z enakim ID-jem. Master zato točno ve, s katero napravo govori, tudi če jih je na istem vodilu več.

Posebnost, ki naredi 1-Wire resninčno edinstvnega, je parazitsko napajanje: senzorji črpajo električno energijo neposredno iz komunikacijske žice in jo shranjujejo v notranji kondenzator, ko žica počiva. Ločena napajalna žica ali baterija nista potrebni. Hitrost prenosa je nizka – okoli 16 kbps (ali 125 kbps v hitrem načinu) – a za preproste senzorje popolnoma zadostuje.

Najznamenitejša 1-Wire naprava je temperaturni senzor DS18B20, ki ga pogosto srečate v projektih z Arduinom ali ESP32. Poleg njega 1-Wire najdemo v iButton varnostnih ključih, merilnikih napolnjenosti baterij v prenosnikih in sistemih za nadzor temperature v HVAC instalacijah – celo na razdaljah do sto metrov skozi celotno stavbo.

Komunikacijski protokoli: kateri izbrati?

Situacija Protokol
Preprosta komunikacija med dvema napravama UART
Največja hitrost, malo naprav SPI
Veliko naprav, malo prostih priključkov I2C
Zanesljivo omrežje v vozilu ali industriji CAN
Komunikacija s staro industrijsko opremo RS-232
En senzor, absolutno minimalno žičenje 1-Wire

Hitri pregled vseh šestih

Protokol Žici Posebnost Tipična uporaba
UART 2 Asinhron, dogovorjena baudna hitrost GPS, Bluetooth, terminal
I2C 2 Do 127 naprav, naslavljanje z ACK Senzorji, OLED zasloni, žiroskopi
SPI 4+ Polni dupleks, do 100 MHz SD kartice, TFT zasloni, flash
CAN 2 Diferencialno, bitna arbitraža brez Masterja Avtomobili, industrija, medicina
1-Wire 1 Parazitsko napajanje, 64-bit ID DS18B20, HVAC, iButton
RS-232 2+ ±15 V, dolgi kabli, DB9 Laboratoriji, stara industrijska oprema

Komunikacijski protokoli: pogosta vprašanja

Kateri protokoli so vgrajeni v Arduino Uno?

Arduino Uno ima strojno podprt UART (pini 0 in 1), SPI (pini 10–13) in I2C (pini A4 in A5). Za CAN, RS-232 in 1-Wire potrebujete zunanje module ali programske knjižnice.

Ali je I2C ali SPI boljši za OLED zaslon?

Večina poceni OLED zaslonov (0,96″ in 1,3″) podpira I2C, kar zadostuje za prikaz statičnih podatkov. Če potrebujete hitro osveževanje ali animacije, izberite SPI različico – je opazno hitrejša.

Zakaj DS18B20 uporablja 1-Wire namesto I2C?

DS18B20 je bil zasnovan za instalacije, kjer so senzorji razporejeni po celotni stavbi ali napeljavi. Z eno samo žico in skupno maso je vsak dodaten senzor trivialno poceni za namestitev. V HVAC sistemih, kjer tečejo metre kablov, ta preprostost pomeni bistveno nižje stroške.

Komunikacijski protokoli UART, SPI, I2C, CAN, RS-232 in 1-Wire so prisotni v skoraj vsakem elektronskem projektu – module, senzorje in krmilnike z njihovo podporo najdete v kategoriji komunikacijskih modulov na 3DSVET.eu.