Jeden czy dwa bity stopu UART?

15

UART często pozwalają wybrać między 1, 1,5 a 2 bitami stopu. Przy wydajności 1 bitu stopu wydajność wynosi 80% (8/10), a 2 bity stopu spadają do 72,7% (8/11). Jaka jest więc zaleta drugiego bitu stopu?

Federico Russo
źródło

Odpowiedzi:

19

Dodatkowe bity stopu mogą być użytecznym sposobem na dodanie nieco dodatkowego czasu przetwarzania odbioru, szczególnie przy dużych prędkościach transmisji i / lub przy użyciu miękkiego UART, gdzie potrzeba czasu na przetworzenie odebranego bajtu.

Tam, gdzie prędkość jest wąska, a Twój UART oferuje tylko współczynniki podziału dla mocy 2, dodanie dodatkowego stopbitu może być opcją, aby dać mniej drastyczną redukcję prędkości niż następna najniższa prędkość transmisji.

Myślę, że jest to jeden z powodów, dla których standard DMX512 określa 2 stopbity.

Inną sytuacją, w której mogą się przydać, jest to, że urządzenia przekazują strumień danych bez buforowania lub pakietowania - niewielkie różnice w częstotliwości taktowania między węzłami i ziarnistość skończonego próbkowania mogą powodować błędy, gdy dane są odbierane i retransmitowane przez wiele węzłów w łańcuch, ale jeśli dane są wysyłane z 2 stopbitami, a odbiorniki są ustawione na jeden stopbit, dodaje wystarczający margines, aby pomieścić te błędy i pozostawia co najmniej jeden ważny okres stopbit dla węzłów daleko w łańcuchu, aby niezawodnie odbierać.

Zetknąłem się również z sytuacją, w której bardzo długi odcinek kabla spowodował pewną asymetrię w czasie narastania i opadania, co skutkowało nieodpowiednią długością stopbitu - wysyłanie 2 stopbitów i posiadanie tylko jednego odbiornika wymaga naprawy.

mikeselectricstuff
źródło
6

W dawnych czasach drukarki były (prawie) całkowicie mechanicznymi konstrukcjami. Baudrates nawet wtedy był nieco znormalizowany, więc dodanie dodatkowego bitu stopu dałoby drukarce trochę więcej czasu na wydrukowanie postaci. Aspekty czasowe były wtedy bardziej widoczne. W przypadku mojej pierwszej drukarki głośno http://en.wikipedia.org/wiki/Teletype_Model_33 , po wysłaniu zwrotu karetki musiałem wstawić pauzę dwóch znaków.

Wouter van Ooijen
źródło
Odpowiednio dostosowany model 33 potrzebował tylko jednej postaci po powrocie karetki. To wtedy powinieneś wysłać Linefeed! Zapomniałem, że potrzebowały 2 bitów stopu, ale masz rację, więc zastosowanie ma to, co powiedziałem poniżej, odpowiedź Russela (ale te 1,5 bitu stopu dotyczyły sprzętu Baudota). Dodatkowe bity stopu (10 ms) nie pomogły jednak w opóźnieniu zwrotu karetki.
gbarry
4

Dwa bity stopu raczej nie będą o wiele bardziej przydatne niż jeden w systemie, który ma znaczną część czasu zatrzymania i który pracuje w środowisku o niskim poziomie hałasu (niski BER), takim jak sprzęt wewnętrzny lub interfejs peryferyjny z kilkoma miernikami kabla i / lub bez stopnia modem-modem.

2 bity stopu zapewniają dłuższy czas synchronizacji, więcej czasu na przetwarzanie znaków i prawdopodobnie, w zależności od sprzętu i algorytmów, większą szansę na uzyskanie lub odzyskanie synchronizacji podczas ciągłego strumienia danych. Czas między znakami ma znacznie mniejszą wartość w nowoczesnych systemach niż wtedy, gdy prędkości zegara były niskie, a przepustowość procesora mniejsza.

