1/47 Transmisja synchroniczna i asynchroniczna

Prezentacja poświęcona porównaniu dwóch podstawowych metod synchronizacji transmisji danych: transmisji synchronicznej i asynchronicznej. Omówione zostaną definicje, budowa ramek, zasady oversamplingu, metody kodowania oraz praktyczne zastosowania obu technik w telekomunikacji i systemach wbudowanych.

Transmisja synchroniczna – nadajnik i odbiornik zsynchronizowane wspólnym sygnałem taktującym. Transmisja asynchroniczna – synchronizacja za pomocą bitów startu i stopu.
Ilustracja: Grafika porównawcza transmisji synchronicznej (zegar + dane) i asynchronicznej (start/stop)

Kluczowym aspektem transmisji synchronicznej jest preambuła – sekwencja bitów poprzedzająca właściwą ramkę, służąca do synchronizacji odbiornika przed odebraniem danych. W protokole HDLC ramka rozpoczyna się flagą 01111110, a aby uniknąć pojawienia się tej sekwencji w danych, stosuje się mechanizm bit stuffingu (wstawiania dodatkowego zera po pięciu kolejnych jedynkach). CRC (Cyclic Redundancy Check) umożliwia wykrywanie błędów transmisji poprzez obliczenie reszty z dzielenia wielomianowego całej ramki przez ustalony wielomian generatora.

Synchronizacja zegara w odbiorniku odbywa się za pomocą pętli DPLL (Digital Phase-Locked Loop), która na podstawie zboczy w odebranym sygnale odtwarza częstotliwość i fazę nadajnika. Kodowanie NRZ (Non-Return-to-Zero) jest najprostsze, ale nie gwarantuje wystarczającej liczby przejść do stabilnej pracy DPLL, dlatego częściej stosuje się NRZI (zmiana stanu przy zerze) lub Manchester (przejście w środku każdego bitu). Protokół PPP (Point-to-Point Protocol) stanowi rozwinięcie HDLC dla łączy punkt-punkt i oferuje negocjację parametrów połączenia poprzez protokół LCP.

2/47 Streszczenie

Transmisja synchroniczna i asynchroniczna – streszczenie

Transmisja synchroniczna wymaga wspólnego sygnału taktującego (zegara) dla nadajnika i odbiornika, a dane przesyłane są w blokach lub ramkach o ustalonej strukturze. Zapewnia to wysoką efektywność, gdyż nie ma potrzeby dodawania bitów synchronizujących między poszczególnymi bajtami.

Transmisja asynchroniczna wykorzystuje bity startu i stopu do indywidualnej synchronizacji każdego przesyłanego znaku. Jest prostsza w implementacji, tolerancyjna na różnice częstotliwości zegarów, ale charakteryzuje się większym narzutem danych.

  • Synchroniczna – wspólny zegar, transmisja blokowa, wysoka efektywność
  • Asynchroniczna – bity startu/stopu, prostota, większy narzut
  • Oversampling – próbkowanie sygnału z wielokrotnością częstotliwości transmisji
  • Zastosowania – Ethernet/SDH (synchr.), UART/RS-232 (asynchr.)
Ilustracja: Mapa pojęć – transmisja synchroniczna vs asynchroniczna

Podstawowa różnica między transmisją synchroniczną a asynchroniczną sprowadza się do sposobu synchronizacji nadajnika i odbiornika. W transmisji synchronicznej oba urządzenia korzystają ze wspólnego sygnału taktującego, co pozwala na przesyłanie danych w dużych blokach bez dodatkowych znaczników między bajtami. Protokół HDLC definiuje ramkę o strukturze: flaga otwarcia, adres, pole sterujące, dane, suma kontrolna CRC i flaga zamknięcia.

W transmisji asynchronicznej każdy znak jest synchronizowany indywidualnie poprzez bit startu (przejście z 1 na 0) i bit stopu (powrót do 1), co pozwala na tolerowanie różnic częstotliwości zegarów do kilku procent. Natomiast w transmisji synchronicznej stosuje się zaawansowane techniki kodowania, takie jak Manchester, NRZI czy 8B/10B, które zapewniają odpowiednią gęstość zboczy do odtworzenia zegara przez pętlę DPLL. Kodowanie NRZI (Non-Return-to-Zero Inverted) reprezentuje logiczne zero jako zmianę stanu linii, a logiczną jedynkę jako brak zmiany, co przy odpowiednim zagęszczeniu zer w strumieniu umożliwia synchronizację.

3/47 Definicja transmisji danych

Czym jest transmisja danych?

Transmisja danych – proces przesyłania informacji między nadawcą (transmitter) a odbiorcą (receiver) za pośrednictwem medium transmisyjnego.

Dane są reprezentowane jako sygnały elektryczne, optyczne lub radiowe, które podlegają modulacji i kodowaniu. Podstawowym wyzwaniem w transmisji jest zapewnienie, aby odbiorca poprawnie zinterpretował odebrane bity – w szczególności aby wiedział, gdzie zaczyna się i kończy każdy bit oraz każdy bajt danych.

W zależności od metody synchronizacji rozróżniamy dwa podstawowe podejścia: transmisję synchroniczną i transmisję asynchroniczną.

Ilustracja: Schemat blokowy transmisji danych – nadajnik, medium, odbiornik

Proces transmisji danych obejmuje trzy główne elementy: nadajnik przekształcający dane na sygnał, medium transmisyjne (np. skrętka, światłowód, fala radiowa) oraz odbiornik rekonstruujący pierwotną informację. Kluczowym wyzwaniem jest kodowanie liniowe – sposób reprezentacji bitów na medium – które musi zapewnić nie tylko poprawny odbiór, ale także możliwość odtworzenia sygnału zegara. NRZ (Non-Return-to-Zero) to najprostsze kodowanie, w którym wysoki poziom napięcia oznacza 1, a niski 0, jednak długie ciągi tych samych bitów prowadzą do utraty synchronizacji.

Rozwiązaniem tego problemu jest kodowanie Manchester, w którym każdej wartości bitu towarzyszy przejście w środku okresu bitowego (0→1 dla 0, 1→0 dla 1), co gwarantuje zbocze do odtworzenia zegara co każdy bit. DPLL (Digital Phase-Locked Loop) w odbiorniku analizuje te zbocza i dostraja wewnętrzny generator do częstotliwości nadajnika. W protokołach takich jak HDLC i PPP stosuje się dodatkowo mechanizm bit stuffingu, który wymusza pojawienie się zbocza po pięciu kolejnych bitach o tej samej wartości.

4/47 Problem synchronizacji

Dlaczego synchronizacja jest potrzebna?

Nadawca i odbiorca muszą być zgodni co do momentu rozpoczęcia i zakończenia każdego bitu. Odbiorca próbkuje linię transmisyjną w określonych odstępach czasu – jeśli próbkowanie nastąpi w złym momencie, odczytana wartość bitu może być błędna.

Problem synchronizacji – nadawca i odbiorca muszą wiedzieć, kiedy zaczyna się i kończy każdy bit oraz każda jednostka danych (bajt, ramka).

Brak synchronizacji prowadzi do błędów bitowych (bit errors), które mogą skutkować utratą integralności przesyłanych informacji. Rozwiązaniem są mechanizmy synchronizacji – mogą być oparte na wspólnym zegarze (synchroniczne) lub na sygnałach znacznikowych (asynchroniczne).

Ilustracja: Przebieg czasowy – prawidłowe i nieprawidłowe próbkowanie bitu

Problem synchronizacji sprowadza się do konieczności próbkowania linii danych w odpowiednim momencie – optymalnie w środku okresu bitowego, gdzie sygnał jest najbardziej stabilny. DPLL (Digital Phase-Locked Loop) to kluczowy układ odbiornika, który na podstawie zboczy w odebranym sygnale odtwarza sygnał zegara i wyznacza momenty próbkowania. Jeśli próbkowanie nastąpi zbyt blisko krawędzi bitu, nawet niewielkie zakłócenia mogą spowodować błędny odczyt wartości bitu.

W transmisji synchronicznej stosuje się preambułę – określoną sekwencję bitów na początku ramki (np. 101010... w Ethernet), która umożliwia DPLL osiągnięcie stabilnej synchronizacji przed odebraniem właściwych danych. Bit stuffing w HDLC zapobiega pojawieniu się sekwencji flagi (01111110) w danych poprzez wstawienie zera po każdych pięciu jedynkach. CRC (Cyclic Redundancy Check) stanowi ostatnią linię obrony przed błędami – 32-bitowa suma CRC-32 w Ethernet czy CRC-16 w HDLC wykrywa praktycznie wszystkie błędy wielobitowe.

5/47 Dwa podejścia do synchronizacji

Synchroniczna vs asynchroniczna

Transmisja synchroniczna – nadajnik i odbiornik są zsynchronizowane wspólnym sygnałem taktującym (clock). Dane przesyłane są w blokach.
Transmisja asynchroniczna – każdy znak synchronizowany indywidualnie za pomocą bitów startu i stopu.

Wybór metody zależy od wymagań aplikacji: transmisja synchroniczna sprawdza się tam, gdzie liczy się wysoka przepustowość i efektywność (sieci szkieletowe, magistrale wewnętrzne). Transmisja asynchroniczna jest preferowana w prostych, tanich interfejsach (komunikacja z mikrokontrolerami, terminale).

Ilustracja: Porównanie dwóch podejść – schemat blokowy z zegarem (synchr.) i bez (asynchr.)

Oba podejścia do synchronizacji różnią się fundamentalnie konstrukcją nadajnika i odbiornika. W transmisji synchronicznej nadajnik wysyła zarówno dane, jak i sygnał zegara (osobną linią lub zakodowany w strumieniu), a odbiornik używa pętli DPLL do wydzielenia tego zegara. Standard HDLC/SDLC (Synchronous Data Link Control) autorstwa IBM był jednym z pierwszych protokołów wykorzystujących transmisję synchroniczną z bit stuffingiem i CRC.

W transmisji asynchronicznej każdy bajt jest poprzedzony bitem startu (0) i zakończony bitem stopu (1), co pozwala na prostą implementację sprzętową w układzie UART. Kodowanie NRZ jest w tym przypadku naturalnym wyborem, ponieważ odbiornik resynchronizuje się przy każdym bicie startu. PPP (Point-to-Point Protocol) jest przykładem protokołu synchronicznego działającego w warstwie łącza danych, który potrafi negocjować parametry połączenia, w tym metodę uwierzytelniania i kompresję nagłówków.

6/47 Znaczenie wyboru metody

Wpływ na efektywność i niezawodność

Wybór metody transmisji ma kluczowe znaczenie dla:

  • Efektywności widmowej – stosunek liczby przesyłanych bitów danych do całkowitej liczby przesyłanych bitów (w tym narzutów)
  • Niezawodności – odporności na błędy transmisji, zakłócenia i różnice częstotliwości zegarów
  • Złożoności implementacji – kosztu układów nadawczo-odbiorczych
  • Maksymalnej prędkości – ograniczeń wynikających z metody synchronizacji

Inżynierowie muszą znaleźć optymalny kompromis między tymi czynnikami, projektując łącze komunikacyjne.

Ilustracja: Diagram kompromisu – efektywność vs złożoność vs niezawodność

Wybór metody transmisji jest zawsze wypadkową trzech czynników: efektywności widmowej, niezawodności oraz złożoności implementacji. Transmisja synchroniczna z protokołem HDLC osiąga efektywność bliską 100% przy dużych ramkach, ale wymaga zaawansowanych układów DPLL i kodowania liniowego, co zwiększa koszt. CRC jest standardowym mechanizmem kontroli błędów w obu podejściach – przykładowo CRC-32 stosowany w Ethernet zapewnia detekcję błędów z prawdopodobieństwem 99,99999998%.

