Transceiver asincron universal

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 19 august 2022; verificările necesită 2 modificări .

Transceiver asincron universal (UART, engleză  Universal Asynchronous Receiver-Transmitter, UART ) este un nod de dispozitive de calcul concepute pentru a organiza comunicarea cu alte dispozitive digitale. Convertește datele transmise într-o formă serială, astfel încât să poată fi transmise pe o linie digitală fizică către un alt dispozitiv similar. Metoda de conversie este bine standardizată și utilizată pe scară largă în tehnologia computerelor (în special în dispozitivele și sistemele încorporate pe un cip (SoC) ).

Este un circuit logic, pe de o parte conectat la magistrala unui dispozitiv de calcul și, pe de altă parte, având doi sau mai mulți pini pentru conexiune externă.

UART poate fi un cip separat (cum ar fi Intel I8251, I8250) sau poate face parte dintr- un circuit integrat mare (cum ar fi un microcontroler ). Folosit pentru a transfera date prin portul serial al computerului .

Metoda de transmitere și recepție

Transferul de date către UART se efectuează pe un bit la intervale regulate. Acest interval de timp este determinat de viteza UART specificată și este specificat în baud pentru o anumită conexiune (care în acest caz corespunde biților pe secundă). Există o gamă general acceptată de viteze standard: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 baud. Viteza ( , baud) și durata biților ( , secunde) sunt legate de . Rata de transmisie este uneori denumită cuvântul argotic boudrate sau bitrate .

În plus față de biții de informații, UART inserează automat semne de sincronizare în flux, așa-numiții biți de pornire și oprire . La recepție, acești biți suplimentari sunt eliminați din flux. De obicei, biții de pornire și de oprire încadrează un octet de informație (8 biți), în timp ce bitul de informație cel mai puțin semnificativ este transmis primul, imediat după pornire. Există implementări UART care transmit 5, 6, 7 sau 9 biți de informații. Biții de pornire și oprire încadrați sunt premisa minimă. Unele implementări UART folosesc doi biți de oprire în timpul transmisiei pentru a reduce șansa de desincronizare a receptorului și emițătorului în timpul traficului intens. Receptorul ignoră al doilea bit de oprire, tratându-l ca pe o scurtă pauză pe linie.

Este de acord că starea pasivă (în absența fluxului de date) a intrării și ieșirii UART este 1 logic. Bitul de pornire este întotdeauna 0 logic, astfel încât receptorul UART așteaptă marginea de la 1 la 0 și numără de la 1 la 0. este un interval de timp de jumătate din durata bitului (mijlocul transmisiei bitului de pornire). Dacă în acest moment intrarea este încă 0, atunci se începe procesul de primire a mesajului minim. Pentru a face acest lucru, receptorul numără durate de 9 biți la rând (pentru date pe 8 biți) și în fiecare moment captează starea intrării. Primele 8 valori sunt date primite, ultima valoare este o valoare de test (bit de oprire). Valoarea bitului de oprire este întotdeauna 1. Dacă valoarea reală primită este diferită, UART remediază o eroare.

Pentru a forma intervale de timp, UART-urile de transmisie și recepție au o sursă de timp precisă (tac). Precizia acestei surse trebuie să fie astfel încât suma erorilor (ale receptorului și emițătorului) de setare a intervalului de timp de la începutul impulsului de pornire până la mijlocul impulsului de oprire să nu depășească jumătate (sau mai bine de un sfert). ) din intervalul de biți [1] . Pentru un mesaj pe 8 biți, această valoare este 0,5/9,5 ≈ 5%. În practică, ținând cont de posibilele distorsiuni ale semnalului în linie, eroarea totală de sincronizare nu ar trebui să fie mai mare de 3%. Deoarece, în cel mai rău caz, erorile ceasurilor receptorului și emițătorului pot fi rezumate, toleranța recomandată pentru precizia tacării UART nu este mai mare de 1,5%.

Deoarece biții de ceas ocupă o parte a fluxului de biți, lățimea de bandă UART rezultată este mai mică decât viteza conexiunii. De exemplu, pentru pachetele 8-N-1 pe 8 biți, biții de sincronizare ocupă 20% din flux, ceea ce la o rată de linie fizică de 115200 baud înseamnă o rată utilă de transfer de date de 92160 bps sau 11520 octeți/s.


Verificarea parității


