Tutustu UART:iin ja SPI:hin, kahteen olennaiseen sarjaviestintäprotokollaan. Ymmärrä niiden periaatteet, erot, sovellukset, edut ja haitat sulautetuissa järjestelmissä ja niiden ulkopuolella.
Sarjaviestintä Selvitettynä: Syväsukellus UART:iin ja SPI:hin
Elektroniikan ja sulautettujen järjestelmien maailmassa laitteiden kyky kommunikoida keskenään on ensiarvoisen tärkeää. Sarjaviestintä tarjoaa luotettavan ja tehokkaan menetelmän tiedon siirtämiseen mikrokontrollereiden, antureiden, oheislaitteiden ja jopa tietokoneiden välillä. Kaksi yleisintä sarjaviestintäprotokollaa ovat UART (Universal Asynchronous Receiver/Transmitter) ja SPI (Serial Peripheral Interface). Tämä kattava opas sukeltaa sekä UART:in että SPI:n monimutkaisuuksiin tutkien niiden periaatteita, eroja, sovelluksia, etuja ja haittoja.
Sarjaviestinnän Ymmärtäminen
Sarjaviestintä on menetelmä, jossa dataa lähetetään yksi bitti kerrallaan yhden johdon yli (tai muutaman johdon yli ohjaussignaaleja varten), vastakohtana rinnakkaisviestinnälle, joka lähettää useita bittejä samanaikaisesti useiden johtojen yli. Vaikka rinnakkaisviestintä on nopeampaa lyhyillä etäisyyksillä, sarjaviestintää pidetään yleensä parempana pidemmillä etäisyyksillä ja tilanteissa, joissa johtojen määrän minimointi on ratkaisevan tärkeää. Tämä tekee siitä ihanteellisen sulautetuille järjestelmille, joissa tila ja kustannukset ovat usein merkittäviä rajoituksia.
Asynkroninen vs. Synkroninen Viestintä
Sarjaviestintä voidaan jakaa karkeasti kahteen luokkaan: asynkroniseen ja synkroniseen. Asynkroninen viestintä, kuten UART, ei vaadi jaettua kellosignaalia lähettäjän ja vastaanottajan välillä. Sen sijaan se käyttää alku- ja loppubittejä kunkin datatavun kehystämiseen. Synkroninen viestintä, kuten SPI ja I2C, käyttää jaettua kellosignaalia synkronoimaan tiedonsiirron laitteiden välillä.
UART: Universal Asynchronous Receiver/Transmitter
UART on laajalti käytetty sarjaviestintäprotokolla pääasiassa sen yksinkertaisuuden ja joustavuuden vuoksi. Se on asynkroninen protokolla, mikä tarkoittaa, että lähettäjä ja vastaanottaja eivät jaa yhteistä kellosignaalia. Tämä yksinkertaistaa laitteistovaatimuksia, mutta edellyttää tarkkaa ajoitusta ja ennalta sovittua tiedonsiirtonopeutta (baudinopeutta).
UART:in Periaatteet
UART-viestintä sisältää tiedon lähettämisen kehyksissä, joista jokainen koostuu seuraavista:
- Aloitusbitti: Ilmaisee uuden datakehyksen alkamisen. Se on tyypillisesti matala (0) signaali.
- Databitit: Varsinainen lähetettävä data, yleensä 8 bittiä (tavu), mutta voi olla myös 5, 6 tai 7 bittiä.
- Pariteettibitti (valinnainen): Käytetään virheiden havaitsemiseen. Se voi olla parillinen, pariton tai ei mitään.
- Lopetusbitti: Ilmaisee datakehyksen päättymisen. Se on tyypillisesti korkea (1) signaali. Yksi tai kaksi lopetusbittiä ovat yleisiä.
Lähettäjän ja vastaanottajan on sovittava baudinopeudesta, databiteistä, pariteetista ja lopetusbiteistä onnistuneen viestinnän varmistamiseksi. Yleisiä baudinopeuksia ovat 9600, 115200 ja muut. Korkeampi baudinopeus mahdollistaa nopeamman tiedonsiirron, mutta lisää myös herkkyyttä ajoitusvirheille.
UART:in Sovellukset
- Mikrokontrollereiden Liittäminen Tietokoneisiin: UART:ia käytetään yleisesti sarjaliikenteen luomiseen mikrokontrollerin (kuten Arduino tai Raspberry Pi) ja tietokoneen välille ohjelmointia, virheenkorjausta ja datan kirjaamista varten.
- GPS-moduulit: Monet GPS-moduulit käyttävät UART:ia sijaintitietojen lähettämiseen isäntämikrokontrollerille tai tietokoneelle.
- Bluetooth-moduulit: Bluetooth-moduulit käyttävät usein UART:ia tiedonsiirtoliittymänä mikrokontrollerin kanssa.
- Sarjaporttitulostimet: Vanhemmat sarjaporttitulostimet käyttävät UART:ia tulostuskomennojen ja datan vastaanottamiseen.
- Konsolitulostus: Sulautetut järjestelmät käyttävät usein UART:ia virheenkorjaustietojen ja tilaviestien tulostamiseen sarjakonsoliin.
UART:in Edut
- Yksinkertaisuus: UART on suhteellisen yksinkertainen toteuttaa sekä laitteistossa että ohjelmistossa.
- Joustavuus: UART tukee erilaisia tiedonsiirtonopeuksia, databittien pituuksia ja pariteettivaihtoehtoja.
- Laajasti Tuettu: UART on laajalti tuettu standardi, jolla on helposti saatavilla laitteisto- ja ohjelmistototeutuksia.
- Ei Kellosignaalia: Tämä vähentää tarvittavien johtojen määrää.
UART:in Haitat
- Pienempi Nopeus: Verrattuna synkronisiin protokollan, kuten SPI, UART:illa on tyypillisesti pienempi tiedonsiirtonopeus.
- Virheherkkyys: Ilman luotettavaa kellosignaalia UART on herkempi ajoitusvirheille ja datan vioittumiselle. Vaikka pariteettibitti voi auttaa, se ei takaa virheetöntä tiedonsiirtoa.
- Rajoitettu Kahteen Laitteeseen: UART on ensisijaisesti suunniteltu point-to-point-viestintään kahden laitteen välillä. Multipleksointi voi mahdollistaa useita laitteita yhdellä UART-väylällä, mutta se lisää monimutkaisuutta.
UART-esimerkki: Arduino ja Serial Monitor
Yleinen esimerkki UART:in toiminnasta on Serial Monitorin käyttö Arduino IDE:ssä. Arduino-kortissa on sisäänrakennettu UART-liitäntä, jonka avulla se voi kommunikoida tietokoneen kanssa USB:n kautta. Seuraava Arduino-koodinpätkä havainnollistaa datan lähettämistä Serial Monitoriin:void setup() { Serial.begin(9600); // Alusta sarjaviestintä 9600 baudilla } void loop() { Serial.println("Hello, world!"); // Lähetä viesti "Hello, world!" Serial Monitoriin delay(1000); // Odota 1 sekunti }Tämä yksinkertainen koodi lähettää viestin "Hello, world!" Serial Monitoriin joka sekunti.
Serial.begin(9600)
-funktio alustaa UART-liitännän 9600 baudinopeudella, jonka on vastattava Serial Monitorin asetusta.
SPI: Serial Peripheral Interface
SPI (Serial Peripheral Interface) on synkroninen sarjaviestintäprotokolla, jota käytetään yleisesti lyhyen matkan viestintään mikrokontrollereiden ja oheislaitteiden välillä. Se tunnetaan suuresta nopeudestaan ja suhteellisen yksinkertaisista laitteistovaatimuksistaan.
SPI:n Periaatteet
SPI käyttää master-slave-arkkitehtuuria, jossa yksi laite (master) ohjaa viestintää ja yksi tai useampi laite (slaves) vastaa masterin komentoihin. SPI-väylä koostuu neljästä pääsignaalista:
- MOSI (Master Out Slave In): Data, joka lähetetään masterista slaveen.
- MISO (Master In Slave Out): Data, joka lähetetään slavesta masteriin.
- SCK (Serial Clock): Masterin luoma kellosignaali, jota käytetään tiedonsiirron synkronointiin.
- SS/CS (Slave Select/Chip Select): Signaali, jota master käyttää valitsemaan tietyn slave-laitteen, jonka kanssa kommunikoida. Jokaisella slave-laitteella on tyypillisesti oma dedikoitu SS/CS-linjansa.
Data lähetetään synkronisesti kellosignaalin kanssa. Master aloittaa viestinnän vetämällä halutun slaven SS/CS-linjan alas. Data siirretään sitten masterista MOSI-linjalla ja slaveen SCK-signaalin nousevalla tai laskevalla reunalla. Samanaikaisesti data siirretään slavesta MISO-linjalla ja masteriin. Tämä mahdollistaa full-duplex-viestinnän, mikä tarkoittaa, että dataa voidaan lähettää molempiin suuntiin samanaikaisesti.
SPI-tilat
SPI:llä on neljä toimintatilaa, jotka määritetään kahdella parametrilla: Clock Polarity (CPOL) ja Clock Phase (CPHA). Nämä parametrit määrittävät SCK-signaalin tilan, kun se on joutokäynnillä, ja SCK-signaalin reunan, josta data näytteistetään ja siirretään.
- Tila 0 (CPOL=0, CPHA=0): SCK on matala joutokäynnillä. Data näytteistetään nousevalla reunalla ja siirretään laskevalla reunalla.
- Tila 1 (CPOL=0, CPHA=1): SCK on matala joutokäynnillä. Data näytteistetään laskevalla reunalla ja siirretään nousevalla reunalla.
- Tila 2 (CPOL=1, CPHA=0): SCK on korkea joutokäynnillä. Data näytteistetään laskevalla reunalla ja siirretään nousevalla reunalla.
- Tila 3 (CPOL=1, CPHA=1): SCK on korkea joutokäynnillä. Data näytteistetään nousevalla reunalla ja siirretään laskevalla reunalla.
Master- ja slave-laitteet on määritettävä käyttämään samaa SPI-tilaa onnistuneen viestinnän varmistamiseksi. Jos näin ei ole, seurauksena on vääristynyttä dataa tai viestintävirhe.
SPI:n Sovellukset
- Muistikortit (SD-kortit, microSD-kortit): SPI:tä käytetään usein liittymään muistikortteihin sulautetuissa järjestelmissä.
- Anturit: Monet anturit, kuten kiihtyvyysanturit, gyroskoopit ja lämpötila-anturit, käyttävät SPI:tä tiedonsiirtoon.
- Näytöt: SPI:tä käytetään yleisesti LCD- ja OLED-näyttöjen ohjaamiseen.
- Analogia-digitaalimuuntimet (ADC) ja digitaali-analogiamuuntimet (DAC): SPI:tä käytetään kommunikointiin ADC:iden ja DAC:ien kanssa datan hankinta- ja ohjaussovelluksissa.
- Siirtorekisterit: SPI:tä voidaan käyttää siirtorekisterien ohjaamiseen, jotta voidaan laajentaa mikrokontrollerissa käytettävissä olevien digitaalisten I/O-nastojen määrää.
SPI:n Edut
- Suuri Nopeus: SPI tarjoaa huomattavasti suuremmat tiedonsiirtonopeudet verrattuna UART:iin.
- Full-Duplex-Viestintä: Dataa voidaan lähettää molempiin suuntiin samanaikaisesti.
- Useita Slaveja: Yksi master voi kommunikoida useiden slave-laitteiden kanssa.
- Suhteellisen Yksinkertainen Laitteisto: SPI vaatii vain neljä johtoa (sekä yhden SS/CS-linjan slave-laitetta kohti).
SPI:n Haitat
- Ei Osoitusjärjestelmää: SPI luottaa SS/CS-linjoihin slave-laitteiden valinnassa, mikä voi tulla hankalaksi, kun on suuri määrä slaveja.
- Lyhyt Etäisyys: SPI on yleensä rajoitettu lyhyille etäisyyksille signaalin heikkenemisen vuoksi suuremmilla nopeuksilla.
- Ei Virheiden Havaitsemista: SPI:ssä ei ole sisäänrakennettuja virheiden havaitsemismekanismeja. Virheiden tarkistus on toteutettava ohjelmistossa.
- Monimutkaisempi Ohjelmistototeutus: Vaikka laitteisto on suhteellisen yksinkertainen, ohjelmistototeutus voi olla monimutkaisempi kuin UART, erityisesti kun käsitellään useita slaveja ja erilaisia SPI-tiloja.
SPI-esimerkki: Liittäminen Kiihtyvyysanturiin
Monet kiihtyvyysanturit, kuten suosittu ADXL345, käyttävät SPI:tä viestintään. Kiihtyvyystietojen lukemiseksi ADXL345:stä mikrokontrollerin (toimien masterina) on lähetettävä komento kiihtyvyysanturille (toimien slavena) lukeakseen sopivat rekisterit. Seuraava pseudokoodi havainnollistaa prosessia:
- Valitse ADXL345 vetämällä sen SS/CS-linja alas.
- Lähetä luettavan rekisterin osoite (esim. X-akselin kiihtyvyystiedon osoite).
- Lue data MISO-linjalta (X-akselin kiihtyvyysarvo).
- Toista vaiheet 2 ja 3 Y- ja Z-akselille.
- Poista ADXL345 valinta vetämällä sen SS/CS-linja ylös.
Tietyt komennot ja rekisteriosoitteet vaihtelevat kiihtyvyysanturimallin mukaan. Tarkat ohjeet löytyvät aina datalehdestä.
UART vs. SPI: Vertailu
Tässä on taulukko, jossa on yhteenveto UART:in ja SPI:n tärkeimmistä eroista:
Ominaisuus | UART | SPI |
---|---|---|
Viestintätyyppi | Asynkroninen | Synkroninen |
Kellosignaali | Ei ole | Jaettu Kello |
Johtojen Määrä | 2 (TX, RX) | 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS per slave |
Datanopeus | Pienempi | Suurempi |
Full-Duplex | Tyypillisesti Puoli-Duplex (vaikka joskus voidaan simuloida full-duplexia monimutkaisella ohjelmistolla) | Full-Duplex |
Virheiden Havaitseminen | Pariteettibitti (valinnainen) | Ei ole (vaatii ohjelmistototeutuksen) |
Laitteiden Määrä | 2 (Point-to-Point) | Useita (Master-Slave) |
Monimutkaisuus | Yksinkertaisempi | Monimutkaisempi |
Etäisyys | Pidempi | Lyhyempi |
Oikean Protokollan Valitseminen
Valinta UART:in ja SPI:n välillä riippuu sovelluksen erityisvaatimuksista. Harkitse seuraavia tekijöitä:- Datanopeus: Jos tarvitaan nopea tiedonsiirto, SPI on yleensä parempi valinta.
- Etäisyys: Pidemmillä etäisyyksillä UART on sopivampi.
- Laitteiden Määrä: Jos useiden laitteiden on kommunikoitava yhden masterin kanssa, SPI on parempi.
- Monimutkaisuus: Jos yksinkertaisuus on etusijalla, UART on helpompi toteuttaa.
- Virheiden Havaitseminen: Jos virheiden havaitseminen on ratkaisevan tärkeää, harkitse UART:in käyttöä pariteettibitin kanssa tai virheiden tarkistuksen toteuttamista ohjelmistossa SPI:lle.
- Käytettävissä Oleva Laitteisto: Joillakin mikrokontrollereilla voi olla rajoitettu tuki yhdelle tai toiselle protokollalle. Harkitse käytettävissä olevia laitteistoresursseja päätöstä tehdessäsi.
Esimerkiksi yksinkertaisessa anturisovelluksessa, jossa mikrokontrollerin on luettava dataa yhdestä anturista lyhyen matkan päästä, SPI saattaa olla parempi vaihtoehto suuremman nopeutensa vuoksi. Jos mikrokontrollerin on kuitenkin kommunikoitava tietokoneen kanssa pidemmän matkan päästä virheenkorjausta varten, UART olisi sopivampi.
Edistyneet Huomioonotot
I2C (Inter-Integrated Circuit)
Vaikka tämä artikkeli keskittyy UART:iin ja SPI:hin, on tärkeää mainita I2C (Inter-Integrated Circuit) toisena yleisenä sarjaviestintäprotokollana. I2C on kaksi johtoinen protokolla, joka tukee useita master- ja slave-laitteita samassa väylässä. Sitä käytetään usein viestintään integroitujen piirien välillä piirilevyllä. I2C käyttää osoitusta, toisin kuin SPI, mikä yksinkertaistaa suuria laiteverkkoja.
TTL vs. RS-232
UART:ia käytettäessä on tärkeää ymmärtää TTL (Transistor-Transistor Logic)- ja RS-232-jännitetasojen välinen ero. TTL-logiikka käyttää 0 V ja 5 V (tai 3,3 V) kuvaamaan loogista matalaa ja korkeaa tilaa. RS-232 puolestaan käyttää ±12 V jännitteitä. TTL UART:in suora liittäminen RS-232 UART:iin voi vahingoittaa laitteita. Tasosiirtäjä (kuten MAX232-piiri) tarvitaan TTL- ja RS-232-jännitetasojen välillä muuntamiseen.
Virheiden Käsittely
Koska UART:illa ja SPI:llä on rajalliset virheiden havaitsemismekanismit, on tärkeää toteuttaa virheiden käsittely ohjelmistossa. Yleisiä tekniikoita ovat tarkistussummat, sykliset redundanssitarkistukset (CRC) ja aikakatkaisumekanismit.
Johtopäätös
UART ja SPI ovat olennaisia sarjaviestintäprotokollia sulautetuille järjestelmille ja niiden ulkopuolelle. UART tarjoaa yksinkertaisuutta ja joustavuutta, mikä tekee siitä sopivan mikrokontrollereiden liittämiseen tietokoneisiin ja muihin laitteisiin pidemmillä etäisyyksillä. SPI tarjoaa nopean tiedonsiirron lyhyen matkan sovelluksiin, kuten liittämiseen antureihin, muistikortteihin ja näyttöihin. Kunkin protokollan periaatteiden, etujen ja haittojen ymmärtäminen antaa sinulle mahdollisuuden tehdä tietoon perustuvia päätöksiä suunnitellessasi seuraavaa sulautettua järjestelmääsi tai elektronista projektiasi. Teknologian kehittyessä myös näiden sarjaviestintämenetelmien sovellukset kehittyvät. Jatkuva mukautuminen ja oppiminen varmistavat, että insinöörit ja harrastajat voivat hyödyntää näitä protokollia täysimääräisesti.