Bit stuffing w HDLC i PPP zwiększa niezawodność poprzez eliminację fałszywych flag, ale wprowadza niewielki narzut zmiennej długości (średnio 1 bit na 32 bity danych). Kodowanie Manchester, stosowane w 10BASE-T, podwaja wymagane pasmo, co jest ceną za prostotę synchronizacji. NRZI z bit stuffingiem, używane w USB, stanowi kompromis między efektywnością a możliwością odtworzenia zegara – każde zero powoduje zmianę stanu, a bit stuffing wymusza przejścia przy długich sekwencjach jedynek.

7/47 Transmisja synchroniczna – definicja

Definicja transmisji synchronicznej

Transmisja synchroniczna – metoda przesyłania danych, w której nadawca i odbiorca są zsynchronizowani wspólnym sygnałem taktującym (clock). Dane są przesyłane w postaci bloków lub ramek o ustalonej strukturze.

Sygnał taktujący określa momenty próbkowania linii danych. Każde zbocze (narastające lub opadające) zegara wyznacza granicę kolejnego bitu. Dzięki temu nadawca i odbiorca działają w tym samym rytmie, bez konieczności negocjowania granic poszczególnych znaków.

Transmisja synchroniczna dominuje w nowoczesnych sieciach telekomunikacyjnych i magistralach komputerowych.

Ilustracja: Schemat transmisji synchronicznej – linia danych + linia zegara

Transmisja synchroniczna opiera się na założeniu, że nadajnik i odbiornik działają z tym samym sygnałem taktującym, co eliminuje potrzebę dodawania bitów synchronizujących między poszczególnymi bajtami. Sygnał zegara może być przesyłany oddzielnym przewodem (jak w SPI) lub zakodowany w strumieniu danych przy użyciu odpowiedniego kodowania liniowego. W protokole HDLC ramka synchroniczna rozpoczyna się flagą 01111110, która służy zarówno do synchronizacji, jak i oznaczania granic ramki.

Aby uniknąć przypadkowego wystąpienia flagi w danych, HDLC stosuje bit stuffing – nadajnik wstawia dodatkowe zero po każdych pięciu kolejnych jedynkach, a odbiornik usuwa te zera po odebraniu. CRC (Cyclic Redundancy Check) umożliwia wykrycie błędów transmisji poprzez obliczenie reszty z dzielenia wielomianowego zawartości ramki. Kodowanie NRZI (Non-Return-to-Zero Inverted) jest powszechnie stosowane w synchronicznych interfejsach szeregowych, ponieważ zmiana stanu przy każdym logicznym zerze ułatwia odtworzenie zegara przez DPLL.

8/47 Bloki i ramki w transmisji synchronicznej

Struktura blokowa transmisji synchronicznej

W transmisji synchronicznej dane są grupowane w bloki lub ramki. Każda ramka zawiera:

  • Preambułę / nagłówek – synchronizacja na poziomie ramki, adresy źródła i celu
  • Dane (payload) – właściwa przesyłana informacja
  • Sumę kontrolną (FCS) – detekcja błędów transmisji
  • Znaczniki granic – flagi oznaczające początek i koniec ramki
Brak bitów startu/stopu między bajtami – dane są przesyłane jako ciągły strumień bitów, co zwiększa efektywność transmisji.
Ilustracja: Budowa ramki synchronicznej – preambuła, dane, FCS

Ramka synchroniczna w protokole HDLC ma ściśle określoną strukturę: flaga otwarcia (01111110), 8-bitowy adres, 8-bitowe pole sterujące, pole danych o zmiennej długości, 16-bitową sumę kontrolną CRC-16 oraz flagę zamknięcia. PPP (Point-to-Point Protocol) rozszerza HDLC o pole protokołu (2 bajty) identyfikujące typ danych w ramce, co umożliwia multipleksowanie różnych protokołów sieciowych na jednym łączu. Preambuła w Ethernet (7 bajtów naprzemiennych 1 i 0) pełni funkcję synchronizacji DPLL przed rozpoczęciem właściwej ramki.

Flagę 01111110 można uznać za szczególny przypadek preambuły – jest to sekwencja unikalna, która nie może wystąpić w żadnym innym miejscu ramki. Bit stuffing w HDLC i PPP zapewnia przezroczystość danych (ang. transparency), czyli możliwość przesyłania dowolnych wartości binarnych bez ryzyka fałszywej detekcji flagi. CRC-16 stosowane w HDLC wyliczane jest z całej ramki pomiędzy flagami i pozwala wykryć wszystkie błędy pojedyncze, podwójne oraz wszystkie błędy o nieparzystej liczbie bitów.

9/47 Sygnał taktujący w transmisji synchronicznej

Przesyłanie sygnału taktującego

Sygnał taktujący (zegar) może być przesyłany na dwa sposoby:

  • Osobną linią – dedykowany przewód zegara (np. SPI – trzy linie: SCLK, MOSI, MISO). Zegar jest przesyłany równolegle z danymi
  • Zakodowany w strumieniu danych – zegar jest odtwarzany z samego sygnału danych za pomocą pętli PLL (Phase-Locked Loop). Stosowane w Ethernet, USB, SATA

Przesyłanie zegara oddzielną linią jest prostsze, ale wymaga dodatkowego przewodu. Kodowanie zegara w danych oszczędza linie, ale wymaga bardziej złożonych układów odbiornika.

Ilustracja: Dwa warianty – osobna linia zegara vs zegar w strumieniu danych

Sygnał taktujący w transmisji synchronicznej może być przesyłany na dwa sposoby: jako osobny przewód (dedicated clock) lub zakodowany w strumieniu danych (embedded clock). W przypadku osobnej linii zegara, jak w interfejsie SPI, master generuje sygnał SCLK, a slave próbkuje dane na zboczu narastającym lub opadającym, co jest bardzo proste w implementacji. Wada tego rozwiązania to problem ze skosem czasowym (clock skew) przy wyższych częstotliwościach i dłuższych dystansach.

Kodowanie zegara w strumieniu danych eliminuje potrzebę dodatkowej linii, ale wymaga bardziej złożonego odbiornika z pętlą DPLL. Kodowanie Manchester gwarantuje przejście w środku każdego bitu, co daje DPLL stałą podstawę do odtworzenia zegara, ale podwaja wymagane pasmo. NRZI z bit stuffingiem (stosowane w USB) stanowi kompromis – przejścia występują przy zerach, a stuffing wymusza je przy długich ciągach jedynek, co zapewnia DPLL wystarczającą gęstość zboczy do utrzymania synchronizacji.

10/47 Efektywność transmisji synchronicznej

Wysoka efektywność dzięki brakowi narzutów

W transmisji synchronicznej nie ma bitów startu i stopu między kolejnymi bajtami. Oznacza to, że na każde 8 bitów danych przypada dokładnie 8 bitów przesyłanych (przy założeniu braku kodowania nadmiarowego).

Efektywność transmisji synchronicznej: dane / (dane + narzut) × 100%. Dla strumienia danych bez kodowania: ~100%. Dla kodowania 8B/10B: 80%.

Narzut związany jest głównie z kodowaniem liniowym (np. 8B/10B, 64B/66B) i nagłówkami ramek, które są znikome w porównaniu z objętością przesyłanych danych. Dla ramki Ethernet 1500 bajtów narzut nagłówka to ~38 bajtów – efektywność ≈ 97,5%.

Ilustracja: Wykres porównawczy efektywności – synchroniczna vs asynchroniczna

Efektywność transmisji synchronicznej jest znacznie wyższa niż asynchronicznej, ponieważ narzut ogranicza się do nagłówków ramek i kodowania liniowego. Dla ramki HDLC z 4096 bajtami danych narzut wynosi zaledwie 6 bajtów (flaga, adres, sterowanie, CRC, flaga), co daje efektywność 99,85%. PPP dodaje 2 bajty na pole protokołu, co w praktyce nie zmienia znacząco bilansu – efektywność pozostaje na poziomie powyżej 99% dla dużych ramek.

Transmisja asynchroniczna, z narzutem 2–3 bitów na każdy bajt (20–30%), traci tym więcej im mniejsze są przesyłane jednostki danych. Kodowanie liniowe dodatkowo wpływa na rzeczywistą przepustowość – 8B/10B stosowane w PCIe i SATA dodaje 20% narzutu, ale umożliwia odtworzenie zegara i zapewnia DC-balance. CRC w obu rodzajach transmisji dodaje zaledwie 2–4 bajty na ramkę, co przy dużych blokach danych jest pomijalne.

11/47 Przykłady transmisji synchronicznej

Znane standardy synchroniczne

  • Ethernet – ramki z preambułą (7 bajtów) i SFD (Start Frame Delimiter). Kodowanie 4B/5B (Fast Ethernet) lub 64B/66B (Gigabit Ethernet). Zegar odtwarzany z sygnału
  • SDH/SONET – synchroniczna hierarchia cyfrowa, magistrale światłowodowe szkieletów sieci telekomunikacyjnych. Precyzyjna synchronizacja zegarów w całej sieci
  • SPI – interfejs synchroniczny z oddzielną linią zegara (SCLK). Pełny dupleks, trzy lub cztery linie
  • I²C – synchroniczna magistrala dwuprzewodowa (SCL, SDA) z adresowaniem urządzeń
Ilustracja: Ikony standardów – Ethernet, SDH, SPI, I²C

Ethernet jako najbardziej rozpowszechniony standard transmisji synchronicznej wykorzystuje ramki z preambułą synchronizującą i sumą kontrolną CRC-32 w polu FCS. SDH/SONET stanowi szkielet światłowodowych sieci telekomunikacyjnych, gdzie wszystkie węzły są zsynchronizowane do wspólnego zegara atomowego i przesyłają dane w ramkach STM-N o stałym okresie 125 mikrosekund. SPI i I²C to synchroniczne interfejsy wewnątrzsystemowe, w których master generuje zegar dla wszystkich urządzeń podłączonych do magistrali.

W SDH stosuje się skomplikowany mechanizm wskaźników (ang. pointers) umożliwiający niewielkie przesunięcia fazowe między węzłami bez utraty synchronizacji. Ethernet w wariancie 10BASE-T wykorzystuje kodowanie Manchester, podczas gdy szybsze wersje stosują 4B/5B (100BASE-TX) lub 64B/66B (10GBASE-T) z zaawansowanymi układami DPLL. PPP, choć często kojarzony z łączami asynchronicznymi, jest protokołem synchronicznym wykorzystującym ramki HDLC z bit stuffingiem i CRC.

12/47 Transmisja asynchroniczna – definicja

Definicja transmisji asynchronicznej

Transmisja asynchroniczna – metoda przesyłania danych, w której każdy znak jest synchronizowany indywidualnie za pomocą bitów startu i stopu. Nie wymaga wspólnego sygnału taktującego między nadawcą a odbiorcą.

W transmisji asynchronicznej nadawca i odbiorca mają własne, niezależne zegary. Aby odbiorca wiedział, kiedy rozpoczyna się transmisja znaku, nadawca wysyła bit startu (zawsze 0). Następnie przesyłane są bity danych, opcjonalny bit parzystości i bity stopu (zawsze 1).

Jest to najprostsza i najtańsza metoda transmisji szeregowej, stosowana od początków telekomunikacji.

Ilustracja: Schemat transmisji asynchronicznej – znak z bitami startu i stopu

Transmisja asynchroniczna charakteryzuje się tym, że każdy przesyłany znak jest synchronizowany indywidualnie za pomocą bitu startu i bitu stopu, co eliminuje potrzebę wspólnego sygnału zegara. Nadajnik i odbiornik mają własne, niezależne generatory zegara, a ich częstotliwości muszą być zgodne z tolerancją około ±2–5%. W przeciwieństwie do transmisji synchronicznej, gdzie stosuje się protokoły HDLC czy PPP, w asynchronicznej podstawą jest prosty interfejs UART.

