Universaali asynkroninen lähetin -vastaanotin (UART, englanniksi Universal Asynchronous Receiver-Transmitter, UART ) on tietokonelaitteiden solmu, joka on suunniteltu järjestämään viestinnän muiden digitaalisten laitteiden kanssa. Muuntaa lähetetyn tiedon sarjamuotoon, jotta se voidaan siirtää fyysistä digitaalista linjaa pitkin toiseen samanlaiseen laitteeseen. Muunnosmenetelmä on hyvin standardoitu ja sitä käytetään laajalti tietotekniikassa (erityisesti sulautetuissa laitteissa ja järjestelmissä sirulla (SoC) ).
Se on looginen piiri, joka on toisaalta kytketty tietokonelaitteen väylään, ja toisaalta siinä on kaksi tai useampia nastaa ulkoista liitäntää varten.
UART voi olla erillinen siru (kuten Intel I8251, I8250) tai osa suurta integroitua piiriä (kuten mikro-ohjain ). Käytetään tietojen siirtämiseen tietokoneen sarjaportin kautta .
Tiedonsiirto UART:lle suoritetaan bitin verran säännöllisin väliajoin. Tämä aikaväli määräytyy määritetyn UART-nopeuden mukaan ja se määritetään baudeina tietylle yhteydelle (joka tässä tapauksessa vastaa bittejä sekunnissa). On olemassa yleisesti hyväksytty vakionopeuksien alue: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 baudia. Nopeus ( , baudi) ja bitin kesto ( , sekuntia) liittyvät . Tiedonsiirtonopeutta kutsutaan joskus slangissa boudrate tai bitrate .
Tietobittien lisäksi UART lisää automaattisesti virtaan ajoitusmerkit, ns. aloitus- ja lopetusbitit . Vastaanoton yhteydessä nämä ylimääräiset bitit poistetaan virrasta. Yleensä aloitus- ja lopetusbitit kehystävät yhden tavun tietoa (8 bittiä), kun taas vähiten merkitsevä informaatiobitti lähetetään ensin, heti alun jälkeen. On olemassa UART-toteutuksia, jotka lähettävät 5, 6, 7 tai 9 informaatiobittiä. Kehystetyt aloitus- ja lopetusbitit ovat minimilähtökohta. Jotkut UART-toteutukset käyttävät kahta pysäytysbittiä lähetyksen aikana vähentämään vastaanottimen ja lähettimen epäsynkronoinnin mahdollisuutta raskaan liikenteen aikana. Vastaanotin jättää huomioimatta toisen pysäytysbitin ja pitää sitä lyhyenä taukona linjalla.
On sovittu, että UART:n tulon ja lähdön passiivinen (tietovirran puuttuessa) tila on looginen 1. Alkubitti on aina looginen 0, joten UART-vastaanotin odottaa reunaa 1:stä 0:aan ja laskee alkaen se aikaväli, joka on puolet bitin kestosta (aloitusbitin lähetyksen keskikohta). Jos tällä hetkellä syöte on edelleen 0, aloitetaan minimiviestin vastaanotto. Tätä varten vastaanotin laskee 9 bitin kestoa peräkkäin (8-bittiselle datalle) ja joka hetki kaappaa tulon tilan. Ensimmäiset 8 arvoa ovat vastaanotettuja tietoja, viimeinen arvo on testiarvo (pysäytysbitti). Pysäytysbitin arvo on aina 1. Jos todellinen vastaanotettu arvo on erilainen, UART korjaa virheen.
Aikavälien muodostamiseksi lähettävillä ja vastaanottavilla UART:illa on tarkka aikalähde (kellotus). Tämän lähteen tarkkuuden tulee olla sellainen, että (vastaanottimen ja lähettimen) virheiden summa, kun aikaväli asetetaan aloituspulssin alusta lopetuspulssin puoliväliin, ei ylitä puolta (tai parempi kuin neljäsosa ) bittivälistä [1] . 8-bittiselle viestille tämä arvo on 0,5/9,5 ≈ 5%. Käytännössä, ottaen huomioon mahdolliset signaalin vääristymät linjassa, kokonaisajoitusvirheen tulisi olla enintään 3 %. Koska pahimmassa tapauksessa vastaanottimen ja lähettimen kellojen virheet voidaan laskea yhteen, suositeltu UART-kellotarkkuuden toleranssi on enintään 1,5 %.
Koska kellobitit vievät osan bittivirrasta, tuloksena oleva UART - kaistanleveys on pienempi kuin linkin nopeus. Esimerkiksi 8-bittisille 8-N-1- paketeille synkronointibitit vievät 20 % virrasta, mikä fyysisellä linjanopeudella 115200 baudia tarkoittaa hyödyllistä tiedonsiirtonopeutta 92160 bps tai 11520 tavua/s.
Tietobitit _ |
tiedon yksittäisten bittien lukumäärä |
pariteettibitin tila tilassa
: | |
---|---|---|---|
jopa | outo | ||
00000000 | 0 | 0 | yksi |
10100010 | 3 | yksi | 0 |
11010010 | neljä | 0 | yksi |
11111110 | 7 | yksi | 0 |
Monilla UART-toteutuksilla on kyky automaattisesti tarkistaa tietojen eheys bittipariteetin avulla. Tämä ominaisuus otetaan käyttöön tai poistetaan käytöstä kirjoittamalla sopiva alustussana sisäiseen UART-ohjausrekisteriin. Kun tämä ominaisuus on käytössä, vähimmäislähetysinformaatiobitit on täytetty pariteettibitillä. Viestiä lähetettäessä looginen laite laskee yksittäisten bittien määrän viestin informaatioosassa ja tätä numeroa käyttäen asettaa pariteettibitin johonkin tiloista yksittäisten bittien lukumäärän ja nykyisen pariteetin tarkistustilan mukaan. määritelty.
On olemassa parillisen ja parittoman pariteetin tiloja . _ _ _ Parillisuudella pariteettibitti asetetaan sellaiseen tilaan, että paketin yksittäisten bittien summa (mukaan lukien data ja itse pariteettibitti) on parillinen luku . Pariton pariteetilla pariteettibitti asetetaan niin, että lähetyksen kaikkien bittien summa on pariton, kuten taulukosta [2] [3] näkyy .
Kun paketti vastaanotetaan, UART-logiikkalaite laskee automaattisesti paketin 1 bitin määrän, mukaan lukien pariteettibitti. Jos pariteettia rikotaan vastaanotetussa viestissä, tämä on merkki virheestä lähetyskanavassa. Virheet binäärisiirroissa pelkistyvät bittien inversioiksi, joten pariteettilogiikka voi havaita virheet vain, jos pariton määrä bittejä on vioittunut (1, 3 jne.). Jos inversio on tapahtunut, esimerkiksi 2 bittiä, tällaista virhettä ei havaita. Kun pariteettivirhe havaitaan, UART-logiikka asettaa tilasanaansa virhelipun, jonka ulkoinen laite, kuten tietokoneen prosessori, voi lukea, ja virhe käsitellään oikein.
Kehitettiin ja otettiin käyttöön lyhyt tapa kirjoittaa UART-parametreja, kuten databittien lukumäärä, pariteettibitin olemassaolo ja tyyppi, stop-bittien määrä. Se näyttää numero-kirjain-numero -merkinnältä, jossa:
Esimerkiksi merkintä 8-N-1 tarkoittaa, että UART on asetettu 8 databitille, ei pariteettia ja yksi lopetusbitti. Parametrien täydellisyyden vuoksi tämä merkintä on varustettu UART-nopeuden osoituksella, esimerkiksi 9600/8-N-1.
Jotkut UART:t pystyvät lähettämään ja vastaanottamaan erityisviestin nimeltä Break. Se koostuu linjan jatkuvasta nollatilasta, jonka kesto on selvästi suurempi kuin minimipurske, yleensä 1,5 minimipursketta (8N1:lle tämä on 15 bitin aikaväli). Jotkut viestintäprotokollat käyttävät tätä ominaisuutta, esimerkiksi LIN-protokolla käyttää Break-komentoa ilmaisemaan uuden kehyksen.
Varhaiset UART-laitteet saattoivat olla niin hitaita, etteivät ne pysyneet vastaanotetun datavirran mukana. Tämän ongelman ratkaisemiseksi UART-moduuleilla oli joskus erilliset lähdöt ja virtauksen ohjaustulot. Kun tulopuskuri oli täynnä, vastaanottavan UART:n logiikka asettaisi vastaavan lähdön pois päältä ja lähettävä UART keskeytti lähetyksen.
Myöhemmin tietoliikenneprotokolliin kohdistettiin vuonohjaus (esimerkiksi XOn / XOff-menetelmä ), ja erillisten vuonohjauslinjojen tarve lähes hävisi.
Tällä hetkellä virtauksen ohjausta laitteistotasolla käytetään edelleen esimerkiksi (ultra)energiatehokkaissa mikrokontrollereissa.
UART-logiikkapiirissä on I/O-piirit, jotka vastaavat puolijohdepiiritekniikkaa: CMOS , TTL jne. Tätä fyysistä kerrosta voidaan käyttää yhdessä laitteessa, mutta se ei yleensä sovellu pitkäkestoisiin kytkentöihin alhaisen suojauksen vuoksi. sähkövaurioita ja häiriöitä vastaan. Tällaisia tapauksia varten on kehitetty erityisiä fyysisiä kerroksia , kuten virtasilmukka , RS-232 , RS-485 , LIN ja vastaavat.
Erityinen asynkronisen liitännän fyysinen kerros on IrDA -fyysinen kerros .
Monimutkaisia ympäristöjä varten on olemassa UART-fyysisiä kerroksia. Tavallista tietokonepuhelinmodeemia voidaan tietyssä mielessä kutsua myös asynkronisen rajapinnan tietyksi fyysiseksi kerrokseksi. Langallisille modeemeille on olemassa erityisiä mikropiirejä, jotka on tehty nimenomaan asynkronisen liitännän fyysiseksi kerrokseksi (eli protokollan läpinäkyväksi). Radiokanavan fyysinen kerros tuotetaan myös radiovastaanottimien ja radiolähettimien moduulien muodossa.
UART:n loogisten tulojen ja ulostulojen muuntamiseksi vastaavan fyysisen tason signaaleiksi käytetään erityisiä elektronisia piirejä, joita kutsutaan ajureiksi. Kaikille suosituille fyysisille tasoille on integroidut ajurit mikropiirien muodossa.
UART-logiikka sallii yleensä samanaikaisen lähetyksen ja vastaanoton. Tätä kykyä kutsutaan usein slangissa duplex . Kaikki fyysiset kerrokset eivät kuitenkaan salli samanaikaista tiedonsiirtoa molempiin suuntiin. Tällaisissa tapauksissa on tapana puhua half-duplex- viestinnästä. On myös ratkaisuja, joissa tiedonsiirto on fyysisesti mahdollista vain yhteen suuntaan, silloin puhutaan simpleksiviestinnästä .
Alun perin UART oli tarkoitettu kahden laitteen väliseen tietoliikenteeseen pisteestä pisteeseen. Myöhemmin luotiin fyysisiä kerroksia, jotka mahdollistavat useamman kuin kahden UART:n yhdistämisen "yksi puhuu, useita kuuntelee" -periaatteen mukaisesti. Tällaisia fyysisiä kerroksia kutsutaan verkkoksi . On olemassa toteutuksia yhteisväylästä (kun kaikki lähetin-vastaanottimet on kytketty yhteen johtimeen) ja ring (kun vastaanottimet ja lähettimet on kytketty pareittain suljetussa renkaassa). Ensimmäinen vaihtoehto on yksinkertaisempi ja yleisempi. Toinen vaihtoehto on monimutkaisempi, mutta luotettavampi ja nopeampi: kaikkien solmujen toiminta taataan (lähettävä solmu kuulee viestinsä kaiun vain, jos kaikki solmut välittävät sen onnistuneesti); mikä tahansa solmu voi aloittaa lähetyksen milloin tahansa ilman huolta törmäysvaarasta. Tunnetuimmat verkon fyysiset kerrokset ovat RS-485 ja LIN .
UART:n laaja käyttö digitaalitekniikassa määräsi ennalta tämän rajapinnan tuen integroinnin monien käyttöjärjestelmien API :hin. Yleensä tämä liitäntä näkyy käyttöjärjestelmän ohjeissa COM-porttina tai sarjaporttina .
Win32:n sarjaportteja käsitellään tiedostoina. CreateFile-toimintoa käytetään portin avaamiseen. Portteja voi olla useita, joten niitä kutsutaan nimellä COM1, COM2 jne. siinä järjestyksessä, jossa laiteajurit löytyvät. Ensimmäiset 9 porttia ovat saatavilla myös nimettyinä tiedonsiirtoputkina (saatavilla nimillä "COM1", "COM2", ...), tätä pääsytapaa pidetään vanhentuneena. On suositeltavaa osoittaa kaikki portit tiedostoina (nimeltään "\\.\COM1", "\\.\COM2", ... "\\.\COMx").
PnP-laitteiden nimien etsiminen järjestelmästä tehdään kutsumalla SetupDiGetClassDevs. HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM-avain on olemassa rekisterissä, joka näyttää tällä hetkellä käytettävissä olevat COM-portit.
Jokaiselle portille on rekisterissä oma osio. Näillä osioilla on seuraavat nimet:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000,jossa viimeinen arvo "Serial10000" on yksilöllinen numero jokaiselle järjestelmään lisätylle uudelle COM-portille, toiselle - "Serial10001" jne.
Unix ( Linux ) -käyttöjärjestelmän COM-portit ovat merkkilaitetiedostoja. Nämä tiedostot sijaitsevat yleensä /dev-hakemistossa ja niillä on nimet
COM-portin ohjelmallista käyttöä varten sinun on avattava vastaava tiedosto lukemista / kirjoittamista varten ja soitettava erikoistoimintoihin tcgetattr (nykyisten asetusten selvittämiseksi) ja tcsetattr (uusien asetusten määrittämiseksi). Saattaa myös olla tarpeen tehdä ioctl - kutsuja tietyillä parametreilla. Tämän jälkeen tiedostoon kirjoitettaessa tiedot lähetetään portin kautta ja luettaessa ohjelma vastaanottaa jo vastaanotettuja tietoja COM-portin puskurista.
Laitteita nimeltä "ttyxx" käytetään palvelinlaitteina, eli tämän laitteen avannut sovellus odottaa yleensä saapuvaa puhelua modeemilta. Klassinen oletussovellus on getty , joka odottaa saapuvaa puhelua, määrittää sitten COM-portin asetustiedostojen mukaan, tulostaa sinne "login:", hyväksyy käyttäjätunnuksen ja suorittaa "loginUserName"-komennon lapsena vakiosyötteen kanssa. ja lähtö ohjataan COM-porttiin. Tämä komento puolestaan pyytää ja tarkistaa salasanan, ja jos onnistuu, käynnistää (ei lapsena, vaan itsensä sijaan kutsumalla execveä samassa prosessissa) /etc/passwd-tiedostossa määritetyn oletuskäyttöliittymän.
Tämä tekniikka syntyi historiallisesti 1970-luvulla, jolloin tietokoneita, kuten PDP-11 (Neuvostoliitossa sarjan nimi oli SM EVM ) tai VAX , käytettiin UNIX-käyttöjärjestelmässä , mikä mahdollisti useiden päätteiden yhdistämisen monien käyttäjien työtä varten. Päätteet - ja siten koko käyttöliittymä - yhdistettiin sarjaporttien kautta, jolloin päätteen sijaan voitiin kytkeä modeemi ja sitten soittaa tietokoneeseen puhelimitse. Tähän asti UNIX-tyyppisissä käyttöjärjestelmissä on päätepino ja yleensä 3 päätetoteutusta - sarjaportti, tekstitilan näyttö + näppäimistökonsoli ja "palautus" johonkin ohjaussovelluksen avoimista tiedostoista (näin telnetd, sshd ja xterm on otettu käyttöön).
Sarjaporttiasiakaslaitteita ulkopuhelujen soittamiseen kutsutaan cuaxxiksi monissa (mutta ei kaikissa) UNIXeissa.
Koska UNIXin sarjaportti on käytettävissä vain päätepinon kautta, se voi olla prosessien ja ryhmien ohjauspääte (lähetä SIGHUP, kun yhteys katkaistaan modeemista ja SIGINT Ctrl-C), tukee viimeisen rivin muokkaamista nuolinäppäimillä osoitteessa ytimen taso jne. Tämän ominaisuuden poistaminen käytöstä, jotta laite muutetaan "putkeksi" tavuvirralle, vaatii ioctl-kutsuja.
Käytettävissä oleva COM.SYS-ohjain tukee vain neljää COM-porttia, joista jokaisella on oltava oma keskeytyslinja. Jos haluat huoltaa COM-portteja yhteisellä keskeytyslinjalla, sinun on käytettävä SIO-ohjainta [4] .
Koska Android toimii Linux-ytimessä, COM-porttien käyttäminen Androidissa on periaatteessa sama asia kuin Linuxissa. Muista kuitenkin, että Androidin COM-porttien käyttäminen edellyttää pääkäyttäjän oikeuksia.
Tällä hetkellä UART-pohjaiset fyysiset rajapinnat ovat käytännössä kadonneet kuluttajien digitaalisista laitteista. Kuitenkin helppokäyttöisyys ja ohjelmistojen runsaus, joka käytti pääsyä ulkoisiin laitteisiin COM-portin kautta, pakotti tietokoneisiin kytkettyjen laitteiden kehittäjät luomaan ajureita virtuaalisille COM-porteille ( VCP - virtuaalinen COM-portti). Eli COM-portit, joille ei ole vastaavaa UART-laitteistoa.
Vain hyvin harvoissa tehtävissä on hyväksyttävää lähettää suora tietovirta UART:n kautta. Yleensä on tarpeen osoittaa tietolohkon alku ja loppu; varmistaa tietojen eheyden valvonta ja palauttaa kadonneet kohteet; ohjata tiedonkulkua syöttöpuskurin ylikuormituksen estämiseksi jne. Näitä ja monia muita tarkoituksia varten on keksitty tietoliikenneprotokollat - sopimukset erityisistä tietojoukoista, joita vaihdetaan molempien tietokonejärjestelmien välillä viestintä- ja tiedonsiirtotehtävän suorittamiseksi onnistuneesti perustieto. Protokollaalgoritmit riippuvat järjestelmälle asetetuista tehtävistä ja UART-fyysisen kerroksen ominaisuuksista. Protokollaalgoritmi toteutetaan yleensä ohjelmistossa eikä laitteistossa.
UART:iden kanssa käytettäväksi on saatavilla laaja valikoima tietoliikenneprotokollia. Kuuluisin:
Ajatus asynkronisesta tiedonsiirrosta syntyi noina kaukaisina aikoina, jolloin standardoinnista ei vielä pidetty huolta ja parasta, mitä erilaisten ratkaisujen toimittajilta voi odottaa, oli avoin algoritmien julkaiseminen tuotteidensa toimintaa varten. Itse asiassa siis ei ole olemassa UART-standardia sellaisenaan, mutta UART-toiminnan logiikka kuvataan osana tuotetta monissa muissa standardeissa: virtasilmukka , RS-232 , ISO / IEC 7816 jne.
UART | |||||||
---|---|---|---|---|---|---|---|
Fyysiset kerrokset |
| ||||||
Protokollat |
| ||||||
Käyttöalueet | |||||||
Toteutukset |
|
Mikro-ohjaimet | ||||||||
---|---|---|---|---|---|---|---|---|
Arkkitehtuuri |
| |||||||
Valmistajat |
| |||||||
Komponentit | ||||||||
Periferia | ||||||||
Liitännät | ||||||||
OS | ||||||||
Ohjelmointi |
|
Tietokoneväylät ja rajapinnat | |
---|---|
Peruskonseptit | |
Prosessorit | |
Sisäinen | |
kannettavat tietokoneet | |
Asemat | |
Periferia | |
Laitteiden hallinta | |
Universaali | |
Videoliitännät | |
Sisällytetty järjestelmä |