Biți de informații
numărul de biți unici de
informație
starea bitului
de paritate
în modul:
chiar ciudat
00000000 0 0 unu
10100010 3 unu 0
11010010 patru 0 unu
11111110 7 unu 0

Multe implementări UART au capacitatea de a verifica automat integritatea datelor folosind paritatea de biți. Această caracteristică este activată sau dezactivată prin scrierea cuvântului de inițializare corespunzător în registrul intern de control UART. Când această caracteristică este activată, biții de informații de trimitere minime sunt completați cu un bit de paritate final. La transmiterea unui mesaj, dispozitivul logic numără numărul de biți unici din partea informațională a mesajului și, folosind acest număr, setează bitul de paritate la una dintre stări, în funcție de numărul de biți unici și de modul curent de verificare a parității specificat.

Există moduri de paritate par și paritate impară .  _ _ Cu paritatea pară, bitul de paritate este setat într-o astfel de stare încât suma biților unici din pachet (inclusiv datele și bitul de paritate în sine) să fie un număr par . Cu paritate impară, bitul de paritate este setat astfel încât suma tuturor biților din trimitere să fie impară, așa cum se arată în tabelul [2] [3] .  

Când un pachet este primit, dispozitivul logic UART numără automat numărul de 1 biți din pachet, inclusiv bitul de paritate. Dacă paritatea este încălcată în mesajul primit, atunci acesta este un semn al unei erori în canalul de transmisie. Erorile în transferurile binare sunt reduse la inversarea biților, astfel încât logica de paritate poate detecta erori numai dacă un număr impar de biți este corupt (în 1, 3 etc.). Dacă a avut loc o inversare, de exemplu, 2 biți, atunci o astfel de eroare nu este detectată. Când este detectată o eroare de paritate, logica UART setează un semnal de eroare în cuvântul său de stare, care poate fi citit de un dispozitiv extern, cum ar fi un procesor de computer, iar eroarea este gestionată corespunzător.

Prescripție pentru parametri

A fost dezvoltată și adoptată o modalitate scurtă de scriere a parametrilor UART, cum ar fi numărul de biți de date, prezența și tipul bitului de paritate, numărul de biți de oprire. Arată ca o intrare număr-litera-număr, unde:

De exemplu, intrarea 8-N-1 înseamnă că UART este setat la 8 biți de date, fără paritate și un bit de oprire. Pentru a completa parametrii, această intrare este furnizată cu o indicație a vitezei UART, de exemplu, 9600/8-N-1.

Pauza

Unele UART-uri au capacitatea de a trimite și primi un mesaj special numit Break. Constă într-o stare continuă zero a liniei cu o durată evident mai mare decât rafala minimă, de obicei 1,5 rafale minime (pentru 8N1 aceasta este intervale de 15 biți). Unele protocoale de comunicație folosesc această proprietate, de exemplu, protocolul LIN utilizează Break pentru a indica un nou cadru.

Controlul fluxului

Dispozitivele UART timpurii ar putea fi atât de lente încât să nu poată ține pasul cu fluxul de date primite. Pentru a rezolva această problemă, modulele UART erau uneori prevăzute cu ieșiri separate și intrări de control al fluxului. Când tamponul de intrare era plin, logica UART-ului de recepție ar seta ieșirea corespunzătoare să fie dezactivată, iar UART-ul de transmisie ar suspenda transmisia.

Ulterior, controlul fluxului a fost atribuit protocoalelor de comunicare (de exemplu, metoda XOn / XOff ), iar nevoia de linii separate de control al fluxului aproape a dispărut.

În prezent, controlul fluxului la nivel hardware este încă utilizat, de exemplu, în microcontrolere (ultra) eficiente energetic.

Stratul fizic

Circuitul logic UART are circuite I/O corespunzătoare tehnologiei circuitelor semiconductoare: CMOS , TTL , etc. Acest strat fizic poate fi utilizat într-un singur dispozitiv, totuși, de regulă, nu este potrivit pentru conexiuni lungi comutate din cauza protecției scăzute împotriva distrugerii și interferențelor electrice. Straturi fizice speciale au fost dezvoltate pentru astfel de cazuri , cum ar fi bucla de curent , RS-232 , RS-485 , LIN și altele asemenea.

Un tip specific de strat fizic de interfață asincronă este stratul fizic IrDA .

Există straturi fizice UART pentru medii complexe. Într-un anumit sens, un modem telefonic standard de computer poate fi numit și un strat fizic specific al unei interfețe asincrone. Există microcircuite speciale pentru modemurile cu fir realizate special ca stratul fizic al unei interfețe asincrone (adică protocol transparent). Stratul fizic al canalului radio este produs și sub formă de module de receptoare radio și transmițătoare radio.

