Universal asynkron transceiver

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 19. august 2022; checks kræver 2 redigeringer .

Universal asynkron transceiver (UART, engelsk  Universal Asynchronous Receiver-Transmitter, UART ) er en node af computerenheder designet til at organisere kommunikation med andre digitale enheder. Konverterer transmitterede data til en seriel form, så de kan transmitteres over én fysisk digital linje til en anden lignende enhed. Konverteringsmetoden er velstandardiseret og udbredt i computerteknologi (især i indlejrede enheder og systemer på en chip (SoC) ).

Det er et logisk kredsløb, på den ene side forbundet til bussen på en computerenhed, og på den anden side har to eller flere ben til ekstern forbindelse.

UART kan være en separat chip (såsom Intel I8251, I8250) eller være en del af et stort integreret kredsløb (såsom en mikrocontroller ). Bruges til at overføre data gennem computerens serielle port .

Metode til transmission og modtagelse

Dataoverførsel til UART udføres en bit med regelmæssige intervaller. Dette tidsinterval bestemmes af den specificerede UART-hastighed og er angivet i bauds for en specifik forbindelse (som i dette tilfælde svarer til bits pr. sekund). Der er et generelt accepteret område af standardhastigheder: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 baud. Hastighed ( , baud) og bitvarighed ( , sekunder) er relateret til . Baud rate omtales nogle gange med slangordet boudrate eller bitrate .

Ud over informationsbits indsætter UART automatisk timingmærker i strømmen, de såkaldte start- og stopbits . Ved modtagelse fjernes disse ekstra bits fra streamen. Normalt rammer start- og stopbittene én byte information (8 bit), mens den mindst signifikante informationsbit transmitteres først umiddelbart efter starten. Der er UART-implementeringer, der transmitterer 5, 6, 7 eller 9 informationsbits. Indrammede start- og stopbits er minimumsforudsætningen. Nogle UART-implementeringer bruger to stopbits under transmission for at reducere chancen for desynkronisering af modtager og sender under tung trafik. Modtageren ignorerer den anden stopbit og behandler den som en kort pause på linjen.

Det er aftalt, at den passive (i mangel af dataflow) tilstand af input og output fra UART er logisk 1. Startbitten er altid logisk 0, så UART modtageren venter på kanten fra 1 til 0 og tæller fra kl. det er et tidsinterval på halvdelen af ​​bitens varighed (midten af ​​transmissionen af ​​startbitten). Hvis indgangen på dette tidspunkt stadig er 0, startes processen med at modtage minimumsmeddelelsen. For at gøre dette tæller modtageren 9 bit-varigheder i træk (for 8-bit data), og registrerer i hvert øjeblik input-tilstanden. De første 8 værdier er modtagne data, den sidste værdi er en testværdi (stopbit). Værdien af ​​stopbitten er altid 1. Hvis den faktisk modtagne værdi er anderledes, retter UART en fejl.

For at danne tidsintervaller har de transmitterende og modtagende UART'er en nøjagtig tidskilde (clocking). Nøjagtigheden af ​​denne kilde skal være sådan, at summen af ​​fejlene (for modtageren og senderen) ved indstilling af tidsintervallet fra begyndelsen af ​​startimpulsen til midten af ​​stopimpulsen ikke overstiger halvdelen (eller bedre end en fjerdedel) ) af bitintervallet [1] . For en 8-bit besked er denne værdi 0,5/9,5 ≈ 5%. I praksis, under hensyntagen til mulige signalforvrængninger i linjen, bør den samlede tidsfejl ikke være mere end 3%. Da fejlene i modtager- og senderuret i værste fald kan opsummeres, er den anbefalede tolerance for UART-clocking-nøjagtighed ikke mere end 1,5 %.

Da clock-bittene optager en del af bitstrømmen, er den resulterende UART- båndbredde mindre end linkhastigheden. For 8-bit 8-N-1 pakker optager synkroniseringsbits f.eks. 20 % af strømmen, hvilket ved en fysisk linjehastighed på 115200 baud betyder en nyttig dataoverførselshastighed på 92160 bps eller 11520 bytes/s.


Paritetskontrol

Informationsbits
_
antal
oplysninger
enkeltbits

tilstand af paritetsbit i
tilstand:
også selvom ulige
00000000 0 0 en
10100010 3 en 0
11010010 fire 0 en
11111110 7 en 0

