3.18. Noțiuni de bază despre UART¶
Un UART (Universal Asynchronous Receiver-Transmitter) este cea mai veche și cea mai simplă modalitate de a transfera octeți între două microcontrolere sau între un microcontroler și un PC gazdă. Două fire transportă datele – câte unul pentru fiecare direcție – iar o masă comună returnează semnalul. Niciuna dintre părți nu folosește un ceas comun; ele convin asupra unei rate baud dinainte și recuperează temporizarea biților chiar din linia de date.
3.18.1. Cadrul¶
Fiecare caracter de pe fir este învelit într-un cadru: un bit de start, biții de date, un bit de paritate opțional și unul sau doi biți de stop.
Un cadru UART: un bit de start, opt biți de date și un bit de stop, fiecare având lățimea unei perioade de bit (1 / baudrate secunde).¶
Linia stă inactivă la nivel ridicat. Receptorul urmărește un front descrescător, care marchează începutul unui nou cadru. Apoi eșantionează linia de date o dată pe perioadă de bit – de obicei la mijlocul fiecărui bit – și reasamblează biții într-un caracter. Bitul de stop readuce linia la inactiv, astfel încât următorul bit de start să poată fi detectat.
3.18.2. Rata baud¶
Perioada de bit – și viteza legăturii – este stabilită de rata baud, numărul de biți pe secundă. 9600, 19200, 38400, 57600, 115200, 230400, 460800 și 921600 sunt valorile standard; 115200 este valoarea implicită cea mai răspândită. Ambele capete trebuie să convină asupra ratei baud cu o precizie de câteva procente, altfel receptorul eșantionează biții în punctele greșite și datele revin alterate.
Ratele baud mai mari transferă mai multe date pe secundă, dar sunt mai sensibile la lungimea cablului, la capacitate și la precizia ceasurilor de la fiecare capăt. Pentru legături scurte între două plăci aflate pe aceeași bancă de lucru, valori de la 115200 la 921600 funcționează fără probleme.
3.18.3. Cablare¶
O legătură UART folosește trei fire:
Cablarea UART: TX de pe o placă merge la RX de pe cealaltă, iar ambele mase sunt legate.¶
TX → RX, în ambele sensuri. Pinul de transmisie al fiecărei plăci este pinul de recepție al celeilalte plăci. O greșeală frecventă a începătorilor este să conecteze TX → TX – două ieșiri care se luptă între ele, fără date la niciunul dintre receptoare.
Masă comună. Nivelurile semnalului sunt raportate la masă, deci cele două plăci trebuie să aibă o masă comună, altfel receptorul vede o tensiune greșită pe linie.
3.18.4. Niveluri de tensiune și straturi fizice¶
Nivelurile semnalului pe pinii UART ai camerei sunt de 3,3 V CMOS: masă pentru un zero logic, 3,3 V pentru un unu logic. Orice dispozitiv care vorbește UART CMOS la 3,3 V – un alt microcontroler, un adaptor USB-serial setat la 3,3 V, un modul GPS de 3,3 V – poate fi conectat direct.
Notă
Dispozitivele UART CMOS de 5 V (microcontrolere mai vechi, anumite module GPS, unele plăci de extensie pentru senzori mai vechi) folosesc aceeași încadrare UART la niveluri logice de 5 V. Conectarea lor direct la cameră este nesigură: un TX de 5 V care alimentează pinul RX al camerei depășește tensiunea maximă absolută de intrare pe camerele care nu sunt tolerante la 5 V, iar pinul TX de 3,3 V al camerei s-ar putea să nu atingă pragul ridicat al dispozitivului de 5 V pentru un unu logic curat.
Conversia între cele două tensiuni necesită un driver de linie activ – un circuit integrat dedicat de translatare a nivelului, bidirecțional, cu tranzistoare proprii de comandă pe ambele laturi ale fiecărei linii. Translatoarele pasive cu MOSFET și rezistor de pull-up din Conversia nivelurilor de tensiune nu sunt suficiente aici: fronturile lor crescătoare se bazează pe încărcarea liniei printr-un rezistor, ceea ce este în regulă la vitezele de comutație, dar mult prea lent pentru UART. La 115200 baud fiecare bit durează aproximativ 8 µs, iar panta RC a translatorului pasiv face ca un bit să se contopească cu următorul.
Un driver de linie activ produce fronturi curate în ambele direcții la rate UART maxime. Alegeți o componentă specificată pentru rata baud la care va funcționa legătura, conectați pinii TX și RX ai camerei la latura de 3,3 V a translatorului și conectați pinii TX și RX ai dispozitivului de 5 V la latura de 5 V a translatorului.
Trei straturi fizice mai vechi folosesc aceeași încadrare, dar tensiuni diferite, și au nevoie de un convertor de nivel între ele și un microcontroler de 3,3 V:
RS-232. Folosit de porturile seriale de pe PC-urile desktop și de unele echipamente industriale. Linia oscilează între aproximativ
±5 Vși±15 V, cu starea inactivă la șina negativă. Polaritate inversată și tensiune ridicată față de CMOS; un cip din familia MAX232 / MAX3232 (sau similar) se ocupă de conversie.RS-422. Un standard de semnalizare diferențială pentru legături punct-la-punct (un emițător, până la zece receptoare). Emițătorul transmite pe o pereche echilibrată de fire; receptorul vede diferența dintre ele și ignoră zgomotul de mod comun de pe traseu. Legăturile full-duplex folosesc două perechi – câte una pentru fiecare direcție. RS-422 ajunge de la zeci de metri până la un kilometru, în funcție de rata baud, iar un cip transceiver RS-422 se află între pinii TX / RX ai camerei și perechea echilibrată.
RS-485. Vărul multi-punct al RS-422 – aceeași semnalizare diferențială, dar conceput pentru a conecta până la 32 de emițătoare și receptoare pe o singură magistrală. Majoritatea legăturilor sunt half-duplex pe o singură pereche, emițătorul și receptorul fiecărui nod partajând aceleași fire, iar software-ul arbitrând cine vorbește. Folosit în magistrale de automatizare industrială (Modbus, DMX512, Profibus), unde firele se întind departe și zgomotul este intens; un cip transceiver RS-485 se află între pinii TX / RX ai camerei și perechea diferențială.
Ambele trimit în continuare cadre UART la nivelul de bit subiacent. Configurația machine.UART a camerei (rata baud, biți, paritate, biți de stop) este aceeași indiferent de stratul fizic care transportă semnalul pe cealaltă parte a transceiverului.