ElectroDesignForgeElectroDesignForge
Sygnały i interfejsyPodstawy

UART: ramki, szybkość transmisji i poziomy elektryczne

Poznaj asynchroniczną transmisję UART: bity startu i stopu, kolejność danych, parzystość, szybkość transmisji, tolerancję zegara, błędy oraz zgodność poziomów TTL, CMOS, RS-232 i RS-485.

Opracowanie i przegląd techniczny:ElectroDesignForge Engineering Team

Zobacz proces redakcyjny

Najważniejsze: UART przesyła bity bez wspólnego sygnału zegarowego. Odbiornik synchronizuje się ponownie na każdym bicie startu, a następnie próbkuje dane w obliczonych chwilach. Oba końce muszą stosować ten sam format ramki, wystarczająco zbliżoną szybkość transmisji i rzeczywiście zgodne poziomy elektryczne.


UART określa format ramki, a nie interfejs elektryczny

UART (Universal Asynchronous Receiver/Transmitter) zamienia bajt na bity wysyłane linią TX i odtwarza odebrane bajty z linii RX. Pracuje asynchronicznie: w odróżnieniu od SPI nie ma osobnego przewodu zegarowego.

WarstwaCo określaPrzykłady
Ramka UARTstan spoczynkowy, start, dane, parzystość, stop, kolejność bitów, szybkość8N1 przy 115200 bodach
Połączenie elektrycznenapięcie, polaryzację, odniesienie, prąd, kabelCMOS 3.3 V, logika 5 V, RS-232, RS-485

Dwie płytki mogą obie „używać UART”, a mimo to nie nadawać się do bezpośredniego połączenia: GPIO 3.3 V nie jest wyjściem RS-232. W typowej konwencji logicznej stan spoczynkowy to poziom wysoki (mark), ramka zaczyna się poziomem niskim i kończy wysokim.

Budowa ramki

Typowy zapis to bity danych + parzystość + bity stopu. 8N1 oznacza osiem bitów danych, brak bitu parzystości i jeden bit stopu.

Idle        Start   D0 D1 D2 D3 D4 D5 D6 D7   Parity   Stop   Idle
  1     |     0   |  b0 b1 b2 b3 b4 b5 b6 b7 |   P    |  1  |  1
             <------------- one bit time Tb = 1 / baud ------------->

Bity startu, danych, parzystości i stopu

Bit startu ma poziom niski przez jeden czas bitu. Po zboczu opadającym odbiornik czeka mniej więcej pół czasu bitu, aby potwierdzić start, po czym próbkuje blisko środka każdego przedziału bitowego. Współczesne układy UART często nadpróbkowują ×8 lub ×16; dokładne reguły potwierdzania i tolerancje sprawdź w dokumentacji peryferium.

Dane zwykle wysyła się od najmłodszego bitu (LSB). Liczba szesnastkowa 0x53, tradycyjnie zapisywana jako 0101 0011, jest wysyłana w kolejności 1 1 0 0 1 0 1 0 dla D0 do D7. Łatwo pomylić tę kolejność przy odczycie oscyloskopu. Sprzęt może obsługiwać od 5 do 9 bitów danych; oba końce muszą mieć to samo ustawienie.

Ustawienie parzystościReguła dla danych i bitu parzystościOgraniczenie
Nbrak dodatkowego bitubrak wykrywania błędów
Ełączna liczba bitów 1 jest parzystanie wykrywa parzystej liczby zmienionych bitów
Ołączna liczba bitów 1 jest nieparzystata sama zdolność wykrywania, odwrotna konwencja
mark / spacewymuszone 1 / wymuszone 0rzadkie tryby zależne od sprzętu

Parzystość wykrywa część przekłamań, lecz nie pozwala ich zlokalizować ani naprawić. Integralność wiadomości wymaga warstwy nad UART z sumą kontrolną lub CRC, numerem sekwencyjnym i mechanizmem ponawiania. Bity stopu mają poziom wysoki; poziom niski w chwili oczekiwanego bitu stopu zwykle powoduje błąd ramkowania.

Szybkość w bodach i błąd zegara

Bod to liczba symboli na sekundę. Binarny UART zwykle przenosi jeden bit na symbol, więc 9600 bodów zazwyczaj oznacza 9600 bit/s. Czas bitu wynosi Tb = 1 / baud.

SzybkośćTbCzas ramki 8N1
9,600 bodów104.17 µs1.042 ms
57,600 bodów17.36 µs173.6 µs
115,200 bodów8.681 µs86.81 µs
1,000,000 bodów1.000 µs10.00 µs

