Uzziniet par UART un SPI protokoliem: to principiem, atšķirībām, pielietojumiem un priekšrocībām/trūkumiem iegultajās sistēmās.
Seriālā komunikācija bez noslēpumiem: padziļināta izpēte UART un SPI
Elektronikas un iegulto sistēmu pasaulē ierīču savstarpējā komunikācija ir ārkārtīgi svarīga. Seriālā komunikācija nodrošina uzticamu un efektīvu datu pārsūtīšanas metodi starp mikrokontrolieriem, sensoriem, perifērijas ierīcēm un pat datoriem. Divi no visizplatītākajiem seriālās komunikācijas protokoliem ir UART (Universal Asynchronous Receiver/Transmitter) un SPI (Serial Peripheral Interface). Šis visaptverošais ceļvedis iedziļināsies gan UART, gan SPI niansēs, pētot to principus, atšķirības, pielietojumus, priekšrocības un trūkumus.
Seriālās komunikācijas izpratne
Seriālā komunikācija ir metode datu pārsūtīšanai pa vienam bitam pa vienu vadu (vai dažiem vadiem vadības signāliem), atšķirībā no paralēlās komunikācijas, kas vienlaicīgi sūta vairākus bitus pa vairākiem vadiem. Lai gan paralēlā komunikācija ir ātrāka īsām distancēm, seriālā komunikācija parasti tiek dota priekšroka garākām distancēm un situācijām, kur vadu skaita samazināšana ir kritiska. Tas padara to ideālu iegultajām sistēmām, kur telpa un izmaksas bieži vien ir būtiski ierobežojumi.
Asinhronā pret Sinhrono komunikāciju
Seriālo komunikāciju var plaši iedalīt divās kategorijās: asinhronā un sinhronā. Asinhronā komunikācija, piemēram, UART, neprasa kopīgu pulksteņa signālu starp sūtītāju un uztvērēju. Tā vietā tā balstās uz starta un beigu bitiem, lai kadrētu katru datu baitu. Sinhronā komunikācija, piemēram, SPI un I2C, izmanto kopīgu pulksteņa signālu, lai sinhronizētu datu pārraidi starp ierīcēm.
UART: Universālais Asinhronais Uztvērējs/Raidītājs
UART ir plaši izmantots seriālās komunikācijas protokols galvenokārt tā vienkāršības un elastības dēļ. Tas ir asinhronais protokols, kas nozīmē, ka sūtītājs un uztvērējs nedala kopīgu pulksteņa signālu. Tas vienkāršo aparatūras prasības, taču prasa precīzu laika kontroli un iepriekš saskaņotu datu pārraides ātrumu (bodu ātrumu).
UART principi
UART komunikācija ietver datu pārraidi kadros, katrs no tiem sastāv no šādiem elementiem:
- Starta bits: Norāda jauna datu kadra sākumu. Parasti tas ir zems (0) signāls.
- Datu biti: Faktiskie dati, kas tiek pārsūtīti, parasti 8 biti (baits), bet var būt arī 5, 6 vai 7 biti.
- Paritātes bits (pēc izvēles): Izmanto kļūdu noteikšanai. Tas var būt pāra, nepāra vai bez.
- Beigu bits: Norāda datu kadra beigas. Parasti tas ir augsts (1) signāls. Bieži izmanto vienu vai divus beigu bitus.
Sūtītājam un uztvērējam ir jāvienojas par bodu ātrumu, datu bitiem, paritāti un beigu bitiem, lai komunikācija būtu veiksmīga. Bieži izmantotie bodu ātrumi ir 9600, 115200 un citi. Lielāks bodu ātrums nodrošina ātrāku datu pārraidi, bet arī palielina jutību pret laika kļūdām.
UART pielietojumi
- Mikrokontrolieru savienošana ar datoriem: UART parasti izmanto, lai izveidotu seriālo savienojumu starp mikrokontrolieri (piemēram, Arduino vai Raspberry Pi) un datoru programmēšanai, atkļūdošanai un datu reģistrēšanai.
- GPS moduļi: Daudzi GPS moduļi izmanto UART, lai pārsūtītu atrašanās vietas datus uz resursdatora mikrokontrolieri vai datoru.
- Bluetooth moduļi: Bluetooth moduļi bieži izmanto UART kā komunikācijas saskarni ar mikrokontrolieri.
- Seriālie printeri: Vecāki seriālie printeri izmanto UART drukāšanas komandu un datu saņemšanai.
- Konsoles izvade: Iegultās sistēmas bieži izmanto UART, lai izvadītu atkļūdošanas informāciju un statusa ziņojumus uz seriālo konsoli.
UART priekšrocības
- Vienkāršība: UART ir salīdzinoši vienkārši implementēt gan aparatūrā, gan programmatūrā.
- Elastība: UART atbalsta dažādus datu pārraides ātrumus, datu bitu garumus un paritātes opcijas.
- Plaši atbalstīts: UART ir plaši atbalstīts standarts ar viegli pieejamām aparatūras un programmatūras implementācijām.
- Nav nepieciešams pulksteņa signāls: Tas samazina nepieciešamo vadu skaitu.
UART trūkumi
- Zemāks ātrums: Salīdzinot ar sinhronajiem protokoliem, piemēram, SPI, UART parasti ir zemāks datu pārraides ātrums.
- Jutība pret kļūdām: Bez uzticama pulksteņa signāla UART ir jutīgāks pret laika kļūdām un datu bojājumiem. Lai gan paritātes bits var palīdzēt, tas negarantē komunikāciju bez kļūdām.
- Ierobežots līdz divām ierīcēm: UART galvenokārt ir paredzēts punktu-punktu komunikācijai starp divām ierīcēm. Multipleksēšana var ļaut vairākām ierīcēm izmantot vienu UART kopni, taču tas palielina sarežģītību.
UART piemērs: Arduino un seriālais monitors
Bieži sastopams UART darbības piemērs ir seriālā monitora izmantošana Arduino IDE. Arduino platei ir iebūvēta UART saskarne, kas ļauj tai sazināties ar datoru, izmantojot USB. Šis Arduino koda fragments demonstrē datu sūtīšanu uz seriālo monitoru:
void setup() { Serial.begin(9600); // Inicializē seriālo komunikāciju ar 9600 bodu } void loop() { Serial.println("Hello, world!"); // Nosūta ziņojumu "Hello, world!" uz seriālo monitoru delay(1000); // Gaida 1 sekundi }
Šis vienkāršais kods katru sekundi nosūta ziņojumu "Hello, world!" uz seriālo monitoru. Funkcija Serial.begin(9600)
inicializē UART saskarni ar bodu ātrumu 9600, kam jāatbilst seriālā monitora iestatījumam.
SPI: Seriālā Perifērijas Saskarne
SPI (Serial Peripheral Interface) ir sinhronais seriālās komunikācijas protokols, ko parasti izmanto īsu attālumu saziņai starp mikrokontrolieriem un perifērijas ierīcēm. Tas ir pazīstams ar savu lielo ātrumu un salīdzinoši vienkāršām aparatūras prasībām.
SPI principi
SPI izmanto master-slave arhitektūru, kur viena ierīce (master) kontrolē komunikāciju un viena vai vairākas ierīces (slaves) reaģē uz master komandām. SPI kopne sastāv no četriem galvenajiem signāliem:
- MOSI (Master Out Slave In): Dati, kas tiek nosūtīti no mastera uz slave.
- MISO (Master In Slave Out): Dati, kas tiek nosūtīti no slave uz masteru.
- SCK (Seriālais pulkstenis): Pulksteņa signāls, ko ģenerē master, izmanto datu pārraides sinhronizēšanai.
- SS/CS (Slave Select/Chip Select): Signāls, ko master izmanto, lai izvēlētos konkrētu slave ierīci komunikācijai. Katrai slave ierīcei parasti ir sava atsevišķa SS/CS līnija.
Dati tiek pārsūtīti sinhronā veidā ar pulksteņa signālu. Master uzsāk komunikāciju, nolaižot vēlamās slave ierīces SS/CS līniju. Pēc tam dati tiek pārvietoti no mastera pa MOSI līniju un slave iekšpusē pa SCK signāla augošo vai krītošo malu. Vienlaicīgi dati tiek pārvietoti no slave pa MISO līniju un master iekšpusē. Tas nodrošina pilnu dupleksa komunikāciju, kas nozīmē, ka datus var pārsūtīt abos virzienos vienlaicīgi.
SPI režīmi
SPI ir četri darbības režīmi, ko nosaka divi parametri: pulksteņa polaritāte (CPOL) un pulksteņa fāze (CPHA). Šie parametri nosaka SCK signāla stāvokli dīkstāvē un SCK signāla malu, uz kuras dati tiek nolasīti un pārvietoti.
- 0. režīms (CPOL=0, CPHA=0): SCK ir zems dīkstāvē. Dati tiek nolasīti augošajā malā un pārvietoti krītošajā malā.
- 1. režīms (CPOL=0, CPHA=1): SCK ir zems dīkstāvē. Dati tiek nolasīti krītošajā malā un pārvietoti augošajā malā.
- 2. režīms (CPOL=1, CPHA=0): SCK ir augsts dīkstāvē. Dati tiek nolasīti krītošajā malā un pārvietoti augošajā malā.
- 3. režīms (CPOL=1, CPHA=1): SCK ir augsts dīkstāvē. Dati tiek nolasīti augošajā malā un pārvietoti krītošajā malā.
Master un slave ierīcēm jābūt konfigurētām tā, lai tās izmantotu vienu un to pašu SPI režīmu veiksmīgai komunikācijai. Ja tās nav, rezultātā būs bojāti dati vai komunikācijas kļūme.
SPI pielietojumi
- Atmiņas kartes (SD kartes, microSD kartes): SPI bieži izmanto saskarnei ar atmiņas kartēm iegultajās sistēmās.
- Sensori: Daudzi sensori, piemēram, akselerometri, žiroskopi un temperatūras sensori, izmanto SPI datu pārraidei.
- Displeji: SPI parasti izmanto LCD un OLED displeju vadīšanai.
- Analogdigitālie pārveidotāji (ADC) un digitālanalogie pārveidotāji (DAC): SPI izmanto, lai sazinātos ar ADC un DAC datu iegūšanai un vadības lietojumprogrammām.
- Pārslēgšanas reģistri: SPI var izmantot, lai vadītu pārslēgšanas reģistrus, lai paplašinātu mikrokontroliera pieejamo digitālo I/O pieslēgvietu skaitu.
SPI priekšrocības
- Liels ātrums: SPI piedāvā ievērojami augstākus datu pārraides ātrumus, salīdzinot ar UART.
- Pilndupleksa komunikācija: Datus var pārsūtīt abos virzienos vienlaicīgi.
- Vairāki slavi: Viens master var sazināties ar vairākām slave ierīcēm.
- Salīdzinoši vienkārša aparatūra: SPI prasa tikai četrus vadus (plus vienu SS/CS līniju katrai slave ierīcei).
SPI trūkumi
- Nav adresācijas shēmas: SPI paļaujas uz SS/CS līnijām, lai izvēlētos slave ierīces, kas var kļūt apgrūtinoši ar lielu slave skaitu.
- Īss attālums: SPI parasti ir ierobežots līdz īsiem attālumiem signāla degradācijas dēļ pie lielākiem ātrumiem.
- Nav kļūdu noteikšanas: SPI nav iebūvētu kļūdu noteikšanas mehānismu. Kļūdu pārbaude jāimplementē programmatūrā.
- Sarežģītāka programmatūras implementācija: Lai gan aparatūra ir salīdzinoši vienkārša, programmatūras implementācija var būt sarežģītāka nekā UART, īpaši, ja tiek strādāts ar vairākiem slāviem un dažādiem SPI režīmiem.
SPI piemērs: Sasaiste ar akselerometru
Daudzi akselerometri, piemēram, populārais ADXL345, komunikācijai izmanto SPI. Lai nolasītu paātrinājuma datus no ADXL345, mikrokontrolierim (darbojoties kā masteram) jānosūta komanda akselerometram (darbojoties kā slavei), lai nolasītu atbilstošos reģistrus. Šis pseidokods ilustrē procesu:
- Izvēlieties ADXL345, nolaižot tā SS/CS līniju.
- Nosūtiet reģistra adresi, kas jālasa (piemēram, X ass paātrinājuma datu adresi).
- Nolasiet datus no MISO līnijas (X ass paātrinājuma vērtību).
- Atkārtojiet 2. un 3. darbību Y un Z asīm.
- Atslēdziet ADXL345, paceļot tā SS/CS līniju augstu.
Konkrētās komandas un reģistru adreses atšķirsies atkarībā no akselerometra modeļa. Lai iegūtu precīzas procedūras, vienmēr jāiepazīstas ar datu lapu.
UART pret SPI: Salīdzinājums
Šeit ir tabula, kas apkopo galvenās atšķirības starp UART un SPI:
Funkcija | UART | SPI |
---|---|---|
Komunikācijas veids | Asinhronais | Sinhronais |
Pulksteņa signāls | Nav | Kopīgs pulkstenis |
Vadu skaits | 2 (TX, RX) | 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS uz slave |
Datu pārraides ātrums | Zemāks | Augstāks |
Pilns duplekss | Parasti pusduplekss (lai gan dažreiz var simulēt pilnu dupleksu ar sarežģītu programmatūru) | Pilns duplekss |
Kļūdu noteikšana | Paritātes bits (pēc izvēles) | Nav (nepieciešama programmatūras implementācija) |
Ierīču skaits | 2 (punkts-punkts) | Vairākas (Master-Slave) |
Sarežģītība | Vienkāršāks | Sarežģītāks |
Attālums | Garāks | Īsāks |
Pareizā protokola izvēle
Izvēle starp UART un SPI ir atkarīga no konkrētās lietojumprogrammas prasībām. Apsveriet šādus faktorus:
- Datu pārraides ātrums: Ja nepieciešama liela ātruma datu pārraide, SPI parasti ir labāka izvēle.
- Attālums: Garākiem attālumiem UART ir piemērotāks.
- Ierīču skaits: Ja vairākām ierīcēm jāsazinās ar vienu masteru, dodama priekšroka SPI.
- Sarežģītība: Ja prioritāte ir vienkāršība, UART ir vieglāk implementēt.
- Kļūdu noteikšana: Ja kļūdu noteikšana ir būtiska, apsveriet UART izmantošanu ar paritātes bitu vai kļūdu pārbaudes implementēšanu programmatūrā SPI gadījumā.
- Pieejamā aparatūra: Dažiem mikrokontrolieriem var būt ierobežots atbalsts vienam vai otram protokolam. Izvēloties lēmumu, ņemiet vērā pieejamos aparatūras resursus.
Piemēram, vienkāršā sensoru lietojumprogrammā, kurā mikrokontrolierim ir jānolasa dati no viena sensora īsā attālumā, SPI varētu būt labāka izvēle tā lielākā ātruma dēļ. Tomēr, ja mikrokontrolierim jāsazinās ar datoru lielākā attālumā atkļūdošanas nolūkos, UART būtu piemērotāks.
Paplašinātie apsvērumi
I2C (Inter-Integrated Circuit)
Lai gan šis raksts koncentrējas uz UART un SPI, ir svarīgi pieminēt I2C (Inter-Integrated Circuit) kā citu izplatītu seriālās komunikācijas protokolu. I2C ir divu vadu protokols, kas atbalsta vairākas master un slave ierīces vienā kopnē. To bieži izmanto komunikācijai starp integrētajām shēmām uz shēmas plates. I2C izmanto adresāciju, atšķirībā no SPI, vienkāršojot lielu ierīču tīklu.
TTL pret RS-232
Strādājot ar UART, ir svarīgi saprast atšķirību starp TTL (Transistor-Transistor Logic) un RS-232 sprieguma līmeņiem. TTL loģika izmanto 0V un 5V (vai 3.3V), lai attiecīgi attēlotu loģisko zemo un augsto līmeni. Savukārt RS-232 izmanto ±12V spriegumus. Tieša TTL UART savienošana ar RS-232 UART var sabojāt ierīces. Starp TTL un RS-232 sprieguma līmeņiem ir nepieciešams līmeņa pārveidotājs (piemēram, MAX232 mikroshēma).
Kļūdu apstrāde
Tā kā UART un SPI ir ierobežoti kļūdu noteikšanas mehānismi, ir svarīgi implementēt kļūdu apstrādi programmatūrā. Bieži izmantotās metodes ietver kontrolsummas, cikliskās redundances pārbaudes (CRC) un laika ierobežojuma mehānismus.
Secinājums
UART un SPI ir būtiski seriālās komunikācijas protokoli iegultajām sistēmām un ārpus tām. UART piedāvā vienkāršību un elastību, padarot to piemērotu mikrokontrolieru savienošanai ar datoriem un citām ierīcēm lielākos attālumos. SPI nodrošina liela ātruma komunikāciju īsu attālumu lietojumprogrammām, piemēram, saskarnei ar sensoriem, atmiņas kartēm un displejiem. Izpratne par katra protokola principiem, priekšrocībām un trūkumiem ļauj pieņemt apzinātus lēmumus, veidojot savu nākamo iegulto sistēmu vai elektronikas projektu. Tehnoloģijām attīstoties, attīstīsies arī šo seriālās komunikācijas metožu pielietojums. Nepārtraukta pielāgošanās un mācīšanās nodrošinās, ka gan inženieri, gan hobisti varēs pilnībā izmantot šo protokolu potenciālu.