W tym artykule przyjrzymy się popularnemu urządzeniu UART. To nie jest protokół komunikacyjny, ale raczej fizyczny obwód używany w mikrokontrolerach lub samodzielnych układach scalonych do transmisji i odbioru danych szeregowych. Wspiera serię artykułów, które przygotowaliśmy, aby przyjrzeć się różnym typom dostępnych protokołów komunikacji szeregowej.
Komunikacja szeregowa to doskonały mechanizm do przesyłania informacji między urządzeniami takimi jak mikrokontrolery, peryferia produkujące dane oraz inne inteligentne urządzenia. Mamy nadzieję, że znajdziesz ten zasób nieoceniony, kiedy następnym razem twoja konstrukcja będzie wymagała włączenia magistrali komunikacji szeregowej. UART jest również często określany jako port szeregowy w urządzeniu. Jednakże, może to być często mylone z innym rodzajem portu szeregowego, który używa złącza w stylu DB9 i używa RS-232 jako protokołu sprzętowego. Nie jest rzadkością, aby UART był połączony z nadajnikiem RS-232 dla peryferyjnego urządzenia UART w mikrokontrolerze oraz urządzenia opartego na RS-232, aby mogły się ze sobą komunikować.
UART to skrót od Universal Asynchronous Receiver Transmitter, czyli Uniwersalny Asynchroniczny Nadajnik-Odbiornik. Ten system komunikacji wymaga dwóch pinów, oprócz masy. Jeden jest oznaczony jako TX, nadajnik, a drugi jako RX, odbiornik. Pojawienie się słowa asynchroniczny w nazwie oznacza, że nie wymaga sygnału zegarowego. Ponieważ nie posiada zegara, urządzenia nadające i odbierające muszą używać tej samej prędkości transmisji.
Prędkość transmisji (Bd) jest jednostką miary szybkości transmisji. Ten parametr określa prędkość komunikacji przez kanał danych nadajnika i odbiornika. Prędkość transmisji może być przedstawiona jako bity na sekundę, aby to uprościć. Tak więc, prędkość 1000 Bd oznacza, że szybkość komunikacji wynosi 1000 bitów na sekundę, czyli czas trwania jednego bitu to 1/1000 sekundy lub 1 milisekunda. Prędkości transmisji mają standardowe przedrostki metryczne, takie jak kBd (kilobaud), MBd (megabaud) lub GBd (gigabaud). Prędkość transmisji obejmuje nie tylko części danych wiadomości, takie jak bity startowe i stopowe, co oznacza, że szybkość transmisji użytecznych informacji wysyłanych z nadajnika do odbiornika będzie nieco mniejsza.
Niektóre z bardziej popularnych predefiniowanych prędkości transmisji UART to:
Czasami oba urządzenia komunikujące się mogą dostosować swoją prędkość transmisji (baud rate), ale czasami jedno z urządzeń ma stałą prędkość transmisji, co wymaga od drugiego urządzenia dostosowania się do niej.
Więc, aby połączyć dwa urządzenia za pomocą UART, należy połączyć pin nadawczy TX z pinem odbiorczym RX:
Podstawowe połączenie UART z pinami TX, RX i masą
W niektórych konfiguracjach będziesz miał piny RX i TX w obu urządzeniach, co pozwoli Ci wysyłać komendy z mikrokontrolera do dedykowanego układu scalonego i odbierać polecenia lub informacje w przeciwnym kierunku. To nazywa się połączeniem dupleksowym. Istnieją również aplikacje, kiedy informacja zwrotna z drugiego urządzenia nie jest wymagana. W takim przypadku komunikacja jest potrzebna tylko w jednym kierunku; dlatego potrzebna jest tylko jedna linia transmisji TX do RX. To nazywa się połączeniem simpleksowym.
Urządzenie nadające musi wysłać bit startowy, aby zainicjować komunikację z tego urządzenia do urządzenia odbierającego. Ten bit informuje urządzenie odbierające, że komunikacja się rozpoczęła.
Urządzenie UART wysyła bit startowy (rozpoczynając komunikację)
Bity danych są następnie wysyłane jako ośmiobitowy strumień, reprezentujący rzeczywiste dane, gdzie bit najbardziej znaczący (MSB) jest oznaczony jako D7, a bit najmniej znaczący (LSB) jako D0.
Pierwsze urządzenie w komunikacji UART wysyła bity danych po pierwszym bicie startowym.
A na końcu tych bitów danych, nadajnik wysyła bit stopu, który wskazuje, że to jest koniec wiadomości i przenosi magistralę UART do jej trybu bezczynności.
Pierwsze urządzenie w komunikacji UART wysyła bit stopu po bitach danych.
Widzimy w tym przypadku; pełna wiadomość UART będzie składać się z 10 bitów. W trybie bezczynności magistrala UART jest podciągnięta do wysokiego poziomu, wysyła bit startowy, który jest niski, a po nim następuje 8 bitów danych, a następnie bit stopu. Bit stopu nie jest ograniczony tylko do jednego bitu; może przyjmować różne konfiguracje, w zależności od szybkości komunikacji. Ta konfiguracja oznacza, że cały zestaw bitów wiadomości stale zmienia poziom napięcia sygnału magistrali z niskiego na wysoki przynajmniej raz:
Przykład pakietu komunikacji szeregowej UART
Najbardziej znaczący bit D7 może być również używany jako bit parzystości. Ten bit zapewnia podstawowy mechanizm sprawdzania błędów, który pojawia się w najmniejszych blokach komunikacji. Bit parzystości może być używany do zapewnienia, że całkowita liczba bitów wysokich lub jedynek jest nieparzysta lub parzysta, w zależności od kodowania. Dla sprawdzania parzystości parzystej, jeśli bity danych D0 do D6 są ustawione, składają się one z parzystej liczby bitów wysokich, wtedy bit parzystości jest ustawiony na 0 (niski). Odwrotnie, jeśli ten zestaw bitów ma nieparzystą liczbę bitów wysokich, wtedy bit parzystości jest ustawiony na 1 (wysoki). Zapewnia to, że całkowita liczba bitów wysokich w wiadomości będzie parzysta. W przypadku sprawdzania parzystości nieparzystej, jeśli bity danych D0 do D6 są ustawione tak, że składają się one z parzystej liczby bitów wysokich, bit parzystości jest ustawiony na 1 (wysoki). Odwrotnie, jeśli ten zestaw bitów ma nieparzystą liczbę bitów wysokich, wtedy bit parzystości jest ustawiony na 0 (niski). Zapewnia to, że całkowita liczba bitów wysokich w wiadomości będzie nieparzysta.
Więc, używając bitu parzystości, błędy mogą być wykrywane przez sprawdzanie ustawionych bitów. Załóżmy, że całkowita liczba bitów, włączając bit parzystości, ustawionych na wysoki poziom jest nieprawidłowa. W takim przypadku, bit parzystości pozwolił odbiornikowi na wykrycie błędu podczas transmisji. Jednakże, ten typ ochrony przed błędami nie może poprawić pomyłki, tylko wyłapać, że wystąpiła, ponieważ nie ma sposobu, by określić, który bit w całym zestawie bitów jest nieprawidłowy. Może tylko wykryć, jeśli jeden bit jest w złym stanie; wszelkie błędy, które wpływają na wiele bitów, mogą nie zostać wykryte, jeśli ogólna parzystość okaże się być poprawna.
Jeśli wykryty zostanie błąd parzystości, cała wiadomość musi zostać odrzucona i przesłana od nowa. W przypadku wysokiego poziomu zakłóceń lub szumów, osiągnięcie udanej transmisji może zająć znacząco dużo czasu; jednakże, pomaga to zapobiegać błędom wiadomości.
Dodatkowo, odbierająca i nadająca strona komunikacji UART muszą używać dokładnie tego samego szybkości transmisji i długości znaku, mechanizmu parzystości oraz konfiguracji bitu stopu, aby komunikacja była udana.
Istnieje również wariant UART, który nazywa się USART. Jest to Uniwersalny Synchroniczny Asynchroniczny Nadajnik Odbiornik. Może działać zarówno jako kanał asynchroniczny (tak jak UART), jak i synchroniczny, gdy dane są taktowane. Zegar może być odzyskiwany z samych danych lub wysyłany jako oddzielny zewnętrzny sygnał.
Podczas korzystania z USART w trybie synchronicznym, nie są wymagane bity startu i stopu. Pozwala to na wykorzystanie wyższej prędkości transmisji danych podczas pracy synchronicznej, ponieważ czasowanie bitów ma odniesienie do zegara. Dlatego więcej bitów może być używanych na dane zamiast być wykorzystywanych na bity start/stop.
Przykład komunikacji USART
UART |
USART |
UART wymaga tylko sygnału danych |
Tryb synchroniczny USART wymaga zarówno danych, jak i zegara. |
W UART, dane nie muszą być przesyłane z ustaloną prędkością. |
W trybie synchronicznym USART, dane są przesyłane z ustaloną prędkością. |
W UART, dane są zazwyczaj przesyłane po jednym bajcie na raz. |
W USART, synchroniczne dane są zwykle przesyłane w formie bloków danych. |
W UART prędkość transferu danych jest ustalana wokół konkretnych wartości takich jak 4800, 9600, 38400 bps itp. |
W USART, tryb synchroniczny pozwala na wyższą DTR (prędkość transferu danych) niż tryb asynchroniczny, jeśli wszystkie inne czynniki są stałe. |
Prędkość UART jest ograniczona do około 115200 bps. |
USART może osiągnąć prędkości wyższe niż 115 kbps. |
Komunikacja pełnodupleksowa: dane mogą być wysyłane jednocześnie w obu kierunkach. |
Komunikacja półdupleksowa: dane mogą być wysyłane tylko w jednym kierunku na raz. |
Głównym celem UART i USART jest konwersja danych równoległych na magistrali PC na dane szeregowe, które mogą być transmitowane za pomocą sterowników linii przez magistralę zgodną ze standardem protokołu komunikacji szeregowej, takim jak RS-232 czy RS-485. Wymagany będzie konwerter do połączenia między UART/USART a zewnętrzną magistralą. To umożliwia odczytanie danych przez podobne urządzenie bez konieczności używania dokładnie tego samego formatu danych szeregowych. Dopóki transmisja między nimi odbywa się zgodnie z wspólnie obsługiwanym standardowym protokołem, implementacja komunikacji szeregowej w każdym urządzeniu może być specyficzna dla tego urządzenia.
Chociaż UART został w dużej mierze wyparty przez USB na rynku komputerowym, nadal są szeroko stosowane do komunikacji szeregowej w urządzeniach niskobudżetowych.
W tym artykule przyjrzeliśmy się niektórym popularnym funkcjom urządzeń UART oraz omówiliśmy niektóre z ich zalet i szczegóły implementacji. W następnym artykule, Protokoły komunikacji szeregowej - Część trzecia: RS-232, przyjrzymy się niektórym dostępnym protokołom komunikacji szeregowej. Czy coś Ci umknęło? Sprawdź wprowadzenie do Protokołów komunikacji szeregowej.
Narzędzia projektowe w Altium Designer® zawierają wszystko, czego potrzebujesz, aby nadążyć za nowymi technologiami. Porozmawiaj z nami już dziś i dowiedz się, jak możemy ulepszyć Twój kolejny projekt PCB.