Driver de strat fizic

Pentru a converti intrările și ieșirile logice ale UART în semnale ale nivelului fizic corespunzător, se folosesc circuite electronice speciale, numite drivere. Pentru toate nivelurile fizice populare, există drivere integrate sub formă de microcircuite.

Duplex

Logica UART permite de obicei transmisia și recepția simultană. Această abilitate este adesea menționată prin cuvântul argou duplex . Cu toate acestea, nu toate straturile fizice permit transferul simultan de date în ambele direcții. În astfel de cazuri, se obișnuiește să se vorbească despre comunicare semi-duplex . Există și soluții în care transferul de date este posibil fizic doar într-o singură direcție, apoi se vorbește despre comunicarea simplex .

Rețea

Inițial, UART a fost conceput pentru comunicarea între două dispozitive punct la punct. Ulterior, au fost create straturi fizice care permit conectarea a mai mult de două UART-uri conform principiului „unul vorbește, mai mulți ascultă”. Astfel de straturi fizice sunt numite rețea . Există implementări de tip magistrală comună (când toate transceiver-urile sunt conectate la un fir) și inel (când receptoarele și transmițătoarele sunt conectate în perechi într-un inel închis). Prima opțiune este mai simplă și mai comună. A doua opțiune este mai complicată, dar mai fiabilă și mai rapidă: operabilitatea tuturor nodurilor este garantată (nodul transmisor va auzi ecoul mesajului său numai dacă este transmis cu succes de către toate nodurile); orice nod poate începe transmisia în orice moment, fără a vă face griji cu privire la riscul unei coliziuni. Cele mai cunoscute straturi fizice ale rețelei sunt RS-485 și LIN .

Suport UART în sistemele de operare mainstream

Utilizarea pe scară largă a UART în tehnologia digitală a predeterminat integrarea suportului pentru această interfață în API-ul multor sisteme de operare. De regulă, această interfață apare în documentația sistemului de operare ca port COM sau port serial .

Microsoft Windows

Porturile seriale din Win32 sunt tratate ca fișiere. Funcția CreateFile este folosită pentru a deschide un port. Pot exista multe porturi, deci sunt denumite COM1, COM2 etc. în ordinea în care se găsesc driverele de dispozitiv. Primele 9 porturi sunt disponibile și ca conducte numite pentru transferul de date (disponibile sub denumirile „COM1”, „COM2”, ...), această metodă de acces este considerată învechită. Este recomandat să adresați toate porturile ca fișiere (numite „\\.\COM1”, „\\.\COM2”, ... „\\.\COMx”).

Căutarea numelor de dispozitive PnP în sistem se face apelând SetupDiGetClassDevs. Cheia HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM există în registry, care afișează porturile COM disponibile în prezent.

Există o secțiune în registru pentru fiecare port. Aceste secțiuni au următoarele denumiri:

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

unde ultima valoare "Serial10000" este un număr unic pentru fiecare port COM nou adăugat la sistem, pentru al doilea - "Serial10001", etc.

UNIX

Porturile COM din sistemul de operare Unix ( Linux ) sunt fișiere de dispozitiv cu caractere. Aceste fișiere sunt de obicei localizate în directorul /dev și sunt numite

Pentru accesul programatic la portul COM, trebuie să deschideți fișierul corespunzător pentru citire/scriere și să efectuați apeluri la funcțiile speciale tcgetattr (pentru a afla setările curente) și tcsetattr (pentru a seta noi setări). De asemenea, poate fi necesar să efectuați apeluri ioctl cu anumiți parametri. După aceea, atunci când scrieți într-un fișier, datele vor fi trimise prin port, iar la citire, programul va primi date deja primite din bufferul portului COM.

Dispozitivele numite „ttyxx” sunt folosite ca dispozitive server, adică aplicația care a deschis acest dispozitiv așteaptă de obicei un apel de intrare de la modem. Aplicația implicită clasică este getty , care așteaptă un apel de intrare, apoi configurează portul COM în funcție de fișierele de configurare, scoate „login:” acolo, acceptă un nume de utilizator și rulează comanda „loginUserName” ca copil, cu intrare standard. și ieșirea redirecționată către portul COM. Această comandă, la rândul său, solicită și verifică parola și, dacă are succes, lansează (nu ca copil, ci în loc de ea însăși, apelând execve în același proces) shell-ul implicit al utilizatorului specificat în fișierul /etc/passwd.