Brak wspólnego zegara sprawia, że transmisja asynchroniczna jest znacznie prostsza w implementacji, ale kosztem większego narzutu – na każdy bajt danych przypadają 2–3 dodatkowe bity. Nie ma tu potrzeby stosowania bit stuffingu ani skomplikowanych metod kodowania liniowego, ponieważ odbiornik resynchronizuje się przy każdym nowym znaku. CRC nie jest standardowo stosowane w UART – zamiast tego używa się opcjonalnego bitu parzystości do wykrywania pojedynczych błędów.

13/47 Bity startu i stopu

Rola bitów startu i stopu

Bit startu – zawsze 0 (spacja). Informuje odbiorcę, że za chwilę rozpocznie się transmisja znaku. Wykrycie zbocza opadającego (z 1 na 0) uruchamia licznik bitów odbiornika.
Bity stopu – zawsze 1 (mark). Zapewniają odstęp między kolejnymi znakami. Mogą być 1 lub 2 bity stopu.

Między znakami linia pozostaje w stanie 1 (mark). Nadawca może wysyłać kolejne znaki w dowolnych odstępach czasu – stąd nazwa "asynchroniczna" (bez wspólnego zegara).

Ilustracja: Przebieg czasowy – bit startu, dane, bit stopu

Bit startu w transmisji asynchronicznej jest zawsze wartością logiczną 0 (spacja) i jego zadaniem jest poinformowanie odbiornika o rozpoczęciu transmisji znaku. Odbiornik wykrywa zbocze opadające sygnału (z 1 na 0) i uruchamia wewnętrzny licznik bitów, który określa momenty próbkowania kolejnych bitów danych. Bity stopu, zawsze równe 1 (mark), zapewniają minimalny odstęp między kolejnymi znakami i gwarantują, że linia powróci do stanu spoczynku przed rozpoczęciem następnej transmisji.

Dzięki oversamplingowi (najczęściej 16×) odbiornik próbkuje linię w środku każdego bitu, co minimalizuje ryzyko błędnego odczytu na krawędziach. W transmisji synchronicznej zamiast bitów start/stop stosuje się flagi HDLC (01111110) i bit stuffing, aby utrzymać synchronizację w długim strumieniu danych. Mechanizm CRC w synchronicznej jest znacznie skuteczniejszy niż bit parzystości w asynchronicznej – podczas gdy parzystość wykrywa tylko nieparzystą liczbę błędów, CRC-16 wykrywa praktycznie wszystkie błędy w ramce.

14/47 Brak wspólnego sygnału taktującego

Niezależne zegary nadawcy i odbiorcy

W transmisji asynchronicznej każdy układ ma swój własny zegar. Odbiorca nie zna dokładnej częstotliwości nadawcy – zna ją jedynie z pewną tolerancją. Zazwyczaj dopuszczalna różnica wynosi ±2–5%.

Zaleta: Prostsza implementacja – nie trzeba przesyłać ani odtwarzać sygnału zegara. Dwa urządzenia mogą komunikować się za pomocą zaledwie dwóch przewodów (masa + sygnał danych).

Odbiorca synchronizuje się na zboczu opadającym bitu startu, a następnie próbkuje kolejne bity w środku każdego okresu bitowego, korzystając z własnego zegara. Przy dłuższych transmisjach różnice zegarów mogłyby się kumulować, dlatego każdy znak jest synchronizowany od nowa.

Ilustracja: Niezależne zegary nadawcy i odbiorcy – różnica częstotliwości

Brak wspólnego sygnału taktującego w transmisji asynchronicznej oznacza, że nadajnik i odbiornik muszą polegać na własnych generatorach zegara, których częstotliwości różnią się o pewną tolerancję. Zazwyczaj dopuszczalna różnica wynosi ±2% dla prędkości do 115200 baud, co przy 16× oversamplingu przekłada się na maksymalne przesunięcie fazy o około 3 próbki na koniec 10-bitowej ramki. Dla porównania, w transmisji synchronicznej z DPLL odchyłka fazy jest korygowana na bieżąco w każdym bicie.

W protokole HDLC i PPP synchronizacja na poziomie ramki odbywa się za pomocą flag 01111110, a preambuła w Ethernet zapewnia DPLL czas na ustabilizowanie się przed odebraniem danych. Bit stuffing stosowany w tych protokołach nie tylko zapobiega fałszywej detekcji flagi, ale także wymusza wystąpienie zboczy w strumieniu, co ułatwia pracę pętli DPLL. Kodowanie NRZI w USB dodatkowo zwiększa gęstość przejść poprzez zmianę stanu przy każdym logicznym zerze.

15/47 Transmisja w nieregularnych odstępach

Transmisja znaków w dowolnym momencie

Charakterystyczną cechą transmisji asynchronicznej jest możliwość przesyłania znaków w dowolnych odstępach czasu. Nadawca może wysłać znak, a następnie czekać dowolnie długo przed wysłaniem kolejnego.

  • W przerwach między znakami linia pozostaje w stanie spoczynkowym (mark = 1)
  • Brak konieczności wypełniania przerw danymi wypełniającymi (idle pattern)
  • Idealna dla transmisji znakowych (tekst, komendy terminalowe) i aplikacji, gdzie dane pojawiają się nieregularnie

W transmisji synchronicznej przerwy musiałyby być wypełniane flagami lub znakami wypełnienia (idle), aby utrzymać synchronizację zegara.

Ilustracja: Przebieg czasowy – znaki w nieregularnych odstępach (asynchr.) vs ciągły strumień (synchr.)

Transmisja asynchroniczna pozwala na przesyłanie znaków w dowolnych odstępach czasu, co jest naturalne dla interakcji człowiek-maszyna i aplikacji terminalowych. W przerwach między znakami linia pozostaje w stanie spoczynku (mark = 1), nie ma konieczności przesyłania żadnych znaków wypełnienia. W transmisji synchronicznej przerwy w transmisji muszą być wypełniane flagami HDLC (01111110) lub specjalnymi symbolami idle, aby DPLL nie stracił synchronizacji.

Protokół PPP na łączach synchronicznych wypełnia okresy bez danych flagami, co utrzymuje ciągłość strumienia bitów i stabilność pętli DPLL. W przypadku transmisji asynchronicznej, UART po wykryciu bitu startu po prostu odczytuje 8–9 kolejnych bitów i zwraca do stanu spoczynku. CRC w transmisji synchronicznej jest obliczany dla całej ramki w sposób ciągły, podczas gdy w asynchronicznej kontrola błędów ogranicza się do pojedynczego bitu parzystości na znak, co jest znacznie słabszym mechanizmem.

16/47 Przykłady transmisji asynchronicznej

Znane standardy asynchroniczne

  • UART (Universal Asynchronous Receiver-Transmitter) – podstawowy interfejs szeregowy w mikrokontrolerach i komputerach. Konfiguracja: prędkość (baud), liczba bitów danych, parzystość, bity stopu
  • RS-232 – standard komunikacji szeregowej (1962). Określa poziomy napięć (±3–15 V), sygnały sterujące (RTS, CTS, DTR, DSR) i złącze DB-9
  • GPS NMEA – protokół NMEA 0183, 4800 baud, 8N1. Dane z odbiorników GPS w formacie tekstowym ASCII
  • MIDI – cyfrowy interfejs instrumentów muzycznych, 31,25 kbaud, asynchroniczna transmisja szeregowa
Ilustracja: Ikony standardów – UART, RS-232, GPS NMEA, MIDI

UART (Universal Asynchronous Receiver-Transmitter) jest podstawowym układem realizującym transmisję asynchroniczną i stanowi element niemal każdego mikrokontrolera. RS-232 definiuje poziomy napięć dla transmisji asynchronicznej (±3–15 V) oraz zestaw sygnałów sterujących (RTS, CTS, DTR, DSR) umożliwiających kontrolę przepływu. GPS NMEA 0183 wykorzystuje transmisję asynchroniczną 8N1 przy prędkości 4800 baud do przesyłania danych nawigacyjnych w formacie tekstowym ASCII.

MIDI (Musical Instrument Digital Interface) używa asynchronicznej transmisji szeregowej z prędkością 31,25 kbaud do komunikacji między instrumentami muzycznymi a komputerami. W porównaniu z transmisją synchroniczną, standardy asynchroniczne są znacznie prostsze w implementacji, ale nie osiągają prędkości rzędu Gb/s charakterystycznych dla Ethernet czy PCIe. Współczesne układy UART często integrują funkcje automatyzujące obsługę ramek asynchronicznych, w tym generowanie i weryfikację bitu parzystości oraz wykrywanie błędów ramki (framing error).

17/47 Budowa ramki asynchronicznej – bit startu

Bit startu – rozpoczęcie transmisji znaku

Bit startu – pierwszy bit ramki asynchronicznej, zawsze o wartości logicznej 0 (spacja). Jego zadaniem jest poinformowanie odbiorcy o rozpoczęciu transmisji nowego znaku.

W stanie spoczynku linia danych znajduje się w stanie 1 (mark). Gdy nadawca rozpoczyna transmisję, ustawia linię w stan 0 – odbiorca wykrywa zbocze opadające (z 1 na 0) i uruchamia wewnętrzny licznik bitów.

Czas trwania bitu startu jest równy czasowi trwania pojedynczego bitu (1/baud). Po wykryciu bitu startu odbiorca próbkuje dane w środku każdego kolejnego okresu bitowego.

Ilustracja: Wykrywanie bitu startu – zbocze opadające (1→0)

Bit startu w transmisji asynchronicznej jest wykrywany przez odbiornik poprzez obserwację zbocza opadającego na linii danych – przejście ze stanu spoczynku (1) do stanu 0. Aby odróżnić prawdziwy bit startu od szpilki zakłócenia, odbiornik z oversamplingiem 16× próbkuje linię po 8 okresach od pierwszego wykrytego zbocza i sprawdza, czy linia nadal jest w stanie 0. Jeśli tak, bit startu jest potwierdzany i rozpoczyna się odbiór danych.

W transmisji synchronicznej odpowiednikiem bitu startu jest preambuła – dłuższa sekwencja bitów (np. 101010... w Ethernet lub flaga 01111110 w HDLC), która synchronizuje DPLL przed właściwą transmisją. Bit stuffing w HDLC i PPP zapobiega przypadkowemu wystąpieniu flagi w danych, co dla bitu startu nie jest potrzebne, ponieważ ma on stałą wartość 0 i jest zawsze związany z początkiem znaku. CRC w synchronicznej jest obliczany na podstawie całej ramki i dodawany na jej końcu, podczas gdy w asynchronicznej kontrola błędów ogranicza się do bitu parzystości.

18/47 Budowa ramki asynchronicznej – bity danych

Bity danych – właściwa informacja

Po bicie startu przesyłanych jest od 5 do 8 bitów danych. Liczba bitów danych jest negocjowana między nadawcą a odbiorcą – najczęściej stosuje się 8 bitów (pełny bajt).

LSB first – bity danych są przesyłane w kolejności od najmniej znaczącego (LSB – Least Significant Bit) do najbardziej znaczącego (MSB). Dotyczy to zarówno transmisji UART, jak i RS-232.

Przykład: dla znaku 'A' (ASCII 0x41 = 01000001 binarne), kolejność bitów: 10000010 (LSB first). Najpierw przesyłany jest bit 0 (LSB = 1), a na końcu bit 7 (MSB = 0).

Ilustracja: Kolejność bitów LSB first – przykład znaku 'A'

W transmisji asynchronicznej bity danych są przesyłane w kolejności LSB first (Least Significant Bit first), co oznacza, że najmniej znaczący bit bajtu jest transmitowany jako pierwszy zaraz po bicie startu. Na przykład dla znaku 'A' (ASCII 0x41 = 01000001) kolejność bitów na linii to: start (0), 1 (LSB), 0, 0, 0, 0, 0, 1, 0 (MSB), opcjonalna parzystość, stop (1). W transmisji synchronicznej kolejność bitów w ramce zależy od konkretnego protokołu – HDLC również stosuje LSB first dla adresu i sterowania.

