Raziščite UART in SPI, dva bistvena protokola serijske komunikacije. Razumete njihova načela, razlike, uporabe, prednosti in slabosti za vgrajene sisteme in širše.
Demistifikacija serijske komunikacije: Poglobljen pogled na UART in SPI
V svetu elektronike in vgrajenih sistemov je sposobnost naprav, da med seboj komunicirajo, izjemno pomembna. Serijska komunikacija zagotavlja zanesljivo in učinkovito metodo za prenos podatkov med mikrokrmilniki, senzorji, perifernimi napravami in celo računalniki. Dva najpogostejša protokola serijske komunikacije sta UART (Universal Asynchronous Receiver/Transmitter) in SPI (Serial Peripheral Interface). Ta obsežen vodnik bo raziskal zapletenosti tako UART kot SPI, raziskal njihova načela, razlike, uporabe, prednosti in slabosti.
Razumevanje serijske komunikacije
Serijska komunikacija je metoda prenosa podatkov bit za bitom po eni žici (ali nekaj žicah za nadzorne signale), v nasprotju s paralelno komunikacijo, ki pošilja več bitov hkrati po več žicah. Medtem ko je paralelna komunikacija hitrejša na kratkih razdaljah, je serijska komunikacija na splošno bolj zaželena za daljše razdalje in situacije, kjer je zmanjšanje števila žic ključnega pomena. Zaradi tega je idealna za vgrajene sisteme, kjer sta prostor in stroški pogosto pomembni omejitvi.
Asinhrona v primerjavi s sinhrono komunikacijo
Serijsko komunikacijo lahko v grobem razvrstimo v dve kategoriji: asinhrono in sinhrono. Asinhrona komunikacija, kot je UART, ne zahteva skupnega taktnega signala med pošiljateljem in prejemnikom. Namesto tega se zanaša na startne in stop bitove, da uokviri vsak bajt podatkov. Sinhrona komunikacija, kot sta SPI in I2C, uporablja skupni taktni signal za sinhronizacijo prenosa podatkov med napravami.
UART: Univerzalni asinhroni sprejemnik/oddajnik
UART je pogosto uporabljen protokol serijske komunikacije predvsem zaradi svoje preprostosti in prilagodljivosti. Je asinhroni protokol, kar pomeni, da si pošiljatelj in prejemnik ne delita skupnega taktnega signala. To poenostavi strojne zahteve, vendar zahteva natančno časovno opredelitev in vnaprej dogovorjeno hitrost prenosa podatkov (hitrost baud).
Načela UART
Komunikacija UART vključuje prenos podatkov v okvirjih, od katerih je vsak sestavljen iz naslednjega:
- Startni bit: Označuje začetek novega podatkovnega okvira. Običajno je nizek (0) signal.
- Podatkovni biti: Dejanski podatki, ki se prenašajo, običajno 8 bitov (bajt), lahko pa tudi 5, 6 ali 7 bitov.
- Bit parnosti (izbirno): Uporablja se za odkrivanje napak. Lahko je sodo, liho ali nobena.
- Stop bit: Označuje konec podatkovnega okvira. Običajno je visok (1) signal. Pogosta sta en ali dva stop bita.
Pošiljatelj in prejemnik se morata dogovoriti o hitrosti baud, podatkovnih bitih, parnosti in stop bitih za uspešno komunikacijo. Pogoste hitrosti baud vključujejo 9600, 115200 in druge. Višja hitrost baud omogoča hitrejši prenos podatkov, hkrati pa povečuje občutljivost na časovne napake.
Uporaba UART
- Povezovanje mikrokrmilnikov z računalniki: UART se pogosto uporablja za vzpostavitev serijske povezave med mikrokrmilnikom (kot je Arduino ali Raspberry Pi) in računalnikom za programiranje, odpravljanje napak in beleženje podatkov.
- GPS moduli: Mnogi GPS moduli uporabljajo UART za prenos podatkov o lokaciji v gostiteljski mikrokrmilnik ali računalnik.
- Bluetooth moduli: Bluetooth moduli pogosto uporabljajo UART kot komunikacijski vmesnik z mikrokrmilnikom.
- Serijski tiskalniki: Starejši serijski tiskalniki uporabljajo UART za prejemanje ukazov za tiskanje in podatkov.
- Izhod konzole: Vgrajeni sistemi pogosto uporabljajo UART za izpis informacij o odpravljanju napak in sporočil o stanju na serijsko konzolo.
Prednosti UART
- Preprostost: UART je razmeroma preprost za implementacijo v strojni in programski opremi.
- Prilagodljivost: UART podpira različne hitrosti prenosa podatkov, dolžine podatkovnih bitov in možnosti parnosti.
- Široko podprto: UART je splošno podprt standard z lahko dostopnimi implementacijami strojne in programske opreme.
- Ni potreben taktni signal: To zmanjša število potrebnih žic.
Slabosti UART
- Manjša hitrost: V primerjavi s sinhronimi protokoli, kot je SPI, ima UART običajno manjšo hitrost prenosa podatkov.
- Občutljivost na napake: Brez zanesljivega taktnega signala je UART bolj dovzeten za časovne napake in poškodbe podatkov. Čeprav lahko bit parnosti pomaga, ne zagotavlja komunikacije brez napak.
- Omejeno na dve napravi: UART je v prvi vrsti zasnovan za točkovno komunikacijo med dvema napravama. Multipleksiranje lahko omogoča več napravam na eni sami vodili UART, vendar poveča zapletenost.
Primer UART: Arduino in serijski monitor
Pogost primer UART v akciji je uporaba serijskega monitorja v Arduino IDE. Plošča Arduino ima vgrajen vmesnik UART, ki mu omogoča komunikacijo z računalnikom prek USB. Naslednji izsek kode Arduino prikazuje pošiljanje podatkov v serijski monitor:
void setup() { Serial.begin(9600); // Inicializacija serijske komunikacije pri 9600 baudih } void loop() { Serial.println("Živjo, svet!"); // Pošlje sporočilo "Živjo, svet!" na serijski monitor delay(1000); // Počakaj 1 sekundo }
Ta preprosta koda pošlje sporočilo "Živjo, svet!" na serijski monitor vsako sekundo. Funkcija Serial.begin(9600)
inicializira vmesnik UART pri hitrosti prenosa 9600, ki se mora ujemati z nastavitvijo v serijskem monitorju.
SPI: Serijski periferni vmesnik
SPI (Serial Peripheral Interface) je sinhroni protokol serijske komunikacije, ki se običajno uporablja za komunikacijo na kratke razdalje med mikrokrmilniki in perifernimi napravami. Znan je po visoki hitrosti in razmeroma preprostih strojnih zahtevah.
Načela SPI
SPI uporablja arhitekturo master-slave, kjer ena naprava (glavna) nadzoruje komunikacijo in ena ali več naprav (slave) odgovarja na ukaze glavne naprave. Vodilo SPI je sestavljeno iz štirih glavnih signalov:
- MOSI (Master Out Slave In): Podatki, ki se prenašajo z glavne na podrejeno napravo.
- MISO (Master In Slave Out): Podatki, ki se prenašajo s podrejene naprave na glavno.
- SCK (Serial Clock): Taktni signal, ki ga generira glavni, uporablja se za sinhronizacijo prenosa podatkov.
- SS/CS (Slave Select/Chip Select): Signal, ki ga glavni uporablja za izbiro določene podrejene naprave za komunikacijo. Vsaka podrejena naprava ima običajno svojo namensko vrstico SS/CS.
Podatki se prenašajo sinhrono s taktnim signalom. Glavna naprava začne komunikacijo tako, da potegne vrstico SS/CS želene podrejene naprave nizko. Podatki se nato premaknejo iz glavne naprave na vrstico MOSI in v podrejeno napravo na naraščajočem ali padajočem robu signala SCK. Hkrati se podatki premaknejo iz podrejene naprave na vrstico MISO in v glavno napravo. To omogoča dvosmerno komunikacijo, kar pomeni, da se podatki lahko prenašajo v obe smeri hkrati.
Načini SPI
SPI ima štiri načine delovanja, ki jih določata dva parametra: Polariteta ure (CPOL) in Faza ure (CPHA). Ti parametri določajo stanje signala SCK, ko je nedejaven, in rob signala SCK, na katerem se podatki vzorčijo in premaknejo.
- Način 0 (CPOL=0, CPHA=0): SCK je nizek, ko je nedejaven. Podatki se vzorčijo na naraščajočem robu in premaknejo na padajočem robu.
- Način 1 (CPOL=0, CPHA=1): SCK je nizek, ko je nedejaven. Podatki se vzorčijo na padajočem robu in premaknejo na naraščajočem robu.
- Način 2 (CPOL=1, CPHA=0): SCK je visok, ko je nedejaven. Podatki se vzorčijo na padajočem robu in premaknejo na naraščajočem robu.
- Način 3 (CPOL=1, CPHA=1): SCK je visok, ko je nedejaven. Podatki se vzorčijo na naraščajočem robu in premaknejo na padajočem robu.
Glavne in podrejene naprave morajo biti konfigurirane za uporabo istega načina SPI za uspešno komunikacijo. Če niso, bo prišlo do popačenih podatkov ali neuspeha komunikacije.
Uporaba SPI
- Pomnilniške kartice (kartice SD, kartice microSD): SPI se pogosto uporablja za vmesnik s pomnilniškimi karticami v vgrajenih sistemih.
- Senzorji: Mnogi senzorji, kot so pospeškometri, žiroskopi in temperaturni senzorji, uporabljajo SPI za prenos podatkov.
- Zasloni: SPI se pogosto uporablja za nadzor zaslonov LCD in OLED.
- Analogni-digitalni pretvorniki (ADC) in digitalno-analogni pretvorniki (DAC): SPI se uporablja za komunikacijo z ADC in DAC za pridobivanje podatkov in aplikacije nadzora.
- Premikalni registri: SPI se lahko uporablja za nadzor premikalnih registrov za razširitev števila digitalnih vhodno-izhodnih nožic, ki so na voljo na mikrokrmilniku.
Prednosti SPI
- Visoka hitrost: SPI ponuja znatno višje hitrosti prenosa podatkov v primerjavi z UART.
- Dvosmerna komunikacija: Podatki se lahko prenašajo v obe smeri hkrati.
- Več podrejenih naprav: Ena glavna naprava lahko komunicira z več podrejenimi napravami.
- Razmeroma preprosta strojna oprema: SPI zahteva le štiri žice (plus eno vrstico SS/CS na podrejeno napravo).
Slabosti SPI
- Ni sheme naslavljanja: SPI se zanaša na vrstice SS/CS za izbiro podrejenih naprav, kar lahko postane okorno pri velikem številu podrejenih naprav.
- Kratka razdalja: SPI je na splošno omejen na kratke razdalje zaradi degradacije signala pri višjih hitrostih.
- Ni zaznavanja napak: SPI nima vgrajenih mehanizmov za zaznavanje napak. Preverjanje napak je treba implementirati v programski opremi.
- Bolj zapletena implementacija programske opreme: Čeprav je strojna oprema razmeroma preprosta, je lahko implementacija programske opreme bolj zapletena kot UART, zlasti pri obravnavanju več podrejenih naprav in različnih načinov SPI.
Primer SPI: Vmesnik s pospeškometrom
Številni pospeškometri, kot je priljubljeni ADXL345, uporabljajo SPI za komunikacijo. Za branje podatkov o pospešku iz ADXL345 mora mikrokrmilnik (ki deluje kot glavni) poslati ukaz pospeškometru (ki deluje kot podrejen), da prebere ustrezne registre. Naslednji psevdokoda ponazarja postopek:
- Izberite ADXL345 tako, da potegnete njegovo vrstico SS/CS nizko.
- Pošljite naslov registra, ki ga želite prebrati (npr. naslov podatkov o pospešku po osi X).
- Preberite podatke iz vrstice MISO (vrednost pospeška po osi X).
- Ponovite korake 2 in 3 za osi Y in Z.
- Deslektorirajte ADXL345 tako, da potegnete njegovo vrstico SS/CS visoko.
Določeni ukazi in naslovi registrov se bodo razlikovali glede na model pospeškometra. Vedno je treba pregledati podatkovni list za natančne postopke.
UART v primerjavi s SPI: Primerjava
Tukaj je tabela, ki povzema ključne razlike med UART in SPI:
Značilnost | UART | SPI |
---|---|---|
Vrsta komunikacije | Asinhrona | Sinhrona |
Taktni signal | Noben | Skupni taktni signal |
Število žic | 2 (TX, RX) | 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS na podrejeno napravo |
Hitrost prenosa podatkov | Nižja | Višja |
Dvosmerna | Običajno polovična dvosmerna (čeprav lahko včasih simulira polno dvosmerno s kompleksno programsko opremo) | Polno dvosmerna |
Zaznavanje napak | Bit parnosti (izbirno) | Brez (zahteva izvedbo programske opreme) |
Število naprav | 2 (točka-točka) | Več (master-slave) |
Zapletenost | Preprostejši | Bolj zapleten |
Razdalja | Daljša | Krajša |
Izbira pravega protokola
Izbira med UART in SPI je odvisna od posebnih zahtev aplikacije. Razmislite o naslednjih dejavnikih:
- Hitrost prenosa podatkov: Če je potreben prenos podatkov z visoko hitrostjo, je SPI na splošno boljša izbira.
- Razdalja: Za daljše razdalje je UART primernejši.
- Število naprav: Če mora več naprav komunicirati z eno samo glavno napravo, je SPI bolj zaželen.
- Zapletenost: Če je preprostost prednostna naloga, je UART lažje implementirati.
- Zaznavanje napak: Če je zaznavanje napak ključno, razmislite o uporabi UART z bitom parnosti ali implementaciji preverjanja napak v programski opremi za SPI.
- Razpoložljiva strojna oprema: Nekateri mikrokrmilniki imajo morda omejeno podporo za en protokol ali drugega. Pri odločitvi upoštevajte razpoložljive strojne vire.
Na primer, v preprosti aplikaciji senzorja, kjer mora mikrokrmilnik brati podatke z enega samega senzorja na kratki razdalji, bi bil SPI morda boljša možnost zaradi svoje večje hitrosti. Če pa mora mikrokrmilnik komunicirati z računalnikom na daljši razdalji za namene odpravljanja napak, bi bil UART primernejši.
Napredne obravnave
I2C (Inter-Integrated Circuit)
Medtem ko se ta članek osredotoča na UART in SPI, je pomembno omeniti I2C (Inter-Integrated Circuit) kot še en pogost protokol serijske komunikacije. I2C je dvosmerni protokol, ki podpira več glavnih in podrejenih naprav na istem vodilu. Pogosto se uporablja za komunikacijo med integriranimi vezji na vezju. I2C uporablja naslavljanje, za razliko od SPI, kar poenostavlja velike mreže naprav.
TTL v primerjavi z RS-232
Pri delu z UART je pomembno razumeti razliko med nivoji napetosti TTL (Transistor-Transistor Logic) in RS-232. Logika TTL uporablja 0V in 5V (ali 3,3V) za predstavitev logičnega nizkega in visokega signala. RS-232 pa uporablja napetosti ±12V. Neposredno povezovanje TTL UART z RS-232 UART lahko poškoduje naprave. Za pretvorbo med nivoji napetosti TTL in RS-232 je potreben pretvornik nivoja (na primer čip MAX232).
Obravnava napak
Ker imata UART in SPI omejene mehanizme za zaznavanje napak, je pomembno, da v programski opremi implementirate obravnavo napak. Pogoste tehnike vključujejo kontrolne vsote, ciklične redundančne kontrole (CRC) in časovne mehanizme.
Sklep
UART in SPI sta bistvena protokola serijske komunikacije za vgrajene sisteme in širše. UART ponuja preprostost in prilagodljivost, zaradi česar je primeren za povezovanje mikrokrmilnikov z računalniki in drugimi napravami na daljše razdalje. SPI omogoča hitro komunikacijo za aplikacije na kratke razdalje, kot so povezovanje s senzorji, pomnilniškimi karticami in zasloni. Razumevanje načel, prednosti in slabosti vsakega protokola vam omogoča, da sprejemate premišljene odločitve pri načrtovanju naslednjega vgrajenega sistema ali elektronskega projekta. Z napredovanjem tehnologije se bo povečevala tudi uporaba teh metod serijske komunikacije. Neprekinjeno prilagajanje in učenje bosta zagotovila, da bodo lahko inženirji in ljubitelji enako izkoristili te protokole v njihovem polnem potencialu.