Această tehnologie a apărut istoric în anii 1970, când calculatoare precum PDP-11 (în URSS seria numită SM EVM ) sau VAX au fost folosite sub sistemul de operare UNIX , permițând conectarea multor terminale pentru munca multor utilizatori. Terminalele - și, prin urmare, întreaga interfață cu utilizatorul - au fost conectate prin porturi seriale, cu posibilitatea de a conecta un modem în loc de un terminal și apoi de a apela computerul prin telefon. Până acum, sistemele de operare asemănătoare UNIX au o stivă de terminale și, de obicei, 3 implementări de terminale - un port serial, un ecran în mod text + consolă de tastatură și un „loopback” la unul dintre fișierele deschise ale aplicației de control (iată cum Telnetd, sshd și xterm sunt implementate).

Dispozitivele client cu port serial pentru efectuarea de apeluri către exterior sunt numite cuaxx în multe (dar nu toate) UNIX-urile.

Deoarece portul serial din UNIX este accesibil doar prin stiva de terminale, poate fi un terminal de control pentru procese și grupuri (trimite SIGHUP la deconectare de la modem și SIGINT pe Ctrl-C), acceptă editarea ultimei linii introduse cu tastele săgeți la nivelul nucleului și etc. Dezactivarea acestei caracteristici pentru a transforma dispozitivul într-o „conductă” pentru un flux de octeți necesită apeluri ioctl.

OS/2

Driverul COM.SYS disponibil acceptă doar 4 porturi COM, fiecare dintre ele trebuie să aibă propria linie de întrerupere. Pentru a deservi porturile COM cu o linie de întrerupere comună, trebuie să utilizați driverul SIO [4] .

Android

Deoarece Android rulează pe nucleul Linux, lucrul cu porturile COM în Android este practic același lucru cu lucrul în Linux. Dar rețineți că pentru a lucra cu porturile COM în Android, aveți nevoie de drepturi de root.

Porturi virtuale

În prezent, interfețele fizice bazate pe UART au dispărut practic din echipamentele digitale de consum. Cu toate acestea, ușurința de utilizare și abundența de software care folosea accesul la dispozitive externe printr-un port COM a forțat dezvoltatorii de dispozitive conectate la computere să creeze drivere pentru porturile COM virtuale ( VCP  - port COM virtual). Adică porturi COM pentru care nu există un UART hardware corespunzător.

Protocoale de comunicare

Numai în sarcini foarte rare este acceptabilă trimiterea unui flux de date direct prin UART. De regulă, este necesar să se indice începutul și sfârșitul blocului de date; asigurarea controlului integrității datelor și restaurarea elementelor pierdute; controlați fluxul de date pentru a preveni supraîncărcarea buffer-ului de intrare etc. În aceste scopuri și în multe alte scopuri , sunt inventate protocoale de comunicare  - acorduri pe seturi de date speciale care sunt schimbate între ambele sisteme de calcul pentru a finaliza cu succes sarcina de stabilire a comunicației și transfer date de bază. Algoritmii de protocol depind de sarcinile stabilite pentru sistem și de caracteristicile stratului fizic UART. Algoritmul de protocol este implementat de obicei în software și nu în hardware.

Există o mare varietate de protocoale de comunicație disponibile pentru utilizare cu UART-uri. Cel mai faimos:

Standardizare

Ideea transferului de date asincron a apărut în acele vremuri îndepărtate, când standardizarea era încă puțin îngrijită și cel mai bun lucru la care se putea aștepta de la furnizorii de soluții disparate era publicarea deschisă a algoritmilor pentru funcționarea produselor lor. De fapt, prin urmare, nu există un standard UART ca atare, dar logica funcționării UART este descrisă ca parte a produsului în multe alte standarde: bucla de curent , RS-232 , ISO / IEC 7816 etc.

Vezi și

Note

  1. Determinarea cerințelor de acuratețe a ceasului pentru comunicațiile UART . Consultat la 22 septembrie 2016. Arhivat din original pe 19 septembrie 2011.
  2. Coduri de corectare și detectare a erorilor
  3. Detectarea și corectarea erorilor
  4. Instalarea unei plăci de port COM într-un computer (link inaccesibil) . Preluat la 8 iunie 2014. Arhivat din original la 15 mai 2011. 

Link -uri