
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 redakcyjnyNajważ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.
| Warstwa | Co określa | Przykłady |
|---|---|---|
| Ramka UART | stan spoczynkowy, start, dane, parzystość, stop, kolejność bitów, szybkość | 8N1 przy 115200 bodach |
| Połączenie elektryczne | napięcie, polaryzację, odniesienie, prąd, kabel | CMOS 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ści | Reguła dla danych i bitu parzystości | Ograniczenie |
|---|---|---|
N | brak dodatkowego bitu | brak wykrywania błędów |
E | łączna liczba bitów 1 jest parzysta | nie wykrywa parzystej liczby zmienionych bitów |
O | łączna liczba bitów 1 jest nieparzysta | ta sama zdolność wykrywania, odwrotna konwencja |
| mark / space | wymuszone 1 / wymuszone 0 | rzadkie 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ść | Tb | Czas ramki 8N1 |
|---|---|---|
| 9,600 bodów | 104.17 µs | 1.042 ms |
| 57,600 bodów | 17.36 µs | 173.6 µs |
| 115,200 bodów | 8.681 µs | 86.81 µs |
| 1,000,000 bodów | 1.000 µs | 10.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.
| Interfejs | Stan spoczynkowy UART | Typowe napięcia | Bezpośrednio do UART 3.3 V? |
|---|---|---|---|
| CMOS 3.3 V | wysoki | około 0 / 3.3 V | tak, jeśli progi są zgodne |
| Logika 5 V | wysoki | około 0 / 5 V | tylko do wejścia odpornego na 5 V |
| RS-232 | ujemny (mark) | zwykle −5 do −12 V / +5 do +12 V | nie, użyj transceivera RS-232 |
| RS-485 | różnicowy | para A/B | nie, 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
| Wskazanie | Typowe znaczenie | Częste przyczyny |
|---|---|---|
| Błąd parzystości | odebrany bit parzystości jest niepoprawny | zakłócenia, złe ustawienie, graniczne parametry czasowe |
| Błąd ramkowania | niepoprawny bit stopu | niewłaściwa szybkość, odwrócenie polaryzacji, sygnał break |
| Przepełnienie odbiornika | nowy bajt nadszedł, zanim obsłużono poprzedni | zablokowane przerwanie, brak DMA, zbyt mały bufor |
| Sygnał break | linia pozostaje niska dłużej niż ramka | celowy break, zwarcie, zatrzymane urządzenie |
- Zapisz pełną konfigurację, na przykład
115200, 8N1, LSB jako pierwszy, bez kontroli przepływu, CMOS 3.3 V. - Sprawdź połączenie
TX ↔ RX, wspólną masę oraz zasilanie transceivera iDE. - Zmierz czas jednego bitu: przy 115200 bodach wynosi około 8.68 µs.
- Wyślij
0x55, a następnie0x00i0xFFjako wzorce diagnostyczne. - 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:
8N1pozwala 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.