Ramka 8N1 zajmuje dziesięć czasów bitu, więc maksymalna szybkość danych użytecznych wynosi baud × 8 / 10: ciągła transmisja przy 115200 bodach przenosi najwyżej 11,520 bajtów/s przed uwzględnieniem narzutu protokołu.

Nadajnik i odbiornik mają niezależne zegary. Przesunięcie chwili próbkowania narasta w trakcie ramki: skumulowany błąd czasu ≈ liczba przedziałów bitowych × łączny względny błąd częstotliwości. Utrzymuj go wyraźnie poniżej połowy czasu bitu, pozostawiając zapas na jitter, kwantyzację dzielnika, zakłócenia i wolne zbocza. Często przyjmuje się orientacyjny cel poniżej około 2% łącznego błędu względnego, ale nie jest to uniwersalny limit: rzeczywista tolerancja zależy od długości ramki, nadpróbkowania i konstrukcji odbiornika. Dwa oscylatory ±1% mogą w najgorszym przypadku różnić się o 2%. Sprawdź też błąd dzielnika szybkości transmisji; zegar systemowy nie zawsze generuje dokładnie 115200 bodów.

CMOS, TTL, RS-232 i RS-485

„TTL” i „CMOS” to skróty myślowe: zawsze sprawdzaj rzeczywiste progi wejściowe i bezwzględne wartości maksymalne danego układu.

InterfejsStan spoczynkowy UARTTypowe napięciaBezpośrednio do UART 3.3 V?
CMOS 3.3 Vwysokiokoło 0 / 3.3 Vtak, jeśli progi są zgodne
Logika 5 Vwysokiokoło 0 / 5 Vtylko do wejścia odpornego na 5 V
RS-232ujemny (mark)zwykle −5 do −12 V / +5 do +12 Vnie, użyj transceivera RS-232
RS-485różnicowypara A/Bnie, użyj transceivera RS-485

Przy krótkim połączeniu na poziomach logicznych połącz TX_A z RX_B, TX_B z RX_A i zapewnij wspólne odniesienie masy. Wyjście 5 V może uszkodzić wejście 3.3 V nieodporne na takie napięcie, nawet jeśli połączenie początkowo działa.

RS-232 wykorzystuje zarówno inne amplitudy, jak i odwróconą polaryzację: spoczynkowa logiczna 1 ma zwykle napięcie ujemne, a startowe 0 — dodatnie. Transceiver typu MAX232 zmienia poziomy i odwraca sygnał. RS-485 to różnicowa warstwa fizyczna, a nie „mocniejszy UART”: UART nadaje na DI i odbiera z RO, a transceiver steruje parą A/B. Sterowanie włączeniem (DE), terminacja, polaryzacja spoczynkowa, topologia kabla i unikanie kolizji w trybie półdupleksowym należą do projektu.

Błędy i uruchamianie

WskazanieTypowe znaczenieCzęste przyczyny
Błąd parzystościodebrany bit parzystości jest niepoprawnyzakłócenia, złe ustawienie, graniczne parametry czasowe
Błąd ramkowanianiepoprawny bit stopuniewłaściwa szybkość, odwrócenie polaryzacji, sygnał break
Przepełnienie odbiornikanowy bajt nadszedł, zanim obsłużono poprzednizablokowane przerwanie, brak DMA, zbyt mały bufor
Sygnał breaklinia pozostaje niska dłużej niż ramkacelowy break, zwarcie, zatrzymane urządzenie
  1. Zapisz pełną konfigurację, na przykład 115200, 8N1, LSB jako pierwszy, bez kontroli przepływu, CMOS 3.3 V.
  2. Sprawdź połączenie TX ↔ RX, wspólną masę oraz zasilanie transceivera i DE.
  3. Zmierz czas jednego bitu: przy 115200 bodach wynosi około 8.68 µs.
  4. Wyślij 0x55, a następnie 0x00 i 0xFF jako wzorce diagnostyczne.
  5. Zlicz flagi błędów parzystości, ramkowania i przepełnienia; sam nieczytelny tekst nie pozwala wskazać przyczyny.

Częste pułapki

  • Uznanie 115200 bodów za 115200 bajtów/s: 8N1 pozwala najwyżej na 11,520 bajtów/s.
  • Dwukrotne skrzyżowanie TX/RX albo pominięcie wspólnej masy przy połączeniu CMOS.
  • Podłączenie RS-232 bezpośrednio do GPIO.
  • Używanie bitu parzystości zamiast CRC do ochrony całej wiadomości.
  • Przypisywanie każdego błędu szybkości transmisji, choć podobne objawy mogą dać pełny bufor, niezgodne napięcia, zakłócenia masy albo kolizja RS-485.

Bibliografia