Mange UART-implementeringer har mulighed for automatisk at kontrollere dataintegritet ved hjælp af bitparitet. Denne funktion aktiveres eller deaktiveres ved at skrive det relevante initialiseringsord til det interne UART-kontrolregister. Når denne funktion er aktiveret, udfyldes minimum sendeinformationsbits med en efterfølgende paritetsbit. Når en meddelelse sendes, tæller den logiske enhed antallet af enkelte bit i informationsdelen af ​​meddelelsen og ved hjælp af dette tal indstiller den paritetsbit til en af ​​tilstandene, afhængigt af antallet af enkelte bit og den aktuelle paritetskontroltilstand specificeret.

Der er lige paritet og ulige paritetstilstande .  _ _ _ Med lige paritet er paritetsbitten sat i en sådan tilstand, at summen af ​​de enkelte bits i pakken (inklusive dataene og paritetsbitten selv) er et lige tal . Med ulige paritet sættes paritetsbitten således, at summen af ​​alle bits i afsendelsen er ulige, som vist i tabel [2] [3] .  

Når en pakke modtages, tæller UART-logikkenheden automatisk antallet af 1 bit i pakken, inklusive paritetsbitten. Hvis pariteten er overtrådt i den modtagne meddelelse, er dette et tegn på en fejl i transmissionskanalen. Fejl i binære overførsler reduceres til bitinversion, så paritetslogikken kan kun detektere fejl, hvis et ulige antal bits er beskadiget (i 1, 3 osv.). Hvis der er opstået en inversion, for eksempel 2 bit, bliver en sådan fejl ikke opdaget. Når en paritetsfejl detekteres, sætter UART-logikken et fejlflag i sit statusord, som kan læses af en ekstern enhed, såsom en computerprocessor, og fejlen håndteres korrekt.

Stenografi for parametre

En kort måde at skrive UART-parametre på blev udviklet og brugt, såsom antallet af databit, tilstedeværelsen og typen af ​​paritetsbit, antallet af stopbits. Det ligner en tal-bogstav-tal-indtastning, hvor:

For eksempel betyder indgangen 8-N-1, at UART er sat til 8 databit, ingen paritet og en stopbit. For fuldstændigheden af ​​parametrene er denne post forsynet med en indikation af UART-hastigheden, for eksempel 9600/8-N-1.

Break

Nogle UART'er har evnen til at sende og modtage en speciel besked kaldet Break. Den består af en kontinuerlig nultilstand af linjen med en varighed, der åbenlyst er større end minimumsburst, normalt 1,5 minimum bursts (for 8N1 er dette 15 bit intervaller). Nogle kommunikationsprotokoller bruger denne egenskab, for eksempel bruger LIN-protokollen Break til at angive en ny ramme.

Flow kontrol

Tidlige UART-enheder kunne være så langsomme, at de ikke kunne følge med strømmen af ​​modtagne data. For at løse dette problem blev UART-moduler nogle gange forsynet med separate udgange og flowkontrolindgange. Når inputbufferen var fuld, ville logikken i den modtagende UART indstille den tilsvarende udgang til at deaktivere, og den transmitterende UART ville suspendere transmissionen.

Senere blev flowkontrol tildelt kommunikationsprotokoller (for eksempel XOn / XOff metoden ), og behovet for separate flowkontrollinjer forsvandt næsten.

På nuværende tidspunkt bruges flowstyring på hardwareniveau stadig f.eks. i (ultra)energieffektive mikrocontrollere.

Fysisk lag

UART-logikkredsløbet har I/O-kredsløb svarende til halvlederkredsløbsteknologien: CMOS , TTL osv. Dette fysiske lag kan bruges inden for en enkelt enhed, men er som udgangspunkt ikke egnet til switchede lange forbindelser på grund af lav beskyttelse mod elektrisk ødelæggelse og interferens. Der er udviklet særlige fysiske lag til sådanne tilfælde , såsom strømsløjfe , RS-232 , RS-485 , LIN og lignende.

En specifik form for fysisk asynkront grænsefladelag er det fysiske IrDA -lag .