W kodowaniu NRZ i NRZI używanych w transmisji synchronicznej kolejność bitów jest również istotna, ponieważ wpływa na liczbę przejść sygnału i tym samym na zdolność DPLL do odtworzenia zegara. CRC (Cyclic Redundancy Check) jest obliczany niezależnie od kolejności transmisji bitów i dodawany na końcu ramki w HDLC lub PPP. Bit stuffing w HDLC dotyczy całego strumienia bitów między flagami, niezależnie od kolejności bajtów – po każdych pięciu jedynkach wstawiane jest zero.

19/47 Budowa ramki asynchronicznej – bit parzystości

Bit parzystości – kontrola błędów

Bit parzystości (parity bit) – opcjonalny bit umieszczany po bitach danych, służący do wykrywania pojedynczych błędów transmisji.

Rodzaje parzystości:

  • Even (parzysta) – bit parzystości ustawiany tak, aby całkowita liczba jedynek w danych + bicie parzystości była parzysta
  • Odd (nieparzysta) – całkowita liczba jedynek ma być nieparzysta
  • Mark – bit parzystości zawsze 1
  • Space – bit parzystości zawsze 0
  • None – brak bitu parzystości

Typowe oznaczenie konfiguracji: 8N1 (8 bitów, No parity, 1 stop bit), 8E1 (8 bitów, Even parity, 1 stop bit).

Ilustracja: Tabela parzystości – przykład even parity dla znaku 'A'

Bit parzystości w transmisji asynchronicznej jest najprostszym mechanizmem detekcji błędów, który polega na dodaniu do ramki jednego dodatkowego bitu tak, aby całkowita liczba jedynek była parzysta (even parity) lub nieparzysta (odd parity). W przypadku znaku 'A' (0x41 = 01000001) mamy dwie jedynki, więc przy parzystości even bit parzystości wynosi 0. Ograniczeniem tej metody jest brak możliwości wykrycia parzystej liczby błędów oraz braku korekcji.

W transmisji synchronicznej zamiast bitu parzystości stosuje się znacznie bardziej zaawansowany mechanizm CRC (Cyclic Redundancy Check), który potrafi wykryć błędy o dowolnej krotności w ramach całej ramki. CRC-16 stosowany w HDLC i PPP obliczany jest z całego pola danych między flagami i dodawany jako 16-bitowa suma kontrolna. Kodowanie 8B/10B używane w synchronicznych standardach jak SATA czy PCIe zapewnia dodatkową detekcję błędów poprzez sprawdzanie poprawności odebranych symboli – nie wszystkie kody 10-bitowe są dozwolone.

20/47 Budowa ramki asynchronicznej – bity stopu

Bity stopu – odstęp między znakami

Bity stopu – 1 lub 2 bity o wartości logicznej 1 (mark), umieszczane po bicie parzystości (lub po danych, jeśli parzystość nie jest używana). Zapewniają minimalny odstęp między kolejnymi znakami.

Po zakończeniu transmisji znaku linia wraca do stanu 1 na czas trwania bitów stopu. Zanim nadawca rozpocznie kolejny znak, musi odczekać co najmniej ten czas.

1 bit stopu – typowe dla 8N1, minimalny odstęp. 2 bity stopu – stosowane w wolniejszych transmisjach (np. 110 baud) lub gdy nadajnik potrzebuje więcej czasu na przygotowanie kolejnego znaku.

Ilustracja: Ramka asynchroniczna z 1 i 2 bitami stopu

Bity stopu w transmisji asynchronicznej mają zawsze wartość logiczną 1 (mark) i zapewniają minimalny odstęp między kolejnymi znakami. Standardowo stosuje się 1 bit stopu (konfiguracja 8N1), ale w wolniejszych transmisjach lub przy dużych różnicach częstotliwości zegarów stosuje się 2 bity stopu (8N2). Dodatkowy bit stopu daje odbiornikowi więcej czasu na przetworzenie odebranego znaku i przygotowanie się do odbioru następnego.

W transmisji synchronicznej nie ma odpowiednika bitów stopu – ramki następują bezpośrednio po sobie, a przerwy wypełniane są flagami HDLC (01111110) lub symbolami idle. PPP na łączach synchronicznych również wykorzystuje flagi jako wypełnienie między ramkami. Sprawdzanie poprawności bitu stopu (framing error detection) w UART polega na weryfikacji, czy po odebraniu danych linia ma wartość 1 – jeśli nie, odbiornik sygnalizuje błąd ramki, co jest analogiczne do wykrycia nieprawidłowej flagi w HDLC.

21/47 Format ramki asynchronicznej – podsumowanie

Pełny format ramki asynchronicznej

Format ramki: 1 bit startu + 5–8 bitów danych + 0–1 bit parzystości + 1–2 bity stopu = 7–12 bitów na znak.

Najczęściej spotykane konfiguracje:

KonfiguracjaStartDaneParzystośćStopRazem
8N1180110 bitów
8E1181111 bitów
8N2180211 bitów
7E1171110 bitów

Narzut transmisji asynchronicznej to 2–3 bity na każdy znak, czyli 20–30% całkowitej liczby przesyłanych bitów.

Ilustracja: Schemat ramki asynchronicznej – wszystkie składniki

Pełna ramka asynchroniczna składa się z bitu startu (0), 5–8 bitów danych (LSB first), opcjonalnego bitu parzystości oraz 1–2 bitów stopu (1), co daje łącznie 7–12 bitów na każdy przesłany znak. Dla najpopularniejszej konfiguracji 8N1 (8 bitów danych, brak parzystości, 1 bit stopu) narzut wynosi 2 bity na 10, czyli 20%. Dla porównania, w transmisji synchronicznej z HDLC narzut na flagi, adres, sterowanie i CRC to zaledwie 6 bajtów niezależnie od rozmiaru danych.

W transmisji synchronicznej każda ramka HDLC zawiera flagę otwarcia (01111110), pole adresu, sterowania, dane, CRC-16 i flagę zamknięcia. PPP rozszerza ten format o pole protokołu (2 bajty) identyfikujące rodzaj danych w ramce. Bit stuffing w HDLC i PPP zapewnia przezroczystość danych poprzez wstawianie zera po każdych pięciu jedynkach, co jest usuwane przez odbiornik. CRC w tych protokołach jest obliczany z pól między flagami i dodawany przed flagą zamknięcia.

22/47 Oversampling – definicja

Definicja oversamplingu

Oversampling – technika próbkowania sygnału z częstotliwością wielokrotnie wyższą niż nominalna częstotliwość transmisji (baud rate). Stosowana w odbiornikach UART do poprawy synchronizacji i odporności na zakłócenia.

W odbiorniku UART wewnętrzny zegar pracuje z częstotliwością fsample = oversampling × baud rate. Odbiorca próbkuje linię danych w regularnych odstępach, a następnie na podstawie tych próbek określa wartość każdego bitu.

Oversampling umożliwia precyzyjne określenie środka bitu, co minimalizuje ryzyko błędnego odczytu na krawędziach.

Ilustracja: Próbkowanie sygnału z oversamplingiem – wiele próbek na bit

Oversampling to technika polegająca na próbkowaniu linii danych z częstotliwością wielokrotnie wyższą niż nominalna prędkość transmisji, co pozwala na precyzyjne określenie środka każdego bitu. W odbiornikach UART standardowy oversampling 16× oznacza, że wewnętrzny zegar próbkuje linię 16 razy w czasie trwania jednego bitu, co przy 9600 baud daje częstotliwość próbkowania 153,6 kHz. Na podstawie tych próbek odbiornik wybiera optymalny moment do odczytu wartości bitu.

W transmisji synchronicznej odpowiednikiem oversamplingu jest DPLL (Digital Phase-Locked Loop), która na podstawie zboczy w odebranym sygnale odtwarza sygnał zegara. Kodowanie Manchester dostarcza zbocze w środku każdego bitu, co daje DPLL stały sygnał do synchronizacji. NRZI z bit stuffingiem (stosowane w USB) wymusza przejścia przy zerach, a stuffing zapobiega zbyt długim sekwencjom bez przejść, co jest kluczowe dla utrzymania synchronizacji DPLL w transmisji synchronicznej.

23/47 Oversampling – typowe wartości

Typowe mnożniki oversamplingu

W praktyce stosuje się następujące wartości oversamplingu:

MnożnikPróbek na bitZastosowanie
4Najprostszy, minimalne wymagania sprzętowe
8Kompromis między dokładnością a złożonością
16×16Najczęściej stosowany w UART – dobra dokładność
16× oversampling – standard w większości układów UART. Dla 9600 baud częstotliwość próbkowania wynosi 16 × 9600 = 153600 Hz.

Wyższy mnożnik oznacza większą dokładność, ale też wyższe wymagania co do częstotliwości zegara odbiornika. W nowoczesnych układach spotyka się również oversampling 32× lub 64×.

Ilustracja: Porównanie oversamplingu 4×, 8×, 16× – próbkowanie bitu

Wybór mnożnika oversamplingu w UART jest kompromisem między dokładnością synchronizacji a maksymalną osiągalną prędkością transmisji. Przy oversamplingu 4× wymagany zegar odbiornika jest tylko 4 razy szybszy od prędkości transmisji, co pozwala na wyższe prędkości, ale daje mniejszą precyzję próbkowania. Oversampling 16× jest najczęściej stosowany, ponieważ zapewnia dobrą odporność na zakłócenia i wystarczającą precyzję przy umiarkowanych wymaganiach co do częstotliwości zegara.

W transmisji synchronicznej rola oversamplingu jest nieco inna – DPLL analizuje zbocza sygnału i na ich podstawie odtwarza zegar, bez konieczności wielokrotnego próbkowania każdego bitu. Kodowanie NRZ nie zmienia stanu przy długich sekwencjach tych samych bitów, co utrudnia pracę DPLL, podczas gdy kodowanie Manchester gwarantuje przejście co każdy bit. CRC w transmisji synchronicznej jest obliczany niezależnie od metody oversamplingu – stanowi dodatkową warstwę zabezpieczenia przed błędami wynikającymi z niedokładnej synchronizacji.

24/47 Oversampling w UART – detekcja bitu startu

Zastosowanie oversamplingu w UART

Oversampling w UART pełni dwie kluczowe funkcje:

  • Detekcja bitu startu – odbiorca wykrywa zbocze opadające (1→0) i potwierdza bit startu po kilku próbkach (np. po 8 z 16 dla 16×), aby odrzucić szpilki zakłóceń
  • Próbkowanie w środku bitu – po potwierdzeniu bitu startu odbiorca odlicza 8 okresów (dla 16×), aby trafić w środek pierwszego bitu danych, a następnie próbkuje co 16 okresów, aby trafić w środek każdego kolejnego bitu
Zaleta: Próbkowanie w środku bitu minimalizuje ryzyko błędu spowodowanego przez oscylacje na krawędziach sygnału (ringing) lub zakłócenia.
Ilustracja: Detekcja bitu startu i próbkowanie w środku bitu z 16× oversamplingiem

W odbiorniku UART z oversamplingiem 16× proces odbioru bitu startu rozpoczyna się od wykrycia zbocza opadającego na linii danych. Po upływie 8 okresów zegara próbkującego (połowa czasu trwania bitu) odbiornik ponownie sprawdza stan linii – jeśli nadal jest 0, bit startu jest potwierdzany, co eliminuje fałszywe detekcje spowodowane zakłóceniami. Następnie odbiornik próbkuje każdy kolejny bit w jego środku, odliczając 16 okresów między próbkami.

