Rodzaje kodowania sygnału w interfejsach szeregowych

| Technika

Do najbardziej rozpowszechnionych rodzajów kodowania sygnału w interfejsach szeregowych zalicza się takie rozwiązania jak kodowanie Non-Return-To-Zero, kodowanie Non-Return-To-Zero-Inverted oraz kodowanie Manchester. Warto bliżej poznać zasadę działania tych mechanizmów oraz różnice pomiędzy nimi.

Rodzaje kodowania sygnału w interfejsach szeregowych

W interfejsach szeregowych napotkać można różne rodzaje kodowania sygnału cyfrowego. Do najpopularniejszych zalicza się kodowanie Non- -Return-To-Zero (NRZ), Non-Return-To-Zero-Inverted (NRZI), Return-To-Zero (RZ) oraz Manchester. Każde z podanych rozwiązań ma nieco odmienne charakterystyki, co czyni je wszystkie użytecznymi w różnych typach aplikacji. Przykładowo, projektanci posiadający doświadczenie w obsłudze UART na pewno natknęli się na kodowanie NRZ.

Większość wymienionych typów kodowań ma dwie wersje – unipolarną oraz bipolarną. Wersja unipolarna charakteryzuje się zmianą stanu jedynie pomiędzy dodatnią wartością napięcia a wartością zerową. W wersji bipolarnej zmiany stanu to przejścia pomiędzy dodatnią a ujemną wartością napięcia.

W kodowaniu NRZ wartość logiczna sygnału reprezentowana jest przez odpowiedni poziom napięcia. Do synchronizacji komunikacji wykorzystuje się sygnał zegarowy. Na początku cyklu zegarowego wartość napięcia odpowiadająca stanowi logicznemu wystawiana jest na linii sygnałowej przez nadajnik. W środkowej części cyklu odbiornik próbkuje wartość na linii oraz przypisuje jej odpowiedni stan logiczny. Kodowanie NRZ jest powszechnie wykorzystywane w portach szeregowych. Jedną z głównych wad tego rozwiązania jest trudność transmisji długich ciągów takich samych wartości (zer lub jedynek), ponieważ wiąże się to z możliwością desynchronizacji transmisji. Aby zapobiec takiej sytuacji, kodowanie NRZ oraz NRZI wykorzystuje się zazwyczaj z dodatkowymi rozwiązaniami, gwarantującymi, że liczba kolejnych bitów niezmieniających stanu wyjścia nie przekroczy pewnej określonej wartości maksymalnej. Osiąga się to poprzez dołączenie dodatkowego bitu, nieznaczącego z punktu widzenia treści przesyłanej informacji. Popularne schematy tego typu to np. 4B5B, który umożliwia reprezentację 16 różnych wartości (odpowiadających czterem bitom danych) za pomocą 5 bitów.

Kodowanie RZ do reprezentacji wartości sygnału wykorzystuje impulsy przesyłane na początku cyklu zegarowego. Obecność takiego impulsu oznacza stan logiczny 1, zaś jego brak to stan logiczny 0. W wersji bipolarnej kolejne wartości 1 reprezentowane są przez impulsy o przeciwnej polaryzacji (patrz rys. 1).

 
Rys. 1. Porównanie z wykorzystaniem sygnału zegarowego pozwala lepiej zrozumieć różnice pomiędzy odmiennymi sposobami kodowania. NRZ jest wrażliwe na poziom przesyłanego sygnału, zaś pozostałe opierają się na detekcji przejść pomiędzy tymi poziomami

Kodowania Manchester oraz NRZI charakteryzują się przejściami w środkowej części cyklu zegarowego. W przypadku Manchester w celu odkodowania sygnału należy wykonać operację XOR na zakodowanym sygnale oraz sygnale zegarowym. Wymusza to przynajmniej jedną zmianę poziomu napięcia na każdy zakodowany bit. Dla NRZI przejścia pomiędzy poziomami obecne są jedynie w przypadku wartości 1.

Jednym z głównych problemów w przypadku kodowań Manchester oraz RZ jest konieczność generowania sygnału o dwukrotnie wyższej częstotliwości niż w przypadku pozostałych rozwiązań, podczas gdy prędkość transmisji danych pozostaje bez zmian. Powoduje to znaczące poszerzenie pasma sygnału, co w niektórych zastosowaniach może mieć krytyczne znaczenie. Sygnał tego typu nie wymaga jednak synchronizacji dodatkowym sygnałem zegarowym – jest samotaktujący. Dużą zaletą kodowania Manchester jest ponadto całkowity brak składowej stałej, co umożliwia przesyłanie sygnału tego typu przez urządzenia i linie transmisyjne jej nieprzenoszące (np. transformatory liniowe).

Przedstawione powyżej schematy kodowania są podstawą większości systemów transmisji danych, bardzo często modyfikowaną jednak i dostosowywaną do indywidualnych potrzeb aplikacji. Dla przykładu, układ UART przesyła dane w sekwencji składającej się dodatkowo z bitu startu, co najmniej jednego bitu stopu, a także opcjonalnych bitów parzystości. Bardziej zaawansowane protokoły przenoszą kontrolę poprawności transmisji do wyższych warstw interfejsu, przesyłając sumę kontrolną razem z danymi. Systemy transmisji synchronicznej do mechanizmu synchronizacji sygnału zegarowego wykorzystują zazwyczaj dodatkowy znak o z góry określonej wartości, co pozwala dostosować częstotliwość zegara odbiornika do częstotliwości nadajnika. Schematy kodowania takie jak Manchester ułatwiają implementację tego rozwiązania.

 

Damian Tomaszewski