Der er UART fysiske lag til komplekse miljøer. På en måde kan et standard computertelefonmodem også kaldes et specifikt fysisk lag af en asynkron grænseflade. Der er specielle mikrokredsløb til kablede modemer lavet specifikt som det fysiske lag af en asynkron grænseflade (det vil sige protokolgennemsigtig). Radiokanalens fysiske lag produceres også i form af moduler af radiomodtagere og radiosendere.

Driver til fysiske lag

For at konvertere de logiske input og output af UART til signaler på det tilsvarende fysiske niveau, bruges specielle elektroniske kredsløb, kaldet drivere. For alle populære fysiske niveauer er der integrerede drivere i form af mikrokredsløb.

Duplex

UART-logikken tillader normalt samtidig transmission og modtagelse. Denne evne omtales ofte med slangordet duplex . Det er dog ikke alle fysiske lag, der tillader samtidig dataoverførsel i begge retninger. I sådanne tilfælde er det sædvanligt at tale om halv-dupleks kommunikation. Der findes også løsninger, hvor dataoverførsel kun er fysisk mulig i én retning, så taler man om simplekskommunikation .

Netværk

Oprindeligt var UART beregnet til kommunikation mellem to enheder på punkt-til-punkt-basis. Efterfølgende blev der skabt fysiske lag, der gør det muligt at forbinde mere end to UART'er efter princippet "en taler, flere lytter". Sådanne fysiske lag kaldes netværk . Der er implementeringer af typen fælles bus (når alle transceivere er forbundet til en ledning) og ring (når modtagere og sendere er forbundet parvis i en lukket ring). Den første mulighed er enklere og mere almindelig. Den anden mulighed er mere kompliceret, men mere pålidelig og hurtigere: driften af ​​alle noder er garanteret (den transmitterende node vil kun høre ekkoet af sin besked, hvis den videresendes med succes af alle noder); enhver node kan starte transmissionen når som helst uden at bekymre sig om risikoen for en kollision. De mest kendte fysiske netværkslag er RS-485 og LIN .

UART-understøttelse i almindelige operativsystemer

Den udbredte brug af UART i digital teknologi forudbestemte integrationen af ​​understøttelse af denne grænseflade i API'en for mange operativsystemer. Som regel vises denne grænseflade i OS-dokumentationen som en COM-port eller seriel port .

Microsoft Windows

Serielporte i Win32 behandles som filer. CreateFile-funktionen bruges til at åbne en port. Der kan være mange porte, så de omtales som COM1, COM2 osv. i den rækkefølge, enhedsdriverne findes. De første 9 porte er også tilgængelige som navngivne rør til dataoverførsel (tilgængelig under navnene "COM1", "COM2", ...), denne adgangsmetode anses for at være forældet. Det anbefales at adressere alle porte som filer (navngivet "\\.\COM1", "\\.\COM2", ... "\\.\COMx").

Søgning efter PnP-enhedsnavne i systemet udføres ved at kalde SetupDiGetClassDevs. Nøglen HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM findes i registreringsdatabasen, som viser de aktuelt tilgængelige COM-porte.

Der er en sektion i registreringsdatabasen for hver port. Disse sektioner har følgende navne:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000,

hvor den sidste værdi "Serial10000" er et unikt nummer for hver ny COM-port tilføjet til systemet, for den anden - "Serial10001" osv.

UNIX

COM-porte i Unix -operativsystemet ( Linux ) er tegnenhedsfiler. Disse filer er normalt placeret i mappen /dev og navngives

For programmatisk adgang til COM-porten skal du åbne den tilsvarende fil til læsning/skrivning og foretage opkald til specialfunktionerne tcgetattr (for at finde ud af de aktuelle indstillinger) og tcsetattr (for at indstille nye indstillinger). Det kan også være nødvendigt at foretage ioctl- kald med visse parametre. Derefter, når du skriver til en fil, vil data blive sendt gennem porten, og ved læsning vil programmet modtage allerede modtagne data fra COM-portbufferen.

Enheder med navnet "ttyxx" bruges som serverenheder, det vil sige, at programmet, der åbnede denne enhed, normalt venter på et indgående opkald fra modemmet. Den klassiske standardapplikation er getty , som venter på et indgående opkald, derefter konfigurerer COM-porten i henhold til konfigurationsfilerne, udsender "login:" der, accepterer et brugernavn og kører kommandoen "loginUserName" som et barn, med standardinput og output omdirigeret til COM-porten. Denne kommando anmoder og kontrollerer på sin side adgangskoden, og hvis den lykkes, starter den (ikke som et barn, men i stedet for sig selv ved at kalde execve i samme proces) standardbrugerskallen angivet i filen /etc/passwd.

