Pamiętasz, kiedy drukarki, myszy i modemy miały grube kable z tymi ogromnymi, niezgrabnymi złączami? Takie, które dosłownie trzeba było wkręcać do komputera? Te urządzenia prawdopodobnie używały UARTów do komunikacji z Twoim komputerem. Podczas gdy USB prawie całkowicie zastąpiło te stare kable i złącza, UARTy zdecydowanie nie należą do przeszłości. Znajdziesz UART-y używane w wielu projektach elektroniki DIY do podłączenia modułów GPS, modułów Bluetooth i modułów czytników kart RFID do Raspberry Pi, Arduino lub innych mikrokontrolerów.
UART to skrót od Universal Asynchronous Receiver/Transmitter. Nie jest to protokół komunikacyjny jak SPI i I2C, ale fizyczny obwód w mikrokontrolerze lub samodzielny układ scalony. Głównym celem UART jest przesyłanie i odbieranie danych szeregowych.
Jedną z najlepszych rzeczy w UART jest to, że używa tylko dwóch przewodów do przesyłania danych między urządzeniami. Zasady działania UART są łatwe do zrozumienia, ale jeśli nie czytałeś części pierwszej tej serii, Podstawy protokołu komunikacyjnego SPI, to może być dobre miejsce, aby zacząć.
Wprowadzenie do komunikacji UART
W komunikacji UART, dwa UARTy komunikują się bezpośrednio ze sobą. Nadający UART konwertuje dane równoległe z urządzenia sterującego, takiego jak CPU, na postać szeregową, przesyła je szeregowo do odbierającego UART, który następnie konwertuje dane szeregowe z powrotem na dane równoległe dla urządzenia odbierającego. Do transmisji danych pomiędzy dwoma UART-ami potrzebne są tylko dwa przewody. Dane przepływają z pinu Tx nadawczego UART do pinu Rx odbiorczego UART:
UART-y przesyłają dane asynchronicznie, co oznacza, że nie ma sygnału zegarowego, który synchronizowałby wyjście bitów z nadawczego UART do próbkowania bitów przez odbiorczy UART. Zamiast sygnału zegarowego, nadający UART dodaje bity startu i stopu do przesyłanego pakietu danych. Bity te definiują początek i koniec pakietu danych, dzięki czemu UART odbiorczy wie, kiedy rozpocząć odczytywanie bitów.
Gdy UART odbiorczy wykryje bit startu, zaczyna odczytywać przychodzące bity z określoną częstotliwością, zwaną szybkością transmisji. Szybkość transmisji jest miarą szybkości przesyłania danych, wyrażoną w bitach na sekundę (bps). Oba UART-y muszą pracować z mniej więcej taką samą szybkością transmisji. Szybkość transmisji między nadawczym i odbiorczym UART-em może różnić się tylko o około 10%, zanim czas bitów zbytnio się rozminie.
Oba UART-y muszą być również skonfigurowane do nadawania i odbierania tej samej struktury pakietów danych.
Jak działa UART
UART, który ma nadawać dane, odbiera je z szyny danych. Szyna danych jest używana do wysyłania danych do UART przez inne urządzenie, takie jak CPU, pamięć lub mikrokontroler. Dane są przekazywane z magistrali danych do nadawczego UART w formie równoległej. Po tym jak UART nadający otrzyma równoległe dane z magistrali danych, dodaje bit startu, bit parzystości i bit stopu, tworząc pakiet danych. Następnie, pakiet danych jest wyprowadzany szeregowo, bit po bicie na pin Tx. Odbierający UART odczytuje pakiet danych bit po bicie na swoim pinie Rx. Następnie UART odbiorczy konwertuje dane z powrotem do postaci równoległej i usuwa bit startu, bit parzystości i bity stopu. Na koniec, UART odbierający przekazuje pakiet danych równolegle do szyny danych na końcu odbiornika:
Dane transmitowane przez UART są zorganizowane w pakiety. Każdy pakiet zawiera 1 bit startowy, 5 do 9 bitów danych (w zależności od UART), opcjonalny bit parzystości i 1 lub 2 bity stopu:
Bit startowy
Linia transmisji danych UART jest normalnie utrzymywana na wysokim poziomie napięcia, gdy nie transmituje danych. Aby rozpocząć przesyłanie danych, nadający UART ściąga linię transmisyjną z poziomu wysokiego do niskiego przez jeden cykl zegara. Kiedy UART odbierający wykryje przejście z wysokiego do niskiego napięcia, zaczyna odczytywać bity w ramce danych z częstotliwością szybkości transmisji.
Ramka danych
Ramka danych zawiera rzeczywiste przesyłane dane. Może ona mieć długość od 5 do 8 bitów, jeżeli jest używany bit parzystości. Jeżeli bit parzystości nie jest używany, ramka danych może mieć długość 9 bitów. W większości przypadków, dane są przesyłane z najmniej znaczącym bitem jako pierwszym.
Parzystość
Parzystość opisuje parzystość lub nieparzystość liczby. Bit parzystości jest sposobem dla odbierającego UART, aby powiedzieć, czy jakiekolwiek dane zmieniły się podczas transmisji. Bity mogą być zmienione przez promieniowanie elektromagnetyczne, niedopasowane szybkości transmisji, lub długich transferów danych na odległość. Po tym jak UART odbiorczy odczyta ramkę danych, liczy ilość bitów z wartością 1 i sprawdza, czy suma jest parzysta czy nieparzysta. Jeżeli bit parzystości jest równy 0 (parzystość parzystości), to liczba bitów 1 w ramce danych powinna być parzysta. Jeżeli bit parzystości jest równy 1 (parzystość nieparzysta), to 1 bity w ramce danych powinny dać w sumie liczbę nieparzystą. Jeżeli bit parzystości zgadza się z danymi, UART wie, że transmisja nie zawierała błędów. Ale jeśli bit parzystości jest 0, a suma jest nieparzysta; lub bit parzystości jest 1, a suma jest parzysta, UART wie, że bity w ramce danych zmieniły się.
Bity stopu
Aby zasygnalizować koniec pakietu danych, wysyłający UART napędza linię transmisji danych z niskiego napięcia do wysokiego napięcia przez co najmniej dwa czasy trwania bitu.
Kroki transmisji UART
1. Nadający UART odbiera dane równolegle z szyny danych:
2. Nadający UART dodaje do ramki danych bit startu, bit parzystości i bit(y) stopu:
3. Cały pakiet jest wysyłany szeregowo z nadającego UART do odbierającego UART. Odbierający UART próbkuje linię danych z wcześniej skonfigurowaną szybkością transmisji:
4. Odbierający UART odrzuca bit startu, bit parzystości i bit stopu z ramki danych:
5. Odbierający UART konwertuje dane szeregowe z powrotem na równoległe i przesyła je do magistrali danych po stronie odbierającej:
Advantages and Disadvantages of UARTs
Żaden protokół komunikacyjny nie jest doskonały, ale UARTs są całkiem dobre w tym co robią. Oto kilka zalet i wad, które pomogą Ci zdecydować, czy pasują do potrzeb Twojego projektu, czy nie:
Wady
- Wykorzystuje tylko dwa przewody
- Nie wymaga sygnału zegara
- Posiada bit parzystości, aby umożliwić sprawdzanie błędów
- Struktura pakietu danych może być zmieniana tak długo, jak obie strony są na to przygotowane
- Dobrze udokumentowana i szeroko stosowana metoda
.
Wady
- Rozmiar ramki danych jest ograniczony do maksymalnie 9 bitów
- Nie obsługuje systemów wielokrotnego slave lub wielokrotnego master
- Częstotliwość transmisji każdego UART musi być w granicach 10% od siebie
Przejdź do części trzeciej tej serii, Podstawy protokołu komunikacyjnego I2C, aby dowiedzieć się o innym sposobie komunikacji urządzeń elektronicznych. Lub, jeśli jeszcze tego nie zrobiłeś, sprawdź część pierwszą, Podstawy protokołu komunikacyjnego SPI.