Jeśli masz zasadniczo ciągły strumień danych, to jeśli nie zostanie zsynchronizowany, każdy wysoki bit będzie wyglądał jak bit stopu. Każde wysokie niskie przejście będzie wyglądało jak granica bajtów. Jeśli Twój odbiornik zaczyna od granicy 10 i nie jest to prawdziwa granica początkowa, zostanie to odkryte tylko w 50% przypadków (tj. Jeśli okaże się, że końcowy „bit zatrzymania” rzeczywiście jest bitem niskiej ilości danych, a Ty również po drodze ominąłeś rzeczywistą granicę stop / start. Średnio masz 1/4 perspektywy, że granica bajtów wynosi 1/0 i fałszywie wygląda jak para stop / start. Powyższe sugeruje, że jeśli wybierzesz fałszywy stop- rozpocznij parę, prawdopodobnie istnieje około 50% szans, że wybierzesz kolejną przy następnej próbie.

Jeśli użyjesz 2 bitów stopu (11), wówczas prawidłową sekwencją stop startu jest 110, która ma 1/8 szansy na wystąpienie w losowym ruchu danych. Mieszanie bitów stopu i startu w niezsynchronizowanym przepływie zmienia nieco saty, ale wydaje się stosunkowo mało prawdopodobne, że jeśli uzyskasz fałszywą sekwencję 110 stop / start w jednym cyklu, trafisz w kolejną próbę przed potknięciem się o autentyczną 110 następna sekwencja.

Jak zauważasz, 1 bit stopu daje wydajność 8/10 = 80% maksymalnej przepustowości, a 2 bity stopu daje wydajność 8/11 = 72% wydajności. Różnica w przepustowości przy całkowitym limicie wynosi 80% / 72% = ~ 11% więcej. jest to użyteczny zysk w ekstremalnych okolicznościach, ale nie rozległy, a jeśli obwód jest bezczynny przez około 10% czasu, ma minimalną wartość. Jeśli twój obwód jest hałaśliwy i podatny na sporadyczną utratę synchronizacji, dodatkowy bit stopu może bardzo pomóc. ALE jeśli tak bardzo zależy Ci na przepustowości, często możesz zwiększyć prędkość transmisji (nie zawsze) lub przejść na w pełni synchroniczną pracę.

Russell McMahon
źródło
Nie znam żadnych UART, które można skonfigurować tak, aby ignorowały wszelkie pozorne bity startowe, które nie są poprzedzone więcej niż pełnym czasem oznaczania (w rzeczywistości większość akceptuje bit startowy, który jest poprzedzony przez pół bitu oznaczanie i nie można go skonfigurować inaczej). Taka funkcja może być jednak przydatna.
supercat
Raczej natknąłeś się na prawidłową odpowiedź, jeśli możemy zaakceptować, że ta praktyka sięga czasów mechanicznych. Wtedy mechanizm odbiornika potrzebował około 1-bitowego czasu, aby zatrzymać się, aby być gotowym na następny bit startowy. Przetwornik został tak skonstruowany, że ma 1,5-bitowy bit stopu. Miał opisany efekt. Jeśli synchronizacja została utracona, może być kilka śmieciowych znaków, dopóki nie odzyskasz synchronizacji. Gdy dotarliśmy do implementacji elektronicznych, odbiornik mógł zacząć czekać na następny bit startowy natychmiast po przejściu do poziomu zatrzymania - nie potrzebował padding
gbarry
@gbarry - metinks raczej nie potknął się w twoim komentarzu.
Russell McMahon
Właściwie zabrakło mi znaków :) Coś nie tak?
gbarry
3