Denne teknologi opstod historisk i 1970'erne, da computere som PDP-11 (i USSR blev serien kaldt SM EVM ) eller VAX blev brugt under UNIX-operativsystemet , hvilket tillod tilslutning af mange terminaler til mange brugeres arbejde. Terminalerne - og dermed hele brugergrænsefladen - var forbundet via serielle porte, med mulighed for at tilslutte et modem i stedet for en terminal og derefter ringe til computeren via telefon. Indtil nu har UNIX-lignende OS'er en terminalstack og normalt 3 terminalimplementeringer - en seriel port, en teksttilstandsskærm + tastaturkonsol og en "loopback" til en af ​​de åbne filer i kontrolapplikationen (dette er hvordan telnetd, sshd og xterm er implementeret).

Serielport-klientenheder til at foretage opkald udefra kaldes cuaxx i mange (men ikke alle) UNIX'er.

Da den serielle port i UNIX kun er tilgængelig gennem terminalstakken, kan den være en kontrolterminal for processer og grupper (send SIGHUP ved afbrydelse af modemmet og SIGINT på Ctrl-C), understøtter redigering af den sidste linje indtastet med piletasterne på kerneniveauet osv. Deaktivering af denne funktion for at gøre enheden til et "rør" for en bytestrøm kræver ioctl-kald.

OS/2

Den tilgængelige COM.SYS-driver understøtter kun 4 COM-porte, som hver skal have sin egen afbrydelseslinje. For at servicere COM-porte med en fælles afbrydelseslinje skal du bruge SIO-driveren [4] .

Android

Da Android kører på Linux-kernen, er arbejdet med COM-porte i Android stort set det samme som at arbejde i Linux. Men husk på, at for at arbejde med COM-porte i Android skal du have root-rettigheder.

Virtuelle porte

I øjeblikket er UART-baserede fysiske grænseflader praktisk talt forsvundet fra digitalt forbrugerudstyr. Men brugervenligheden og overfloden af ​​software, der brugte adgang til eksterne enheder via en COM-port, tvang udviklere af enheder forbundet til computere til at oprette drivere til virtuelle COM-porte ( VCP  - virtuel COM-port). Det vil sige COM-porte, for hvilke der ikke er nogen tilsvarende hardware UART.

Kommunikationsprotokoller

Kun i meget sjældne opgaver er det acceptabelt at sende en direkte datastrøm gennem UART. Som regel er det nødvendigt at angive begyndelsen og slutningen af ​​datablokken; sikre dataintegritetskontrol og genskabe tabte genstande; styre strømmen af ​​data for at forhindre overbelastning af inputbufferen osv. Til disse og mange andre formål opfindes kommunikationsprotokoller  - aftaler om specielle datasæt, der udveksles mellem begge computersystemer for at kunne fuldføre opgaven med at etablere kommunikation og overføre grundlæggende data. Protokolalgoritmerne afhænger af de opgaver, der er indstillet til systemet, og funktionerne i det fysiske UART-lag. Protokolalgoritmen implementeres normalt i software frem for hardware.

Der findes en lang række kommunikationsprotokoller til brug med UART'er. Den mest berømte:

Standardisering

Ideen om asynkron dataoverførsel dukkede op i disse fjerne tider, hvor standardisering stadig var lidt plejet, og det bedste, der kunne forventes fra leverandører af forskellige løsninger, var den åbne udgivelse af algoritmer til driften af ​​deres produkter. Faktisk er der derfor ingen UART-standard som sådan, men logikken i UART-drift er beskrevet som en del af produktet i mange andre standarder: strømsløjfe , RS-232 , ISO / IEC 7816 osv.

Se også

Noter

  1. Bestemmelse af urnøjagtighedskrav til UART-kommunikation . Hentet 22. september 2016. Arkiveret fra originalen 19. september 2011.
  2. Fejlrettelse og registreringskoder
  3. Fejldetektering og -korrektion
  4. Installation af et COM-portkort i en computer (utilgængeligt link) . Hentet 8. juni 2014. Arkiveret fra originalen 15. maj 2011. 

Links