Susipažinkite su UART ir SPI – dviem esminiais nuosekliosios komunikacijos protokolais. Supraskite jų principus, skirtumus, taikymą, pranašumus ir trūkumus įterptinėse sistemose ir ne tik.
Nuosekliosios komunikacijos demistifikavimas: Išsami UART ir SPI apžvalga
Elektronikos ir įterptinių sistemų pasaulyje gebėjimas įrenginiams bendrauti tarpusavyje yra nepaprastai svarbus. Nuoseklioji komunikacija suteikia patikimą ir efektyvų būdą perduoti duomenis tarp mikrovaldiklių, jutiklių, išorinių įrenginių ir net kompiuterių. Du labiausiai paplitę nuosekliosios komunikacijos protokolai yra UART (Universalus asinchroninis imtuvas/siųstuvas) ir SPI (Nuoseklioji išorinių įrenginių sąsaja). Šis išsamus vadovas gilinsis į UART ir SPI subtilybes, nagrinėdamas jų principus, skirtumus, taikymo sritis, pranašumus ir trūkumus.
Supraskime nuosekliąją komunikaciją
Nuoseklioji komunikacija – tai metodas, kai duomenys perduodami po vieną bitą per vieną laidą (arba kelis laidus valdymo signalams), priešingai nei lygiagrečioji komunikacija, kuri vienu metu siunčia kelis bitus per kelis laidus. Nors lygiagrečioji komunikacija yra greitesnė trumpais atstumais, nuoseklioji komunikacija paprastai teikiama pirmenybė ilgesniems atstumams ir situacijose, kai labai svarbu sumažinti laidų skaičių. Dėl to ji idealiai tinka įterptinėms sistemoms, kur erdvė ir kaina dažnai yra reikšmingi apribojimai.
Asinchroninė ir sinchroninė komunikacija
Nuosekliąją komunikaciją galima plačiai suskirstyti į dvi kategorijas: asinchroninę ir sinchroninę. Asinchroninė komunikacija, tokia kaip UART, nereikalauja bendro laikrodžio signalo tarp siuntėjo ir imtuvo. Vietoj to, ji remiasi pradžios ir pabaigos bitais, kurie įrėmina kiekvieną duomenų baitą. Sinchroninė komunikacija, tokia kaip SPI ir I2C, naudoja bendrą laikrodžio signalą duomenų perdavimui tarp įrenginių sinchronizuoti.
UART: Universalus asinchroninis imtuvas/siųstuvas
UART yra plačiai naudojamas nuosekliosios komunikacijos protokolas, visų pirma dėl savo paprastumo ir lankstumo. Tai asinchroninis protokolas, o tai reiškia, kad siuntėjas ir imtuvas neturi bendro laikrodžio signalo. Tai supaprastina aparatinės įrangos reikalavimus, tačiau reikalauja tikslaus laiko nustatymo ir iš anksto sutarto duomenų perdavimo greičio (bodų spartos).
UART veikimo principai
UART komunikacija apima duomenų perdavimą kadrais, kurių kiekvieną sudaro:
- Pradžios bitas (Start Bit): Nurodo naujo duomenų kadro pradžią. Paprastai tai yra žemas (0) signalas.
- Duomenų bitai (Data Bits): Tikrieji perduodami duomenys, dažniausiai 8 bitai (baitas), bet gali būti ir 5, 6 arba 7 bitai.
- Lyginumo bitas (Parity Bit) (neprivalomas): Naudojamas klaidų aptikimui. Jis gali būti lyginis, nelyginis arba nenaudojamas.
- Pabaigos bitas (Stop Bit): Nurodo duomenų kadro pabaigą. Paprastai tai yra aukštas (1) signalas. Dažniausiai naudojamas vienas arba du pabaigos bitai.
Sėkmingai komunikacijai siuntėjas ir imtuvas turi susitarti dėl bodų spartos, duomenų bitų skaičiaus, lyginumo ir pabaigos bitų. Dažniausiai naudojamos bodų spartos yra 9600, 115200 ir kitos. Didesnė bodų sparta leidžia greičiau perduoti duomenis, bet taip pat padidina jautrumą laiko nustatymo klaidoms.
UART taikymo sritys
- Mikrovaldiklių prijungimas prie kompiuterių: UART dažnai naudojamas nuosekliajai jungčiai tarp mikrovaldiklio (pvz., „Arduino“ ar „Raspberry Pi“) ir kompiuterio sukurti programavimui, derinimui ir duomenų registravimui.
- GPS moduliai: Daugelis GPS modulių naudoja UART vietos duomenims perduoti į pagrindinį mikrovaldiklį ar kompiuterį.
- „Bluetooth“ moduliai: „Bluetooth“ moduliai dažnai naudoja UART kaip komunikacijos sąsają su mikrovaldikliu.
- Nuoseklieji spausdintuvai: Senesni nuoseklieji spausdintuvai naudoja UART spausdinimo komandoms ir duomenims gauti.
- Konsolės išvestis: Įterptinės sistemos dažnai naudoja UART derinimo informacijai ir būsenos pranešimams išvesti į nuosekliąją konsolę.
UART pranašumai
- Paprastumas: UART yra palyginti paprasta įgyvendinti tiek aparatinėje, tiek programinėje įrangoje.
- Lankstumas: UART palaiko įvairias duomenų perdavimo spartas, duomenų bitų ilgius ir lyginumo parinktis.
- Platus palaikymas: UART yra plačiai palaikomas standartas su lengvai prieinamais aparatinės ir programinės įrangos sprendimais.
- Nereikalingas laikrodžio signalas: Tai sumažina reikalingų laidų skaičių.
UART trūkumai
- Mažesnė sparta: Palyginti su sinchroniniais protokolais, tokiais kaip SPI, UART paprastai pasižymi mažesne duomenų perdavimo sparta.
- Jautrumas klaidoms: Be patikimo laikrodžio signalo, UART yra jautresnis laiko nustatymo klaidoms ir duomenų pažeidimams. Nors lyginumo bitas gali padėti, jis negarantuoja komunikacijos be klaidų.
- Apribojimas iki dviejų įrenginių: UART iš esmės yra skirtas „taškas-taškas“ komunikacijai tarp dviejų įrenginių. Multipleksavimas gali leisti naudoti kelis įrenginius vienoje UART magistralėje, bet tai prideda sudėtingumo.
UART pavyzdys: „Arduino“ ir nuoseklusis monitorius
Dažnas UART veikimo pavyzdys yra nuosekliojo monitoriaus naudojimas „Arduino IDE“ aplinkoje. „Arduino“ plokštėje yra integruota UART sąsaja, leidžianti jai bendrauti su kompiuteriu per USB. Šis „Arduino“ kodo fragmentas demonstruoja duomenų siuntimą į nuoseklųjį monitorių:
void setup() { Serial.begin(9600); // Inicializuoti nuosekliąją komunikaciją 9600 bodų sparta } void loop() { Serial.println("Hello, world!"); // Siųsti pranešimą „Hello, world!“ į nuoseklųjį monitorių delay(1000); // Laukti 1 sekundę }
Šis paprastas kodas kas sekundę siunčia pranešimą „Hello, world!“ į nuoseklųjį monitorių. Funkcija Serial.begin(9600)
inicializuoja UART sąsają 9600 bodų sparta, kuri turi atitikti nuosekliojo monitoriaus nustatymą.
SPI: Nuoseklioji išorinių įrenginių sąsaja
SPI (angl. Serial Peripheral Interface) yra sinchroninis nuosekliosios komunikacijos protokolas, dažnai naudojamas trumpų atstumų komunikacijai tarp mikrovaldiklių ir išorinių įrenginių. Jis žinomas dėl didelės spartos ir palyginti paprastų aparatinės įrangos reikalavimų.
SPI veikimo principai
SPI naudoja „master-slave“ (pagrindinio-pavaldinio) architektūrą, kur vienas įrenginys (master) valdo komunikaciją, o vienas ar daugiau įrenginių (slaves) atsako į pagrindinio įrenginio komandas. SPI magistralę sudaro keturi pagrindiniai signalai:
- MOSI (Master Out Slave In): Duomenys, perduodami iš pagrindinio įrenginio į pavaldų.
- MISO (Master In Slave Out): Duomenys, perduodami iš pavaldaus įrenginio į pagrindinį.
- SCK (Serial Clock): Laikrodžio signalas, generuojamas pagrindinio įrenginio ir naudojamas duomenų perdavimui sinchronizuoti.
- SS/CS (Slave Select/Chip Select): Signalas, kurį naudoja pagrindinis įrenginys, norėdamas pasirinkti konkretų pavaldų įrenginį komunikacijai. Kiekvienas pavaldus įrenginys paprastai turi savo dedikuotą SS/CS liniją.
Duomenys perduodami sinchroniškai su laikrodžio signalu. Pagrindinis įrenginys inicijuoja komunikaciją, nustatydamas norimo pavaldaus įrenginio SS/CS liniją į žemą lygį. Tada duomenys perkeliami iš pagrindinio įrenginio per MOSI liniją į pavaldų įrenginį kylančioje arba krintančioje SCK signalo briaunoje. Tuo pačiu metu duomenys perkeliami iš pavaldaus įrenginio per MISO liniją į pagrindinį. Tai leidžia vykdyti dvipusę (full-duplex) komunikaciją, o tai reiškia, kad duomenis galima perduoti abiem kryptimis vienu metu.
SPI režimai
SPI turi keturis veikimo režimus, kuriuos nustato du parametrai: laikrodžio poliškumas (CPOL) ir laikrodžio fazė (CPHA). Šie parametrai apibrėžia SCK signalo būseną, kai jis neaktyvus, ir SCK signalo briauną, kurioje duomenys yra nuskaitomi ir perkeliami.
- 0 režimas (CPOL=0, CPHA=0): SCK yra žemos būsenos, kai neaktyvus. Duomenys nuskaitomi kylančioje briaunoje ir perkeliami krintančioje briaunoje.
- 1 režimas (CPOL=0, CPHA=1): SCK yra žemos būsenos, kai neaktyvus. Duomenys nuskaitomi krintančioje briaunoje ir perkeliami kylančioje briaunoje.
- 2 režimas (CPOL=1, CPHA=0): SCK yra aukštos būsenos, kai neaktyvus. Duomenys nuskaitomi krintančioje briaunoje ir perkeliami kylančioje briaunoje.
- 3 režimas (CPOL=1, CPHA=1): SCK yra aukštos būsenos, kai neaktyvus. Duomenys nuskaitomi kylančioje briaunoje ir perkeliami krintančioje briaunoje.
Pagrindinis ir pavaldus įrenginiai turi būti sukonfigūruoti naudoti tą patį SPI režimą sėkmingai komunikacijai. Jei jie nesutampa, duomenys bus iškraipyti arba komunikacija nepavyks.
SPI taikymo sritys
- Atminties kortelės (SD kortelės, microSD kortelės): SPI dažnai naudojamas sąsajai su atminties kortelėmis įterptinėse sistemose.
- Jutikliai: Daugelis jutiklių, tokių kaip akselerometrai, giroskopai ir temperatūros jutikliai, naudoja SPI duomenų perdavimui.
- Ekranai: SPI dažnai naudojamas valdyti LCD ir OLED ekranus.
- Analoginiai-skaitmeniniai keitikliai (ADC) ir skaitmeniniai-analoginiai keitikliai (DAC): SPI naudojamas komunikacijai su ADC ir DAC duomenų rinkimo ir valdymo programose.
- Postūmio registrai: SPI gali būti naudojamas valdyti postūmio registrus, siekiant padidinti mikrovaldiklio skaitmeninių I/O kontaktų skaičių.
SPI pranašumai
- Didelė sparta: SPI siūlo žymiai didesnę duomenų perdavimo spartą, palyginti su UART.
- Dvipusė (full-duplex) komunikacija: Duomenis galima perduoti abiem kryptimis vienu metu.
- Keli pavaldūs įrenginiai: Vienas pagrindinis įrenginys gali bendrauti su keliais pavaldžiais įrenginiais.
- Santykinai paprasta aparatinė įranga: SPI reikalauja tik keturių laidų (plius viena SS/CS linija kiekvienam pavaldžiam įrenginiui).
SPI trūkumai
- Nėra adresavimo schemos: SPI remiasi SS/CS linijomis pavaldiems įrenginiams pasirinkti, o tai gali tapti sudėtinga esant dideliam pavaldžių įrenginių skaičiui.
- Trumpas atstumas: SPI paprastai yra apribotas trumpais atstumais dėl signalo degradacijos didesniu greičiu.
- Nėra klaidų aptikimo: SPI neturi integruotų klaidų aptikimo mechanizmų. Klaidų tikrinimas turi būti įgyvendintas programinėje įrangoje.
- Sudėtingesnis programinis įgyvendinimas: Nors aparatinė įranga yra gana paprasta, programinis įgyvendinimas gali būti sudėtingesnis nei UART, ypač dirbant su keliais pavaldžiais įrenginiais ir skirtingais SPI režimais.
SPI pavyzdys: sąsaja su akselerometru
Daugelis akselerometrų, pavyzdžiui, populiarusis ADXL345, naudoja SPI komunikacijai. Norėdamas nuskaityti pagreičio duomenis iš ADXL345, mikrovaldiklis (veikiantis kaip pagrindinis įrenginys) turi nusiųsti komandą akselerometrui (veikiančiam kaip pavaldus įrenginys), kad nuskaitytų atitinkamus registrus. Šis pseudokodas iliustruoja procesą:
- Pasirinkite ADXL345, nustatydami jo SS/CS liniją į žemą lygį.
- Nusiųskite norimo nuskaityti registro adresą (pvz., X ašies pagreičio duomenų adresą).
- Nuskaitykite duomenis iš MISO linijos (X ašies pagreičio vertę).
- Pakartokite 2 ir 3 veiksmus Y ir Z ašims.
- Atšaukite ADXL345 pasirinkimą, nustatydami jo SS/CS liniją į aukštą lygį.
Konkrečios komandos ir registrų adresai priklausys nuo akselerometro modelio. Norint sužinoti tikslias procedūras, visada reikia peržiūrėti duomenų lapą.
UART ir SPI palyginimas
Šioje lentelėje apibendrinami pagrindiniai UART ir SPI skirtumai:
Savybė | UART | SPI |
---|---|---|
Komunikacijos tipas | Asinchroninis | Sinchroninis |
Laikrodžio signalas | Nėra | Bendras laikrodis |
Laidų skaičius | 2 (TX, RX) | 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS kiekvienam pavaldžiam įrenginiui |
Duomenų perdavimo sparta | Mažesnė | Didesnė |
Dvipusė (Full-Duplex) | Paprastai vienpusė (half-duplex) (nors kartais galima imituoti dvipusę su sudėtingesne programine įranga) | Dvipusė (Full-Duplex) |
Klaidų aptikimas | Lyginumo bitas (neprivalomas) | Nėra (reikalingas programinis įgyvendinimas) |
Įrenginių skaičius | 2 („taškas-taškas“) | Keli („master-slave“) |
Sudėtingumas | Paprastesnis | Sudėtingesnis |
Atstumas | Ilgesnis | Trumpesnis |
Tinkamo protokolo pasirinkimas
Pasirinkimas tarp UART ir SPI priklauso nuo konkrečių taikymo reikalavimų. Atsižvelkite į šiuos veiksnius:
- Duomenų perdavimo sparta: Jei reikalingas greitas duomenų perdavimas, SPI paprastai yra geresnis pasirinkimas.
- Atstumas: Ilgesniems atstumams labiau tinka UART.
- Įrenginių skaičius: Jei keli įrenginiai turi bendrauti su vienu pagrindiniu įrenginiu, pirmenybė teikiama SPI.
- Sudėtingumas: Jei prioritetas yra paprastumas, UART yra lengviau įgyvendinti.
- Klaidų aptikimas: Jei klaidų aptikimas yra labai svarbus, apsvarstykite galimybę naudoti UART su lyginumo bitu arba įgyvendinti klaidų tikrinimą programinėje įrangoje, naudojant SPI.
- Prieinami aparatiniai ištekliai: Kai kurie mikrovaldikliai gali turėti ribotą vieno ar kito protokolo palaikymą. Priimdami sprendimą, atsižvelkite į turimus aparatinės įrangos išteklius.
Pavyzdžiui, paprastoje jutiklio programoje, kur mikrovaldiklis turi nuskaityti duomenis iš vieno jutiklio per trumpą atstumą, SPI gali būti geresnis pasirinkimas dėl didesnės spartos. Tačiau, jei mikrovaldiklis turi bendrauti su kompiuteriu per ilgesnį atstumą derinimo tikslais, tinkamesnis būtų UART.
Papildomi aspektai
I2C (Inter-Integrated Circuit)
Nors šis straipsnis skirtas UART ir SPI, svarbu paminėti ir I2C (Inter-Integrated Circuit) kaip kitą paplitusį nuosekliosios komunikacijos protokolą. I2C yra dviejų laidų protokolas, palaikantis kelis pagrindinius ir pavaldžius įrenginius toje pačioje magistralėje. Jis dažnai naudojamas komunikacijai tarp integrinių grandynų plokštėje. Skirtingai nuo SPI, I2C naudoja adresavimą, o tai supaprastina didelius įrenginių tinklus.
TTL ir RS-232
Dirbant su UART, svarbu suprasti skirtumą tarp TTL (tranzistorių-tranzistorių logikos) ir RS-232 įtampos lygių. TTL logika naudoja 0V ir 5V (arba 3.3V) atitinkamai žemam ir aukštam loginiam lygiui pavaizduoti. Tuo tarpu RS-232 naudoja ±12V įtampą. Tiesioginis TTL UART prijungimas prie RS-232 UART gali sugadinti įrenginius. Reikalingas lygio keitiklis (pvz., MAX232 lustas), kad būtų galima konvertuoti tarp TTL ir RS-232 įtampos lygių.
Klaidų tvarkymas
Kadangi UART ir SPI turi ribotus klaidų aptikimo mechanizmus, svarbu įgyvendinti klaidų tvarkymą programinėje įrangoje. Dažniausiai naudojamos technikos apima kontrolines sumas, ciklinius pertekliaus patikrinimus (CRC) ir laukimo laiko mechanizmus.
Išvada
UART ir SPI yra esminiai nuosekliosios komunikacijos protokolai, skirti įterptinėms sistemoms ir ne tik. UART siūlo paprastumą ir lankstumą, todėl tinka mikrovaldikliams prijungti prie kompiuterių ir kitų įrenginių ilgesniais atstumais. SPI užtikrina greitą komunikaciją trumpų atstumų taikymuose, pavyzdžiui, sąsajai su jutikliais, atminties kortelėmis ir ekranais. Suprasdami kiekvieno protokolo principus, pranašumus ir trūkumus, galėsite priimti pagrįstus sprendimus projektuodami savo kitą įterptinę sistemą ar elektronikos projektą. Tobulėjant technologijoms, tobulės ir šių nuosekliosios komunikacijos metodų taikymas. Nuolatinis prisitaikymas ir mokymasis užtikrins, kad inžinieriai ir mėgėjai galės išnaudoti visą šių protokolų potencialą.