W transmisji synchronicznej podobną funkcję pełni preambuła – na przykład w Ethernet 7 bajtów naprzemiennych 1 i 0 umożliwia DPLL osiągnięcie stabilnej synchronizacji przed odebraniem SFD (Start Frame Delimiter) i właściwych danych. HDLC używa flagi 01111110 do synchronizacji, a bit stuffing zapobiega pojawieniu się tej flagi w danych. W obu przypadkach DPLL musi być zablokowana na fazę sygnału przed rozpoczęciem odbioru danych, co jest kluczowe dla poprawności transmisji.

25/47 Oversampling – zalety

Zalety oversamplingu

  • Większa odporność na zakłócenia – krótkie impulsy zakłóceń (szpilki) są odrzucane, ponieważ do potwierdzenia bitu potrzeba kilku zgodnych próbek
  • Precyzyjniejsza synchronizacja – próbkowanie w środku bitu zapewnia największy margines czasowy przed zmianą stanu linii
  • Możliwość detekcji błędów ramki – jeśli stan linii nie odpowiada oczekiwanemu (np. bit stopu = 0 zamiast 1), odbiorca sygnalizuje błąd ramki (framing error)
  • Większa tolerancja na różnice zegarów – przy 16× oversamplingu dopuszczalna różnica częstotliwości między nadawcą a odbiorcą wynosi około ±2–3%
Ilustracja: Wykres – odporność na zakłócenia z oversamplingiem i bez

Oversampling znacząco zwiększa odporność transmisji asynchronicznej na zakłócenia impulsowe (szpilki), ponieważ krótkie zakłócenia są odrzucane na etapie potwierdzania bitu startu. Dodatkowo próbkowanie w środku bitu, a nie na jego krawędziach, minimalizuje wpływ oscylacji i przesłuchów występujących przy zmianach stanu linii. W przypadku transmisji synchronicznej, DPLL z pętlą sprzężenia fazowego filtruje zakłócenia, a kodowanie Manchester dodatkowo redukuje błędy poprzez podwajanie częstotliwości przejść.

CRC w transmisji synchronicznej stanowi dodatkową linię obrony przed zakłóceniami – nawet jeśli pojedyncze bity zostaną odebrane błędnie, suma kontrolna wykryje uszkodzenie ramki. W HDLC i PPP bit stuffing, choć stosowany głównie do przezroczystości danych, również pomaga w utrzymaniu synchronizacji DPLL podczas długich transmisji. W transmisji asynchronicznej z UART błąd ramki (framing error) jest wykrywany, gdy bit stopu ma wartość 0 zamiast 1, co może być spowodowane zarówno zakłóceniem, jak i niedopasowaniem prędkości.

26/47 Synchronizacja – dedykowana linia zegara

Oddzielna linia zegara

Dedykowana linia zegara – najprostsza metoda synchronizacji w transmisji synchronicznej. Nadawca przesyła sygnał zegara osobnym przewodem, a odbiorca próbkuje dane na zboczu narastającym lub opadającym tego zegara.