Aby wzmocnić punkt mikeselectricstuff dotyczący czasu odbioru za pomocą „miękkich UART”, aplikacja odbierająca, która zawsze będzie wiedziała, kiedy przyjmować dane i robi to na zasadzie odpytywania, może często obsługiwać wyższe prędkości transmisji niż byłoby to praktyczne w przypadku miękkiego UART sterowanego przerwaniami. Takie aplikacje mogą jednak przetwarzać przychodzące dane tylko w czasie między bitem zatrzymania jednego bajtu a bitem uruchomienia następnego bajtu; czas potrzebny na przetworzenie każdego bajtu jest czynnikiem ograniczającym szybkość komunikacji. Przetwarzanie danych w 115 200-N-8-2 nie jest dużo bardziej wymagające niż przetwarzanie w 57 600-N-8-1, ale jest o ponad 80% szybsze.

Czasami można posunąć sprawy jeszcze dalej, stosując pozornie mniej wydajne formaty danych. Na przykład, można wysłać każdy bajt na dwa kawałki, jeden z siedmioma bitami i jeden z jednym (wszystkie MSB części jednobitowej są ustawione). Jeśli to zrobisz, nawet z jednym bitem stopu, będzie osiem bitów znakowania między końcem jednej pary bajtów a początkiem następnego, umożliwiając w ten sposób czterokrotne zwiększenie szybkości transmisji bitów może zrobić tylko dwa bity stopu (i osiem razy więcej niż to, co można zrobić z jednym). Pomimo konieczności wysyłania dwa razy większej liczby bajtów, czterokrotny wzrost szybkości transmisji danych byłby dużym zwycięstwem. Ponadto, chociaż każda przesyłana para bajtów mogłaby zostać wykorzystana do wysłania ośmiu bitów danych, tylko 130 z 256 możliwych wartości bajtów zostanie wykorzystanych przez kodowanie,

supercat
źródło
Można również zmiękczyć wysokie prędkości transmisji UART (250 KB i więcej), generując przerwanie na krawędzi startbitu i pozostając wewnątrz kodu przerwania dla całego bajtu - dodatkowy stopbit może być bardzo przydatny tutaj.
mikeselectricstuff
@mikeselectricstuff: Dodatkowy bit stopu może być bardzo przydatny, podobnie jak użycie tylko niektórych bitów w każdym bajcie (wymaganie ustawienia LSB każdego bajtu może być przydatne, ponieważ można wyprowadzić taktowanie od zbocza narastającego tego bitu, nawet jeśli może wystąpić niewielki spadek, gdy nastąpi przerwanie). Jednak głównym ograniczeniem podejścia bit-interrupt-triged-on-start-bit jest to, że nie ma ładnego sposobu wysyłania danych, gdy nadchodzą dane przychodzące. Przesyłane dane lub odebrane dane (lub oba) zostaną utracone.
supercat
2

Dawno, dawno temu istniały elektromechaniczne potwory zwane teletypami. Większość pracowała na silnikach prądu przemiennego synchronizowanych z częstotliwością linii elektroenergetycznej. Dlatego zawsze istniała szansa, że ​​dwie komunikujące się maszyny mogły nie zostać zsynchronizowane z tą samą siecią energetyczną lub nawet działać na prąd przemienny przy użyciu różnych częstotliwości.

Zatem, aby pozwolić wolniejszej maszynie na nadrobienie zaległości i nie na zsynchronizowanie, wysłano dwa bity stopu.

Do innych celów, takich jak umożliwienie powrotu karetki drukarskiej na początek nowej linii, wysłano CR, LF plus dwa wycięcia (wszystkie otwory na 8-poziomowej taśmie).

Było to zwyczajowe w przypadku obwodów pracujących z prędkością 110 Baud i wolniej.

Jacques Orsali
źródło
1

Powolność odbiorczych urządzeń mechanicznych była przyczyną dodania dodatkowych bitów stopu, jednak urządzenia te są obecnie wystarczająco szybkie i pracują z jeszcze większymi prędkościami transmisji bez potrzeby stosowania dodatkowego bitu stopu

ArunMKumar
źródło