3.18. Podstawy UART¶
UART (Universal Asynchronous Receiver-Transmitter) to najstarszy i najprostszy sposób przesyłania bajtów między dwoma mikrokontrolerami lub między mikrokontrolerem a komputerem hosta. Dane przenoszą dwa przewody – po jednym dla każdego kierunku – a wspólna masa stanowi powrót sygnału. Żadna ze stron nie korzysta ze wspólnego zegara; obie strony ustalają z góry szybkość transmisji (baud) i odtwarzają taktowanie bitów na podstawie samej linii danych.
3.18.1. Ramka¶
Każdy znak na linii jest opakowany w ramkę: bit startu, bity danych, opcjonalny bit parzystości oraz jeden lub dwa bity stopu.
Jedna ramka UART: bit startu, osiem bitów danych i bit stopu, każdy o szerokości jednego okresu bitu (1 / baudrate sekund).¶
Linia w stanie spoczynku pozostaje wysoka. Odbiornik nasłuchuje opadającego zbocza, które oznacza początek nowej ramki. Następnie próbkuje linię danych raz na okres bitu – zazwyczaj w środku każdego bitu – i składa bity z powrotem w znak. Bit stopu przywraca linię do stanu spoczynku, dzięki czemu można wykryć następny bit startu.
3.18.2. Szybkość transmisji (baud)¶
Okres bitu – a tym samym szybkość łącza – jest określany przez szybkość transmisji (baud), czyli liczbę bitów na sekundę. 9600, 19200, 38400, 57600, 115200, 230400, 460800 i 921600 to wartości standardowe; 115200 jest najczęstszą wartością domyślną. Obie strony muszą uzgodnić szybkość transmisji z dokładnością do kilku procent, w przeciwnym razie odbiornik próbkuje bity w niewłaściwych punktach i dane wracają zniekształcone.
Wyższe szybkości transmisji przesyłają więcej danych na sekundę, ale są bardziej wrażliwe na długość kabla, pojemność oraz precyzję zegarów po obu stronach. Dla krótkich łączy między dwiema płytkami na tym samym stanowisku wartości od 115200 do 921600 działają bez problemu.
3.18.3. Okablowanie¶
Łącze UART wykorzystuje trzy przewody:
Okablowanie UART: TX jednej płytki idzie do RX drugiej, a obie masy są połączone.¶
TX → RX, w obie strony. Pin nadawczy każdej płytki jest pinem odbiorczym drugiej płytki. Częstym błędem początkujących jest połączenie TX → TX – dwa wyjścia walczą ze sobą, a żaden z odbiorników nie otrzymuje danych.
Wspólna masa. Poziomy sygnału są odniesione do masy, więc obie płytki muszą mieć wspólną masę, w przeciwnym razie odbiornik widzi na linii nieprawidłowe napięcie.
3.18.4. Poziomy napięć i warstwy fizyczne¶
Poziomy sygnału na pinach UART kamery to 3,3 V CMOS: masa dla logicznego zera, 3,3 V dla logicznej jedynki. Wszystko, co komunikuje się w standardzie UART 3,3 V CMOS – inny mikrokontroler, adapter USB-szeregowy ustawiony na 3,3 V, moduł GPS 3,3 V – można podłączyć bezpośrednio.
Informacja
Urządzenia UART 5 V CMOS (starsze mikrokontrolery, niektóre moduły GPS, część starszych płytek z sensorami) używają tego samego ramkowania UART, lecz przy poziomach logicznych 5 V. Podłączanie ich bezpośrednio do kamery jest niebezpieczne: TX o napięciu 5 V sterujący RX kamery przekracza bezwzględne maksymalne napięcie wejściowe na kamerach, które nie są odporne na 5 V, a TX kamery o napięciu 3,3 V może nie osiągnąć progu wysokiego stanu urządzenia 5 V dla czystej logicznej jedynki.
Translacja między dwoma napięciami wymaga aktywnego sterownika linii – dedykowanego dwukierunkowego układu konwertera poziomów z własnymi tranzystorami sterującymi po obu stronach każdej linii. Pasywne konwertery oparte na MOSFET i rezystorze podciągającym z Konwersja poziomów napięć nie wystarczą tutaj: ich zbocza narastające opierają się na ładowaniu linii przez rezystor, co jest w porządku przy prędkościach przełączania, ale o wiele za wolne dla UART. Przy 115200 baud każdy bit trwa około 8 µs, a narastanie RC pasywnego konwertera rozmazuje jeden bit w następny.
Aktywny sterownik linii wytwarza czyste zbocza w obu kierunkach przy pełnych szybkościach UART. Wybierz element przeznaczony dla szybkości transmisji, z jaką będzie działać łącze, podłącz TX i RX kamery do strony 3,3 V konwertera, a TX i RX urządzenia 5 V do strony 5 V konwertera.
Trzy starsze warstwy fizyczne używają tego samego ramkowania, ale innych napięć, i wymagają konwertera poziomów między nimi a mikrokontrolerem 3,3 V:
RS-232. Stosowany przez porty szeregowe komputerów stacjonarnych i część sprzętu przemysłowego. Linia waha się mniej więcej między
±5 Va±15 V, ze stanem spoczynku na szynie ujemnej. Odwrócona polaryzacja i wysokie napięcie w porównaniu z CMOS; konwersję obsługuje układ z rodziny MAX232 / MAX3232 (lub podobny).RS-422. Standard sygnalizacji różnicowej dla łączy punkt-punkt (jeden nadajnik, do dziesięciu odbiorników). Nadajnik wysyła sygnał symetryczną parą przewodów; odbiornik widzi różnicę między nimi i ignoruje zakłócenia wspólne na trasie. Łącza w trybie pełnego dupleksu używają dwóch par – po jednej na każdy kierunek. RS-422 sięga od dziesiątek metrów do kilometra w zależności od szybkości transmisji, a układ transceivera RS-422 znajduje się między TX / RX kamery a parą symetryczną.
RS-485. Wielopunktowy krewny RS-422 – ta sama sygnalizacja różnicowa, ale zaprojektowana tak, by umieścić do 32 nadajników i odbiorników na jednej magistrali. Większość łączy działa w trybie półdupleksu na pojedynczej parze, gdzie nadajnik i odbiornik każdego węzła dzielą te same przewody, a oprogramowanie arbitruje, kto nadaje. Stosowany w przemysłowych magistralach automatyki (Modbus, DMX512, Profibus), gdzie przewody biegną daleko, a zakłócenia są duże; układ transceivera RS-485 znajduje się między TX / RX kamery a parą różnicową.
Obie nadal wysyłają ramki UART na poziomie bitowym. Konfiguracja machine.UART kamery (szybkość transmisji, bity, parzystość, bity stopu) jest taka sama niezależnie od tego, która warstwa fizyczna przenosi sygnał po drugiej stronie transceivera.