Przykład – SPI: Interfejs SPI (Serial Peripheral Interface) wykorzystuje trzy linie: SCLK (Serial Clock – zegar), MOSI (Master Out Slave In – dane z mastera) i MISO (Master In Slave Out – dane z slave'a). Zegar jest generowany przez mastera, a slave działa synchronicznie z tym zegarem.

Zaleta: prostota i niskie opóźnienie. Wada: dodatkowa linia sygnałowa – problem przy dłuższych dystansach (skew między zegarem a danymi).

Ilustracja: Schemat SPI – SCLK, MOSI, MISO

Interfejs SPI z dedykowaną linią zegara SCLK jest najprostszym przykładem transmisji synchronicznej, gdzie master generuje sygnał taktujący dla wszystkich urządzeń na magistrali. Ponieważ SCLK jest przesyłany osobnym przewodem, odbiornik nie potrzebuje DPLL do odtworzenia zegara – próbkuje dane bezpośrednio na zboczu narastającym lub opadającym SCLK. SPI umożliwia transmisję full-duplex (jednoczesne nadawanie i odbiór) z prędkościami do kilkudziesięciu MHz.

W przeciwieństwie do SPI, protokół HDLC i PPP nie używają osobnej linii zegara – zegar jest odtwarzany ze strumienia danych za pomocą DPLL i odpowiedniego kodowania. Kodowanie NRZI w USB zapewnia przejścia przy zerach, co ułatwia synchronizację, a bit stuffing wymusza przejścia przy długich sekwencjach jedynek. CRC w HDLC i PPP chroni integralność danych, podczas gdy SPI często nie stosuje żadnej sumy kontrolnej, pozostawiając detekcję błędów wyższym warstwom protokołu.

27/47 Kodowanie Manchester

Kodowanie Manchester – zegar w sygnale danych

Kodowanie Manchester – metoda kodowania, w której bit 0 jest reprezentowany przez przejście z niskiego na wysoki (0→1) w środku okresu bitowego, a bit 1 przez przejście z wysokiego na niski (1→0). Zegar jest odtwarzany z tych przejść.

Każdy bit zawiera przejście w swojej środkowej części, co pozwala odbiorcy na odtworzenie sygnału zegara za pomocą pętli PLL. Dodatkowo na początku każdego bitu może wystąpić dodatkowe przejście, jeśli kolejne bity mają tę samą wartość.

Zastosowanie: Ethernet 10BASE-T (10 Mb/s), RFID, niektóre systemy przemysłowe.

Ilustracja: Przebieg kodowania Manchester – bity 0 i 1 z przejściem w środku

Kodowanie Manchester jest metodą kodowania liniowego, w której każdy bit danych zawiera przejście w środku okresu bitowego: bit 0 jest reprezentowany jako przejście od niskiego do wysokiego (0→1), a bit 1 jako przejście od wysokiego do niskiego (1→0). Gwarantuje to zbocze w każdym bicie, co umożliwia odbiornikowi precyzyjne odtworzenie sygnału zegara za pomocą DPLL bez potrzeby przesyłania osobnej linii zegara. Wadą Manchester jest podwojenie wymaganego pasma w porównaniu z NRZ.

W porównaniu z NRZI, które zmienia stan tylko przy zerach, Manchester jest znacznie prostszy do zsynchronizowania, ale mniej efektywny widmowo. W Ethernet 10BASE-T kodowanie Manchester umożliwiło osiągnięcie 10 Mb/s przy użyciu taniej skrętki i prostych układów DPLL. Dla wyższych prędkości zastąpiono je bardziej efektywnymi kodowaniami, takimi jak 4B/5B (100 Mb/s) czy 64B/66B (10 Gb/s), które oferują mniejszy narzut przy zachowaniu możliwości odtworzenia zegara.

28/47 Kodowanie 4B/5B

Kodowanie 4B/5B – zapewnienie przejść

Kodowanie 4B/5B – każde 4 bity danych są zastępowane 5-bitowym kodem. Spośród 32 możliwych kodów 5-bitowych wybiera się 16 kodów danych (dla wartości 0–15) oraz kody kontrolne. Zapewnia to, że w strumieniu nigdy nie wystąpi więcej niż 3 kolejne identyczne bity.

Dzięki ograniczeniu długości sekwencji tych samych bitów odbiorca może odtworzyć sygnał zegara – nigdy nie traci synchronizacji.

Zastosowanie: Fast Ethernet 100BASE-TX (100 Mb/s), FDDI.

Efektywność: 4/5 = 80%. Narzut 20% jest ceną za możliwość odtworzenia zegara.

Ilustracja: Tabela kodowania 4B/5B – 4 bity danych → 5 bitów kodu

Kodowanie 4B/5B przekształca każde 4 bity danych w 5-bitowy symbol, wybierając spośród 32 możliwych kodów tylko 16 oznaczających dane oraz kilka kodów kontrolnych (np. JK do oznaczania granic ramek). Głównym celem jest zapewnienie, że w strumieniu nigdy nie wystąpi więcej niż 3 kolejne identyczne bity, co umożliwia DPLL utrzymanie synchronizacji. Dodatkowo część kodów kontrolnych służy do sygnalizacji stanów specjalnych, takich jak idle czy error.

Efektywność kodowania 4B/5B wynosi 4/5 = 80%, co oznacza 20-procentowy narzut w stosunku do surowej przepływności bitowej. Fast Ethernet 100BASE-TX wykorzystuje 4B/5B w połączeniu z kodowaniem MLT-3, które redukuje pasmo sygnału. W porównaniu z Manchester (100% narzutu), 4B/5B jest dwukrotnie bardziej efektywne, a w porównaniu z 8B/10B oferuje nieco większą prostotę implementacji kosztem gorszego DC-balance.

29/47 Kodowanie 8B/10B

Kodowanie 8B/10B – zaawansowane kodowanie

Kodowanie 8B/10B – każde 8 bitów danych (bajt) jest kodowane jako 10-bitowy symbol. Zapewnia DC-balance (równoważenie składowej stałej) i wystarczającą liczbę przejść do odtworzenia zegara.

Podstawowe cechy:

  • Kodowanie: 8 bitów → 10 bitów (narzut 20%)
  • DC-balance – liczba wysłanych zer i jedynek jest mniej więcej równa, co eliminuje składową stałą
  • Detekcja błędów – nie wszystkie kody 10-bitowe są dozwolone; odebranie nieprawidłowego kodu oznacza błąd transmisji
  • Kody kontrolne (K-codes) – specjalne symbole do oznaczania granic ramek

Zastosowanie: SATA, PCIe, USB 3.0, Gigabit Ethernet (1000BASE-X).

Ilustracja: Schemat kodowania 8B/10B – bajt danych → 10-bitowy symbol

Kodowanie 8B/10B, opracowane przez IBM w latach 80., jest zaawansowaną metodą kodowania stosowaną w standardach synchronicznych wymagających DC-balance i niezawodnej synchronizacji. Każdy bajt (8 bitów) jest dzielony na 3 i 5 bitów, które są kodowane odpowiednio na 4 i 6 bitów, dając łącznie 10-bitowy symbol. DC-balance oznacza, że liczba zer i jedynek w strumieniu jest zrównoważona, co eliminuje składową stałą i umożliwia stosowanie transformatorów lub sprzężenia pojemnościowego.

Dodatkową zaletą 8B/10B jest możliwość wykrywania błędów transmisji – nie wszystkie kody 10-bitowe są dozwolone, więc odebranie nieprawidłowego symbolu natychmiast sygnalizuje błąd. Specjalne kody kontrolne (K-codes) umożliwiają oznaczanie granic ramek, co jest wykorzystywane w PCIe, SATA i USB 3.0 zamiast flag HDLC. W przeciwieństwie do prostego NRZ, 8B/10B zapewnia wystarczającą gęstość przejść do stabilnej pracy DPLL nawet przy transmisji długich ciągów tych samych danych.

30/47 Porównanie metod synchronizacji

Zestawienie metod synchronizacji synchronicznej

MetodaDodatkowe linieNarzutDC-balanceDetekcja błędówPrzykład
Dedicated clocktak (+1 linia)0%nienieSPI
Manchesternie100% (2× pasmo)taknie10BASE-T
4B/5Bnie20%częściowoczęściowo100BASE-TX
8B/10Bnie20%taktakSATA, PCIe
64B/66Bnie~3%taktak10GbE
Ilustracja: Wykres porównawczy – narzut vs złożoność metod synchronizacji

Porównanie metod synchronizacji ujawnia wyraźny kompromis między narzutem a złożonością implementacji. Dedykowana linia zegara (jak w SPI) ma zerowy narzut, ale wymaga dodatkowego przewodu i cierpi na problem skosu czasowego przy wysokich częstotliwościach. Manchester ma 100% narzutu, ale jest niezwykle prosty w synchronizacji. Kodowanie 4B/5B i 8B/10B oferują 20% narzutu przy umiarkowanej złożoności, a 64B/66B redukuje narzut do około 3% kosztem znacznie bardziej złożonego skramblera.

W kontekście protokołów takich jak HDLC, SDLC i PPP, synchronizacja opiera się na flagach i bit stuffingu, co nie wymaga skomplikowanego kodowania liniowego, ale wprowadza zmienny narzut. DPLL w tych protokołach może działać z prostym kodowaniem NRZI, gdzie przejścia występują przy zerach, a bit stuffing wymusza przejścia przy długich sekwencjach jedynek. CRC stanowi uniwersalną metodę detekcji błędów niezależną od wybranej metody synchronizacji i kodowania.

31/47 Zalety i wady transmisji synchronicznej

Transmisja synchroniczna – plusy i minusy

Zalety:

  • Wysoka efektywność – brak bitów startu/stopu między bajtami; narzut wynika tylko z kodowania liniowego i nagłówków ramek
  • Duże prędkości transmisji – możliwe dzięki braku problemu narastającej desynchronizacji
  • Wykorzystanie pasma – wyższa przepustowość użyteczna przy tym samym bitrate

Wady:

  • Wymaga synchronizacji zegarów – nadajnik i odbiornik muszą być zsynchronizowane (osobny zegar lub kodowanie)
  • Bardziej złożona implementacja – potrzebne układy PLL do odtwarzania zegara, SERDES do serializacji/deserializacji
  • Wyższy koszt – bardziej skomplikowane układy scalone
Ilustracja: Waga zalet i wad transmisji synchronicznej

Transmisja synchroniczna dominuje w aplikacjach wymagających wysokiej przepustowości, takich jak sieci szkieletowe, pamięci masowe i szybkie interfejsy peryferyjne. Jej największą zaletą jest minimalny narzut – brak bitów start/stop między bajtami pozwala osiągnąć efektywność przekraczającą 99% dla dużych ramek. Protokoły takie jak HDLC z CRC i bit stuffingiem zapewniają niezawodność przy zachowaniu wysokiej wydajności.

Główną wadą transmisji synchronicznej jest złożoność implementacji – potrzebne są układy DPLL do odtworzenia zegara, SERDES do serializacji danych oraz zaawansowane kodowanie liniowe (8B/10B, 64B/66B) dla wyższych prędkości. W porównaniu z prostym UART, koszt układów synchronicznych jest znacząco wyższy. Dodatkowo utrzymanie synchronizacji w przerwach transmisji wymaga wysyłania flag lub znaków wypełnienia, co w aplikacjach o niskim współczynniku wykorzystania łącza może być nieefektywne.

32/47 Zalety i wady transmisji asynchronicznej

Transmisja asynchroniczna – plusy i minusy

Zalety:

  • Prosta implementacja – wystarczy prosty układ UART, bez potrzeby odtwarzania zegara
  • Tania – minimalna liczba linii sygnałowych (zazwyczaj 2: dane + masa)
  • Tolerancyjna na różnice zegarów – dopuszczalne odchyłki ±2–5% dzięki resynchronizacji przy każdym znaku

Wady:

  • Większy narzut – 2–3 bity narzutu na każdy znak (20–30% całkowitej transmisji)
  • Niższa prędkość efektywna – przy 8N1 efektywna przepustowość to tylko 8/10 = 80% bitrate'u
  • Ograniczona długość ramki – tylko do 9 bitów danych (5–8 + opcjonalna parzystość)
Ilustracja: Waga zalet i wad transmisji asynchronicznej

Transmisja asynchroniczna jest niezastąpiona w systemach wbudowanych i aplikacjach, gdzie priorytetem jest prostota i niski koszt implementacji. Układ UART jest integralną częścią praktycznie każdego mikrokontrolera, a do komunikacji wystarczą dwa przewody (sygnał danych i masa). Tolerancja na różnice częstotliwości zegarów do ±2–5% sprawia, że urządzenia mogą pracować z niedrogimi generatorami kwarcowymi bez potrzeby precyzyjnej synchronizacji.

Głównym ograniczeniem transmisji asynchronicznej jest niska efektywność przy dużych wolumenach danych – narzut 20–30% oznacza, że przy prędkości 115200 baud rzeczywista przepustowość danych wynosi około 92 kb/s dla 8N1. W przeciwieństwie do synchronicznych protokołów takich jak HDLC czy PPP, UART nie oferuje zaawansowanej detekcji błędów – bit parzystości jest słabym zamiennikiem CRC. Ponadto maksymalna prędkość transmisji asynchronicznej jest ograniczona do około 1–2 Mb/s ze względu na narastające problemy z synchronizacją.

33/47 Tabela porównawcza: synchroniczna vs asynchroniczna

Porównanie obu metod transmisji

ParametrSynchronicznaAsynchroniczna
Synchronizacjawspólny zegarbity startu/stopu
Narzut na znak0% (strumień)20–30%
Efektywność~80–100%~70–80%
Maks. prędkośćbardzo wysoka (Gb/s)ograniczona (Mb/s)
Złożonośćwysokaniska
Koszt implementacjiwyższyniski
Liczba linii2+ (dane + zegar)1 (dane + masa)
Tolerancja zegaraniska (PPM)wysoka (±2–5%)
Zastosowaniasieci, magistraleUART, mikrokontrolery
Ilustracja: Graf porównawczy – ikony synchronicznej i asynchronicznej z parametrami

Tabela porównawcza obu metod transmisji pokazuje fundamentalne różnice w podejściu do synchronizacji. Transmisja synchroniczna z protokołem HDLC wymaga wspólnego zegara (przesyłanego lub odtwarzanego) i osiąga efektywność bliską 100% przy przepływnościach rzędu Gb/s. Asynchroniczna z UART działa z niezależnymi zegarami, ale jej maksymalna prędkość jest praktycznie ograniczona do kilku Mb/s ze względu na narzut bitów start/stop i ograniczoną tolerancję zegarów.

W kontekście CRC i detekcji błędów, transmisja synchroniczna ma znaczącą przewagę – CRC-16 w HDLC lub CRC-32 w Ethernet wykrywają praktycznie wszystkie błędy w ramce. W transmisji asynchronicznej bit parzystości wykrywa tylko nieparzystą liczbę błędów w pojedynczym znaku. Metody kodowania takie jak Manchester, NRZI czy 8B/10B są stosowane wyłącznie w transmisji synchronicznej, ponieważ asynchroniczna nie wymaga odtwarzania zegara ze strumienia danych – synchronizacja odbywa się od nowa przy każdym bicie startu.

34/47 SDH/SONET

Synchroniczna hierarchia cyfrowa

SDH (Synchronous Digital Hierarchy) / SONET (Synchronous Optical Network) – standardy synchronicznej transmisji danych w światłowodowych sieciach szkieletowych. Podstawa infrastruktury telekomunikacyjnej na całym świecie.

Kluczowe cechy:

  • Wszystkie węzły sieci są zsynchronizowane do wspólnego zegara (cesium/atomic clock, GPS)
  • Dane przesyłane w ramkach STM-N (SDH) lub OC-N (SONET) o okresie 125 µs
  • Prędkości: od 155,52 Mb/s (STM-1) do 40 Gb/s (STM-256) i więcej
  • Mechanizmy ochrony: automatyczne przełączanie na ścieżkę zapasową (APS) w czasie <50 ms
Ilustracja: Struktura ramki SDH STM-1 – nagłówek SOH, wskaźnik AU, payload

SDH/SONET to przykład sieci synchronicznej, gdzie precyzyjna synchronizacja zegarów we wszystkich węzłach jest kluczowa dla poprawnego działania. Wszystkie węzły sieci SDH są zsynchronizowane do wspólnego zegara referencyjnego (np. atomowego lub GPS), co pozwala na bezkonfliktowe łączenie strumieni danych z różnych źródeł. Ramka STM-1 o okresie 125 µs zawiera wskaźniki (AU pointers), które umożliwiają niewielkie przesunięcia fazowe między węzłami bez utraty synchronizacji.

SDH stosuje kodowanie NRZ ze skramblerem, który zapewnia odpowiednią gęstość zboczy do odtworzenia zegara przez DPLL w odbiorniku. W przeciwieństwie do HDLC, SDH nie używa flag ani bit stuffingu – granice ramek są wyznaczane przez precyzyjny zegar i wskaźniki. BIP (Bit Interleaved Parity) w SDH (BIP-8, BIP-24) służy do monitorowania jakości transmisji na poszczególnych odcinkach łącza, co umożliwia szybkie wykrywanie degradacji i przełączanie na ścieżki zapasowe. PPP jest często używany do enkapsulacji pakietów IP w ramach SDH.

35/47 Ethernet

Ethernet – synchroniczna transmisja ramek

Ethernet – rodzina standardów sieciowych opartych na transmisji synchronicznej. Ramka Ethernet zawiera preambułę (7 bajtów synchronizacji), SFD (Start Frame Delimiter), nagłówek, dane i FCS.

Ethernet wykorzystuje różne metody kodowania w zależności od prędkości:

  • 10BASE-T (10 Mb/s) – kodowanie Manchester
  • 100BASE-TX (100 Mb/s) – kodowanie 4B/5B
  • 1000BASE-T (1 Gb/s) – kodowanie 4D-PAM5 (5 poziomów)
  • 10GBASE-T (10 Gb/s) – kodowanie 64B/66B + DSQ128

We wszystkich wariantach zegar jest odtwarzany ze strumienia danych za pomocą PLL.

Ilustracja: Budowa ramki Ethernet – preambuła, SFD, nagłówek, dane, FCS

Ethernet jest najszerzej stosowanym standardem transmisji synchronicznej w sieciach lokalnych, wykorzystującym preambułę (7 bajtów 10101010) do synchronizacji DPLL przed odebraniem ramki. Po preambule następuje SFD (Start Frame Delimiter – 10101011), który oznacza początek właściwej ramki, a całość kończy pole FCS (Frame Check Sequence) z 32-bitowym CRC. W przeciwieństwie do HDLC, Ethernet nie używa flag ani bit stuffingu – granice ramek są wyznaczane przez odstępy międzyramkowe i preambułę.

W zależności od prędkości, Ethernet stosuje różne metody kodowania: Manchester dla 10BASE-T, 4B/5B z MLT-3 dla 100BASE-TX, 4D-PAM5 dla 1000BASE-T oraz 64B/66B dla 10GBASE-T. We wszystkich przypadkach DPLL w odbiorniku odtwarza zegar z sygnału danych, co wymaga odpowiedniej gęstości zboczy. W przeciwieństwie do PPP, Ethernet nie negocjuje parametrów połączenia na poziomie fizycznym – autonegocjacja dotyczy tylko prędkości i dupleksu, a nie protokołów warstwy wyższej.

36/47 SPI i I²C

Synchroniczne interfejsy w systemach wbudowanych

SPI (Serial Peripheral Interface) – synchroniczny interfejs szeregowy full-duplex. Wykorzystuje 4 linie: SCLK (zegar), MOSI, MISO, SS (slave select). Master generuje zegar, slave działa synchronicznie.

I²C (Inter-Integrated Circuit) – synchroniczna magistrala dwuprzewodowa: SCL (zegar) i SDA (dane). Umożliwia podłączenie wielu urządzeń na jednej magistrali z adresowaniem 7- lub 10-bitowym.

Porównanie:

  • SPI: szybszy (do 80 MHz), więcej linii, full-duplex
  • I²C: wolniejszy (do 5 MHz), tylko 2 linie, half-duplex, adresowanie
Ilustracja: Schemat połączeń SPI (3+1 linii) i I²C (2 linie)

SPI i I²C to synchroniczne interfejsy wewnątrzsystemowe, które różnią się znacząco pod względem złożoności, szybkości i liczby wymaganych linii sygnałowych. SPI (Serial Peripheral Interface) jest szybszy (do 80 MHz) i prostszy w implementacji, ale wymaga oddzielnej linii SS (Slave Select) dla każdego urządzenia. I²C (Inter-Integrated Circuit) jest wolniejszy (do 5 MHz), ale potrzebuje tylko dwóch linii (SCL i SDA) dla całej magistrali obsługującej wiele urządzeń z adresowaniem 7- lub 10-bitowym.

W przeciwieństwie do HDLC czy PPP, SPI i I²C nie stosują CRC, flag ani bit stuffingu – detekcja błędów jest minimalna lub nie występuje w ogóle. NRZ jest naturalnym wyborem dla tych interfejsów, ponieważ DPLL nie jest potrzebna – zegar jest przesyłany osobną linią. I²C wykorzystuje arbitraż na poziomie bitów do rozstrzygania kolizji między nadajnikami, co jest unikalną cechą wśród synchronicznych interfejsów. W porównaniu z UART (asynchronicznym), oba interfejsy wymagają większej liczby linii, ale oferują wyższe prędkości i pełną synchronizację.

37/47 USB – Universal Serial Bus

USB – synchroniczna transmisja szeregowa

USB (Universal Serial Bus) – synchroniczna magistrala szeregowa do podłączania urządzeń peryferyjnych. Wykorzystuje kodowanie NRZI (Non-Return-to-Zero Inverted) z bit stuffingiem.

Kluczowe aspekty synchronizacji w USB:

  • NRZI – 0 oznacza zmianę stanu linii, 1 oznacza brak zmiany. Zapewnia przejścia przy zerach
  • Bit stuffing – po 6 kolejnych jedynkach nadawca wstawia 0, aby wymusić przejście i umożliwić odtworzenie zegara
  • SOP (Start of Packet) – sekwencja synchronizująca na początku każdego pakietu
  • Szybkości: Low Speed 1,5 Mb/s, Full Speed 12 Mb/s, High Speed 480 Mb/s, SuperSpeed 5/10/20 Gb/s
Ilustracja: Kodowanie NRZI z bit stuffingiem – przykład strumienia USB

USB (Universal Serial Bus) jest przykładem synchronicznej magistrali szeregowej wykorzystującej kodowanie NRZI (Non-Return-to-Zero Inverted), w którym logiczne zero powoduje zmianę stanu linii, a logiczna jedynka pozostawia stan bez zmian. Aby zapewnić wystarczającą liczbę przejść do odtworzenia zegara przez DPLL, USB stosuje bit stuffing – po sześciu kolejnych jedynkach nadajnik wstawia zero, co wymusza zmianę stanu. Każdy pakiet USB rozpoczyna się sekwencją SOP (Start of Packet) synchronizującą DPLL.

W przeciwieństwie do HDLC, gdzie flagi i bit stuffing dotyczą całej ramki, w USB stuffing jest stosowany na poziomie strumienia bitów między SOP a EOP (End of Packet). CRC w USB jest obliczany dla pól pakietów – tokeny używają CRC-5, a dane CRC-16. W porównaniu z asynchronicznym UART, USB oferuje znacznie wyższe prędkości (do 20 Gb/s w USB 3.2), ale wymaga bardziej złożonych układów nadawczo-odbiorczych z DPLL i kodowaniem NRZI.

38/47 UART – Universal Asynchronous Receiver-Transmitter

UART – podstawowy interfejs asynchroniczny

UART (Universal Asynchronous Receiver-Transmitter) – układ scalony realizujący transmisję asynchroniczną. Przetwarza dane równoległe (bajty) na szeregowy strumień bitów i odwrotnie.

Główne parametry konfiguracji UART:

  • Baud rate – prędkość transmisji (typowe: 9600, 19200, 115200, 921600 baud)
  • Data bits – liczba bitów danych (5–8)
  • Parity – typ parzystości (none, even, odd, mark, space)
  • Stop bits – liczba bitów stopu (1, 1.5, 2)

UART jest integralną częścią większości mikrokontrolerów (AVR, STM32, ESP32, PIC) i komputerów (wbudowany w chipset lub przez USB-UART).

Ilustracja: Schemat blokowy UART – rejestry, przesuwanie bitów, nadawanie/odbiór

UART (Universal Asynchronous Receiver-Transmitter) jest najpowszechniej stosowanym układem transmisji asynchronicznej, wbudowanym w większość mikrokontrolerów i procesorów. Jego działanie opiera się na rejestrze przesuwnym, który szeregowo wysyła lub odbiera bity z ustaloną prędkością (baud rate). W przeciwieństwie do synchronicznych układów z DPLL, UART używa prostego dzielnika częstotliwości do generowania zegara próbkującego z oversamplingiem (najczęściej 16×).

Konfiguracja UART (baud rate, liczba bitów danych, parzystość, bity stopu) musi być identyczna po obu stronach łącza – w przeciwieństwie do PPP, który negocjuje parametry połączenia automatycznie. UART nie ma mechanizmu CRC – jedyną ochroną jest opcjonalny bit parzystości, który wykrywa tylko nieparzystą liczbę błędów. W porównaniu z HDLC czy PPP, UART jest znacznie prostszy, ale nie nadaje się do transmisji o wysokich wymaganiach co do niezawodności i przepustowości.

39/47 RS-232

RS-232 – standard komunikacji szeregowej

RS-232 – standard transmisji szeregowej asynchronicznej (1962). Określa charakterystykę elektryczną, sygnały sterujące i złącze. Powszechnie stosowany w sprzęcie komputerowym i sterowniczym.

Charakterystyka:

  • Poziomy napięć: logiczne 1 (mark) = -3 do -15 V, logiczne 0 (spacja) = +3 do +15 V
  • Sygnały sterujące: RTS (Request to Send), CTS (Clear to Send), DTR (Data Terminal Ready), DSR (Data Set Ready), DCD (Data Carrier Detect), RI (Ring Indicator)
  • Złącze: DB-9 (9 pinów) lub DB-25 (25 pinów)
  • Maks. długość kabla: ~15 m (przy 9600 baud)
  • Maks. prędkość: ~115200 baud (standardowo), do 921600 baud (w praktyce)
Ilustracja: Złącze DB-9 (RS-232) z opisem pinów

RS-232 jest standardem transmisji szeregowej asynchronicznej, który definiuje nie tylko format ramki, ale także poziomy napięć (±3–15 V), sygnały sterujące oraz złącze. W odróżnieniu od TTL UART (0–5 V), RS-232 stosuje wyższe napięcia dla zwiększenia odporności na zakłócenia na dłuższych dystansach (do 15 m przy 9600 baud). Sygnały sterujące RTS/CTS umożliwiają kontrolę przepływu sprzętowego, co zapobiega przepełnieniu buforów odbiornika.

W przeciwieństwie do synchronicznych standardów jak Ethernet czy HDLC, RS-232 nie ma mechanizmu CRC ani potwierdzeń na poziomie fizycznym – kontrola błędów musi być realizowana w wyższych warstwach protokołu. RS-232 używa kodowania NRZ z poziomami napięć, gdzie mark (1) to napięcie ujemne, a spacja (0) to napięcie dodatnie. Mimo że nowsze interfejsy (USB, Ethernet) wyparły RS-232 z komputerów osobistych, standard ten jest nadal powszechnie stosowany w przemyśle, sterownikach PLC i systemach laboratoryjnych.

40/47 GPS NMEA 0183

Protokół NMEA 0183 w odbiornikach GPS

NMEA 0183 – standard transmisji danych nawigacyjnych opracowany przez National Marine Electronics Association. Wykorzystuje asynchroniczną transmisję szeregową UART.

Parametry transmisji NMEA 0183:

  • Baud rate: 4800 baud (standard), 38400 baud (rozszerzony)
  • Konfiguracja: 8N1 (8 bitów, No parity, 1 bit stopu)
  • Format danych: ASCII, zdania zaczynające się od $, np. $GPGGA, $GPRMC, $GPGSA
  • Separator: przecinek (CSV-like)
  • Suma kontrolna: XOR wszystkich znaków między $ a * (opcjonalna)

Przykład zdania: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Ilustracja: Odbiornik GPS – dane NMEA przesyłane przez UART do procesora

Protokół NMEA 0183 wykorzystuje asynchroniczną transmisję UART do przesyłania danych nawigacyjnych z odbiorników GPS do procesorów i wyświetlaczy. Dane są przesyłane w formacie tekstowym ASCII z prędkością 4800 baud i konfiguracją 8N1, co zapewnia kompatybilność z szeroką gamą urządzeń. Każde zdanie NMEA zaczyna się od znaku $ i zawiera sumę kontrolną XOR (opcjonalną) obliczaną ze znaków między $ a *, co jest znacznie prostsze niż CRC w HDLC.

W porównaniu z synchronicznymi protokołami takimi jak PPP czy HDLC, NMEA jest niezwykle prosty i nie wymaga negocjacji parametrów połączenia. Nie stosuje się tu bit stuffingu, flag ani zaawansowanego kodowania – surowe NRZ z UART w zupełności wystarcza. CRC-16 stosowany w HDLC i PPP jest znacznie skuteczniejszy niż suma kontrolna XOR w NMEA, ale dla aplikacji nawigacyjnych prostota i niski narzut są ważniejsze niż absolutna niezawodność transmisji.

41/47 MIDI – Musical Instrument Digital Interface

MIDI – cyfrowy interfejs instrumentów muzycznych

MIDI (Musical Instrument Digital Interface) – protokół komunikacyjny do przesyłania informacji muzycznych między instrumentami elektronicznymi, komputerami i sterownikami. Wykorzystuje asynchroniczną transmisję szeregową.

Parametry transmisji MIDI:

  • Baud rate: 31,25 kbaud (specyficzna wartość wynikająca z dzielnika zegara 1 MHz / 32)
  • Konfiguracja: 8N1 (8 bitów, No parity, 1 bit stopu)
  • Złącze: 5-pinowe DIN (optoizolowane wejście)
  • Maks. długość kabla: ~15 m

Każdy komunikat MIDI to 1–3 bajty. Pierwszy bajt (status) określa typ komunikatu (Note On, Note Off, Control Change itp.) i kanał MIDI (1–16).

Ilustracja: Złącze MIDI DIN-5 i przykład komunikatu Note On

MIDI (Musical Instrument Digital Interface) wykorzystuje asynchroniczną transmisję szeregową z unikalną prędkością 31,25 kbaud wynikającą z dzielnika zegara 1 MHz / 32. Każdy komunikat MIDI składa się z 1–3 bajtów w konfiguracji 8N1, gdzie pierwszy bajt (status) określa typ zdarzenia (Note On, Note Off, Control Change) i kanał MIDI, a kolejne bajty niosą parametry. W przeciwieństwie do HDLC, MIDI nie ma flag, bit stuffingu ani CRC – kontrola przepływu odbywa się na poziomie protokołu.

W porównaniu z synchronicznymi standardami, MIDI jest wyjątkowo prosty i niezawodny w swoim zastosowaniu. Nie stosuje się tu kodowania Manchester ani NRZI – UART z NRZ w zupełności wystarcza dla tej prędkości. DPLL nie jest potrzebna, ponieważ UART z oversamplingiem 16× przy 31,25 kbaud wymaga zegara zaledwie 500 kHz. W przeciwieństwie do PPP czy HDLC, które mogą przenosić dowolne dane binarne, MIDI przesyła tylko małe komunikaty sterujące i nie wymaga zaawansowanego CRC.

42/47 Przykład – transmisja znaku 'A'

Transmisja znaku 'A' (ASCII 0x41) w trybie asynchronicznym

Ramka dla znaku 'A' (0x41): bit startu (0) + 8 bitów danych LSB first (10000010) + bit parzystości even (0) + bit stopu (1) = 11 bitów.

Szczegółowy przebieg:

  • Stan spoczynku: linia = 1 (mark)
  • Bit startu: 0 (linia przechodzi z 1 na 0)
  • Dane LSB first: 1 0 0 0 0 0 1 0 = 0x41 (A)
  • Parzystość even: liczba jedynek w danych = 2 (parzysta), więc bit parzystości = 0
  • Bit stopu: 1 (linia wraca do stanu spoczynku)

Przy prędkości 9600 baud: 9600 / 11 ≈ 873 znaki/s. Przy 115200 baud: ~10 473 znaki/s.

Ilustracja: Przebieg czasowy ramki dla znaku 'A' – 11 bitów

Przykład transmisji znaku 'A' (ASCII 0x41) w trybie asynchronicznym 8E1 ilustruje pełną strukturę ramki: bit startu (0), 8 bitów danych LSB first (10000010), bit parzystości even (0) i bit stopu (1). Łącznie 11 bitów na linii, z czego tylko 8 to dane użyteczne – efektywność wynosi 8/11 ≈ 72,7%. W transmisji synchronicznej ten sam znak byłby przesłany jako część większej ramki HDLC lub PPP, gdzie narzut na flagi i CRC jest rozłożony na wiele bajtów.

Gdyby przesyłać pojedyncze znaki 'A' w trybie synchronicznym z HDLC, każda ramka zawierałaby flagę otwarcia (8 bitów), adres (8), sterowanie (8), dane (8), CRC-16 (16) i flagę zamknięcia (8) – łącznie 56 bitów na 8 bitów danych, czyli efektywność zaledwie 14,3%. Dlatego transmisja synchroniczna opłaca się tylko dla większych bloków danych. Bit stuffing w HDLC mógłby dodatkowo zwiększyć rozmiar ramki, gdyby w danych wystąpiła sekwencja pięciu jedynek.

43/47 Porównanie efektywności – 1 MB danych

Porównanie efektywności synchronicznej vs asynchronicznej

Dane: 1 MB (1 048 576 bajtów). Asynchroniczna (8N1): 10 bitów/bajt. Synchroniczna: 8 bitów/bajt + narzut ramki.

Transmisja asynchroniczna (8N1):

  • 1 048 576 bajtów × 10 bitów = 10 485 760 bitów
  • w tym dane użyteczne: 8 388 608 bitów
  • Narzut: 2 097 152 bity (20%)

Transmisja synchroniczna (ramka 1500 B):

  • 1 048 576 bajtów × 8 bitów = 8 388 608 bitów
  • Narzut ramek: ~200 bitów
  • Razem: ~8 388 808 bitów

Efektywność: synchroniczna ≈ 99,998%, asynchroniczna ≈ 80%.

Ilustracja: Wykres słupkowy – liczba bitów: synchroniczna vs asynchroniczna dla 1 MB

Porównanie efektywności dla 1 MB danych pokazuje dramatyczną różnicę między obiema metodami. Przy transmisji asynchronicznej 8N1 potrzeba 10 485 760 bitów (1MB × 10 bitów/bajt), podczas gdy synchroniczna z ramkami 1500 bajtów wymaga około 8 388 808 bitów (dane + narzut ~200 bitów na ramkę). Oznacza to, że transmisja synchroniczna jest o około 20% szybsza przy tej samej przepływności bitowej – różnica ta rośnie z rozmiarem przesyłanych danych.

CRC w transmisji synchronicznej (CRC-32 w Ethernet lub CRC-16 w HDLC) dodaje znikomy narzut w porównaniu z bitami start/stop w asynchronicznej. Dla ramki 1500 bajtów narzut CRC-32 to tylko 32 bity na 12 000 bitów danych (0,27%). Bit stuffing w HDLC i PPP może dodać średnio 1 bit na każde 32 bity danych (około 3,1%), co przy 1 MB danych daje około 260 000 dodatkowych bitów, ale nadal pozostawia transmisję synchroniczną znacznie bardziej efektywną niż asynchroniczną.

44/47 UART z Arduino

Zastosowanie UART w komunikacji z Arduino

Arduino Uno (ATmega328P) – komunikacja z komputerem przez UART na pinach TX (1) i RX (0). Domyślna konfiguracja: 9600 baud, 8N1.

Mikrokontroler ATmega328P wysyła dane z czujnika temperatury przez UART do komputera. Odbiorca (terminal) musi mieć tę samą konfigurację, aby poprawnie odebrać dane.

Przykład kodu Arduino:

  • Serial.begin(9600); – inicjalizacja UART z prędkością 9600 baud
  • Serial.print(temperature); – wysłanie wartości temperatury jako tekst ASCII
  • Serial.println("°C"); – wysłanie jednostki z nową linią

Błędy transmisji: Jeśli prędkości nadawcy i odbiorcy są niezgodne, na ekranie pojawiają się "śmieci" (garbage) – znaki niezgodne z oczekiwanymi.

Ilustracja: Arduino Uno – piny TX/RX i komunikacja z komputerem przez UART

Arduino Uno z mikrokontrolerem ATmega328P jest klasycznym przykładem zastosowania transmisji asynchronicznej UART w systemach wbudowanych. Komunikacja z komputerem odbywa się przez wbudowany UART na pinach TX (1) i RX (0) z domyślną konfiguracją 9600 8N1. W przeciwieństwie do synchronicznych interfejsów takich jak SPI czy I²C, UART wymaga tylko dwóch przewodów (dane + masa), co jest wygodne w prototypowaniu.

Różne prędkości transmisji UART (9600, 19200, 115200 baud) są realizowane przez dzielniki częstotliwości zegara mikrokontrolera, co może prowadzić do błędów kwantyzacji. W porównaniu z HDLC czy PPP, Arduino UART nie oferuje CRC ani potwierdzeń – jeśli potrzebna jest niezawodna transmisja, implementuje się ją programowo w wyższej warstwie. Bit stuffing i flagi typowe dla transmisji synchronicznej nie są tu stosowane, a synchronizacja opiera się wyłącznie na oversamplingu i detekcji bitu startu.

45/47 Podsumowanie

Najważniejsze wnioski

  • Transmisja synchroniczna – wydajniejsza (mniejszy narzut), osiąga wyższe prędkości, ale jest bardziej złożona i wymaga synchronizacji zegarów. Dominuje w nowoczesnych sieciach (Ethernet, SDH, PCIe)
  • Transmisja asynchroniczna – prostsza w implementacji, tańsza, tolerancyjna na różnice zegarów, ale mniej efektywna (20–30% narzutu). Króluje w systemach wbudowanych (UART, RS-232)
  • Wybór metody zależy od wymagań aplikacji: priorytetem może być szybkość (synchroniczna) lub prostota i koszt (asynchroniczna)
  • UART – mimo swojej prostoty pozostaje kluczowym interfejsem w systemach wbudowanych i aplikacjach IoT
Ilustracja: Mapa myśli podsumowująca najważniejsze różnice

Podsumowując, wybór między transmisją synchroniczną a asynchroniczną zależy od konkretnych wymagań aplikacji. Transmisja synchroniczna z protokołami HDLC, SDLC, PPP i Ethernet oferuje wysoką efektywność i duże prędkości kosztem złożoności implementacji wymagającej DPLL, odpowiedniego kodowania (Manchester, NRZI, 8B/10B) i CRC. Asynchroniczna transmisja UART jest prosta i tania, ale jej efektywność spada do 70–80%, a maksymalna prędkość jest ograniczona.

CRC (Cyclic Redundancy Check) jest kluczowym mechanizmem detekcji błędów w transmisji synchronicznej, znacznie skuteczniejszym niż bit parzystości w asynchronicznej. Bit stuffing w HDLC i PPP zapewnia przezroczystość danych i pomaga w synchronizacji DPLL, zapobiegając pojawieniu się flagi w strumieniu. Kodowanie Manchester i NRZI z bit stuffingiem umożliwiają odtworzenie zegara bez dodatkowej linii, co jest fundamentalne dla nowoczesnych sieci synchronicznych.

46/47 Dziękuję za uwagę
Zachęcam do zapoznania się z pozostałymi prezentacjami – w menu dostępne są kolejne moduły dotyczące błędów transmisji, interfejsu RS-232 oraz innych zagadnień sieci rozległych.

Literatura uzupełniająca:

  • W. Stallings, "Data and Computer Communications", Pearson, 10th ed., 2014
  • A. S. Tanenbaum, "Computer Networks", Pearson, 5th ed., 2011 (tłum. polskie: "Sieci komputerowe", Helion)
  • J. Kołakowski, J. Cichocki, "Systemy telekomunikacyjne", Wydawnictwa Komunikacji i Łączności, Warszawa
  • ITU-T G.703 — charakterystyki fizyczne i elektryczne interfejsów cyfrowych
  • ISO/IEC 13239 — protokół HDLC (High-Level Data Link Control)

„Zegar jest sercem transmisji synchronicznej – bez niego dane gubią się w czasie.”

Ilustracja: Logo uczelni lub grafika tematyczna – sieci telekomunikacyjne

Przedstawiony materiał stanowi wprowadzenie do tematyki transmisji synchronicznej i asynchronicznej, która jest fundamentem współczesnej telekomunikacji. Zrozumienie różnic między tymi metodami, roli sygnału zegara, DPLL oraz kodowania liniowego (NRZ, NRZI, Manchester) jest niezbędne dla każdego inżyniera sieci i systemów wbudowanych. Protokoły HDLC, SDLC i PPP wykorzystujące transmisję synchroniczną z bit stuffingiem i CRC stanowią podstawę wielu rozwiniętych standardów komunikacyjnych.

Szczególnie istotne jest zrozumienie mechanizmu CRC, który mimo niewielkiego narzutu (2–4 bajty na ramkę) zapewnia praktycznie całkowitą detekcję błędów transmisji. W porównaniu z prostym bitem parzystości transmisji asynchronicznej, CRC oferuje znacznie wyższy poziom ochrony danych. Preambuła i flagi w ramkach synchronicznych pełnią kluczową rolę w synchronizacji DPLL, a bit stuffing gwarantuje, że sekwencje specjalne nie pojawią się w przesyłanych danych, co zapewnia integralność transmisji.

47/47 Pytania do dyskusji

Pytania sprawdzające zrozumienie tematu

  1. Jaka jest podstawowa różnica między transmisją synchroniczną a asynchroniczną?
  2. Ile bitów narzutu przypada na każdy znak w transmisji asynchronicznej? Od czego to zależy?
  3. Jak działa oversampling w odbiorniku UART? Dlaczego stosuje się próbkowanie 16×?
  4. Wymień trzy metody synchronizacji stosowane w transmisji synchronicznej.
  5. Oblicz efektywność transmisji asynchronicznej przy konfiguracji 8E1.
  6. Która metoda transmisji jest bardziej odporna na różnice częstotliwości zegarów? Dlaczego?
  7. Jakie są zalety kodowania 8B/10B w porównaniu z kodowaniem Manchester?
Ilustracja: Ikona dyskusji – znak zapytania i myślnik

Pytania do dyskusji mają na celu sprawdzenie zrozumienia kluczowych koncepcji związanych z transmisją synchroniczną i asynchroniczną. Warto zastanowić się, dlaczego transmisja synchroniczna z protokołem HDLC jest bardziej efektywna od asynchronicznej z UART przy przesyłaniu dużych plików, ale traci tę przewagę przy pojedynczych znakach. Rola CRC jako mechanizmu detekcji błędów jest często niedoceniana – bez niego nowoczesne sieci o wysokich prędkościach nie mogłyby funkcjonować niezawodnie.

Analizując kodowanie Manchester, NRZ i NRZI, warto zrozumieć, dlaczego to pierwsze jest stosowane tylko w wolniejszych standardach (10BASE-T), podczas gdy szybsze sieci wybierają 4B/5B czy 8B/10B. Bit stuffing w HDLC i PPP jest eleganckim rozwiązaniem problemu przezroczystości danych, ale wprowadza zmienny narzut, co w aplikacjach czasu rzeczywistego może być wyzwaniem. DPLL w transmisji synchronicznej jest kluczowym układem umożliwiającym odtworzenie zegara – bez niego niemożliwe byłoby osiągnięcie prędkości rzędu Gb/s charakterystycznych dla dzisiejszych sieci.