Baud rate to liczba symboli przesyłanych w kanale komunikacyjnym w ciągu sekundy. W prostym UART jeden symbol zwykle odpowiada jednemu bitowi na linii, dlatego wartości takie jak 9600 albo 115200 są często traktowane jak prędkość transmisji w bitach na sekundę.
To ustawienie musi być zgodne po stronie nadajnika i odbiornika. Sam baud rate nie opisuje jednak całej komunikacji: znaczenie mają jeszcze format ramki, bity startu i stopu, parzystość, błąd zegara oraz jakość toru sygnałowego.
Co to jest baud rate?
Baud rate określa tempo zmian symboli w transmisji. W UART sygnał jest odczytywany jako kolejne stany logiczne, więc ustawienie 9600 oznacza zwykle 9600 bitów na sekundę na linii transmisyjnej.
Jest to parametr czasowy. Dla 9600 baud jeden bit trwa około 104 mikrosekundy, a dla 115200 baud około 8,68 mikrosekundy. Odbiornik musi próbkować sygnał w odpowiednich momentach, dlatego nawet niewielki błąd czasu może mieć znaczenie przy szybszej transmisji.
Baud rate a bit rate
Baud rate i bit rate w prostym UART często wychodzą podobnie, ale technicznie opisują różne rzeczy. Baud rate mówi o symbolach na sekundę, bit rate o bitach na sekundę, a throughput o danych użytkownika po odjęciu narzutu ramki.
| Pojęcie | Co mierzy? | Znaczenie w UART |
|---|---|---|
| Baud rate | Liczbę symboli na sekundę. | W prostym UART zwykle odpowiada liczbie bitów na sekundę na linii. |
| Bit rate | Liczbę bitów na sekundę. | Może być równy baud rate, jeśli jeden symbol niesie jeden bit. |
| Throughput | Ilość danych użytkownika na sekundę. | Zależy od formatu ramki i narzutu protokołu. |
Poza prostą transmisją szeregową różnica może być większa. W modulacjach wielobitowych jeden symbol może przenosić więcej niż jeden bit, więc baud rate i bit rate nie muszą mieć tej samej wartości.
Baud rate w UART
UART jest komunikacją asynchroniczną. Nadajnik i odbiornik nie mają osobnej wspólnej linii zegara, więc muszą wcześniej pracować z tym samym tempem transmisji i tym samym formatem ramki.
Odbiornik synchronizuje się na bicie startu. Potem odczytuje kolejne bity według własnego zegara, zakładając, że nadajnik wysyła dane z tym samym baud rate. Jeśli zegary rozjadą się za mocno, próbki wypadają coraz dalej od środka bitu.
Dlatego UART wymaga zgodności kilku ustawień naraz: baud rate, liczby bitów danych, parzystości i bitów stopu. Popularny zapis 9600 8N1 oznacza 9600 baud, 8 bitów danych, brak parzystości i 1 bit stopu.
Co oznaczają 9600, 115200 i inne wartości?
Wartości takie jak 9600, 19200, 57600 albo 115200 określają tempo bitów na linii w typowym UART. Niższa prędkość daje większy margines czasowy, wyższa pozwala przesłać więcej danych w tym samym czasie.
| Baud rate | Typowe użycie | Uwagi |
|---|---|---|
| 9600 | Wolna, zgodna komunikacja. | Częsta w starszych urządzeniach, terminalach i prostych modułach. |
| 19200 / 38400 | Prosta komunikacja embedded. | Kompromis między szybkością a marginesem czasowym. |
| 57600 | Szybszy port szeregowy. | Spotykany w mikrokontrolerach i modułach komunikacyjnych. |
| 115200 | Debug UART, logi, terminal. | Bardzo popularne ustawienie dla Arduino, MCU i konwerterów USB-UART. |
| 230400 i więcej | Szybkie logowanie albo szybkie moduły. | Wymaga lepszego zegara, krótszego toru i stabilniejszego sygnału. |
Wyższy baud rate ma sens wtedy, gdy urządzenie rzeczywiście generuje wystarczająco dużo danych. Jeśli czujnik wysyła kilka bajtów na sekundę, 115200 nie da zauważalnej korzyści względem wolniejszego, stabilniejszego ustawienia.
Ramka UART: dlaczego 115200 baud to nie 115200 bajtów/s?
W UART dane są przesyłane w ramkach. Typowy format 8N1 oznacza 8 bitów danych, brak bitu parzystości i 1 bit stopu. Do tego dochodzi 1 bit startu, więc jeden bajt danych użytkownika zajmuje 10 bitów na linii.
| Element ramki 8N1 | Liczba bitów | Rola |
|---|---|---|
| Start bit | 1 | Sygnalizuje początek ramki i synchronizuje odbiornik. |
| Dane | 8 | Właściwy bajt danych. |
| Parity | 0 | W formacie 8N1 parzystość nie jest używana. |
| Stop bit | 1 | Kończy ramkę i daje odbiornikowi czas na kolejny znak. |
| Razem | 10 | 10 bitów na 1 bajt danych użytkownika. |
Przy formacie 8N1 przepustowość bajtowa wynosi w przybliżeniu baud rate podzielony przez 10. Dla 9600 baud daje to około 960 bajtów/s, a dla 115200 baud około 11520 bajtów/s. Jeśli używana jest parzystość albo dwa bity stopu, narzut rośnie.
To ramka UART, a nie pakiet danych w sensie sieciowym. Dopiero protokół zbudowany nad UART-em może dodawać własne nagłówki, długości pól, sumy kontrolne i potwierdzenia.
Dlaczego przy złym baud rate pojawiają się krzaki?
Przy złym baud rate odbiornik próbuje odczytywać bity w złych momentach. Bit startu może jeszcze zostać wykryty, ale kolejne próbki zaczynają przesuwać się względem rzeczywistego sygnału. Bajt złożony z takich próbek nie odpowiada temu, co nadała druga strona.
W terminalu wygląda to jak losowe znaki, nietypowe symbole, przerwane linie albo brak sensownej odpowiedzi. Ten sam objaw może też powstać przy niezgodnej parzystości, złej liczbie bitów danych albo innym ustawieniu bitów stopu.
Błąd baud rate i tolerancja zegara
UART korzysta z lokalnych zegarów po obu stronach transmisji. Błąd nadajnika i odbiornika sumuje się. Jeśli łączny błąd jest zbyt duży, próbka bitu trafia za blisko granicy symbolu albo już w sąsiedni bit.
W mikrokontrolerach baud rate powstaje zwykle przez podział zegara systemowego. Nie każda częstotliwość oscylatora pozwala uzyskać idealne 9600 albo 115200. Rejestr dzielnika daje najbliższą wartość, a wynikowy błąd trzeba sprawdzić w dokumentacji układu.
Oversampling, na przykład 16×, zwiększa szansę próbkowania blisko środka bitu. Nie usuwa jednak błędu zegara. Im wyższy baud rate, dłuższa ramka i słabsze źródło taktowania, tym mniejszy margines bezpieczeństwa.
Jak dobrać baud rate?
Baud rate musi być obsługiwany przez oba urządzenia i możliwy do uzyskania przez ich zegary. Do logów debugowych często wybiera się 115200, bo daje wygodną szybkość i jest dobrze wspierany przez konwertery USB-UART. Dla wolnych czujników, starszych urządzeń i prostych komend wystarcza 9600 albo 19200.
Dobór zależy od ilości danych. Jeśli urządzenie wysyła krótką odpowiedź co jakiś czas, wysoki baud rate nie jest potrzebny. Jeśli przesyła ciągłe logi, próbki pomiarowe albo większe ramki protokołu, zbyt niska prędkość może zapełniać bufor i opóźniać komunikację.
Przy większej odległości albo zakłóceniach lepiej obniżyć prędkość lub zastosować właściwą warstwę fizyczną, zamiast wymuszać szybki UART na przypadkowym przewodzie.
Baud rate, kabel i poziomy sygnału
Baud rate opisuje czas transmisji, ale nie zastępuje poprawnej warstwy elektrycznej. UART TTL, RS-232 i RS-485 mogą przenosić dane szeregowe, lecz używają innych poziomów, nadajników i odporności na zakłócenia. Zgodna prędkość nie pomoże, jeśli urządzenia są połączone elektrycznie w zły sposób.
Znaczenie ma też napięcie poziomów logicznych. UART 3,3 V i UART 5 V mogą wymagać konwersji poziomów, a RS-232 nie powinien być podłączany bezpośrednio do wejścia mikrokontrolera TTL.
Przy prototypowaniu częstym źródłem problemów są luźne przewody, brak wspólnej masy i prowadzenie TX/RX obok źródeł zakłóceń. Krótki jumper wire może wystarczyć do wolnego debug UART, ale długi przewód przy szybszej transmisji wnosi pojemność, indukcyjność i podatność na zakłócenia.
Baud rate a ustawienia sprzętowe urządzenia
Niektóre urządzenia pozwalają ustawić baud rate programowo, przez menu albo komendę konfiguracyjną. Inne używają zworek, mikroprzełączników albo opisanych pozycji na płytce.
W modułach przemysłowych i starszych urządzeniach prędkość transmisji, adres albo tryb pracy może być ustawiany przez przełącznik DIP. Wtedy trzeba korzystać z tabeli producenta, bo ta sama kombinacja pozycji może oznaczać inne wartości w różnych modelach.
Typowe pomyłki przy baud rate
Pierwsza grupa błędów dotyczy konfiguracji ramki. Użytkownik zmienia sam baud rate, a problemem jest liczba bitów danych, parzystość albo stop bits. Dla odbiornika 9600 8N1 i 9600 7E1 to nie jest ta sama transmisja.
Druga grupa błędów dotyczy zegara i rejestrów UART. Przy konfiguracji mikrokontrolera trzeba sprawdzić, czy dana częstotliwość oscylatora i dzielnik pozwalają uzyskać baud rate z akceptowalnym błędem. Zbyt duża odchyłka może psuć transmisję nawet wtedy, gdy w kodzie wpisano „dobrą” wartość.
Baud rate – co trzeba zapamiętać?
Baud rate określa tempo symboli w transmisji. W prostym UART zwykle odpowiada liczbie bitów na sekundę na linii, ale poprawna komunikacja zależy też od formatu ramki i zgodności zegarów.
Przy UART trzeba sprawdzić całe ustawienie: baud rate, data bits, parity, stop bits, błąd generatora, poziomy elektryczne i jakość połączenia. Dopiero wtedy wiadomo, czy problem leży w prędkości, konfiguracji, przewodzie czy warstwie fizycznej.
Źródła i materiały
- Analog Devices – UART: A Hardware Communication Protocol
- Microchip – Debugging Serial Interfaces in Embedded Systems
- Microchip – UART Baud Rate Tolerance
- Texas Instruments – UART Protocol Overview and Error Sources
- Rohde & Schwarz – Understanding UART
- SBG Systems – UART Baud Rate and Output Rate
- Microchip – Basic Operation of UART with Protocol Support
