2008-11-09 17 views
7

Znam wiele komunikacji asynchronicznej, pakiet zaczyna się od początku.Start Bit vs Start Byte

Ale bit początkowy to tylko 1 lub 0. Jak odróżnić bit początkowy od końcowego od ostatniego pakietu?

Przykł. Jeśli wybiorę mój bit startowy na 0, a mój bit końcowy na 1. i otrzymam 0 (strumień danych A) 1 0 (strumień danych B) 1, , co jest tam, aby powstrzymać mnie od założenia, że ​​istnieje strumień danych C, który zawiera tę samą zawartość "(strumień danych A) 1 0 (strumień danych B)"?

Czy nie jest wygodniej mieć początek BYTE, a następnie sprawdzić strumień danych dla tej kombinacji bitów? To ograniczy możliwość pomylenia pomiędzy bitem początkowym/końcowym.

Odpowiedz

9

Świetne pytanie! Większość komunikacji asynchronicznej określa także bit bitu, który jest uzupełnieniem bitu początkowego, zapewniając, że każdy nowy symbol zaczyna się od przejścia stop-to-start.

Przykład: Załóżmy przekazywać znaki ABC, które są ASCII 65, 66, i 67:

A = 65 = 0x41 = 0100 0001 
B = 66 = 0x42 = 0100 0010 
C = 67 = 0x43 = 0100 0011 

Załóżmy również zakładać (arbitralnie), że bit startu jest 0 a bit stopu jest 1 i dane są przesyłane z MSB do LSB. Nadajnik znajdzie się w stanie zatrzymania (1), gdy nie są przesyłane żadne dane. Zatem odbiornik może zobaczyć:

Data: ....1111 0010000011 111 0010000101 0010000111 11111.... 
     (quiet)^ A $ ^ B $^ C $ (quiet) 

z przeprosinami za grafikę ASCII, dane składa się z szeregu przystanku (1) bitów, podczas gdy kanał jest wolny. Gdy nadajnik jest gotowy do wysłania znaku, wysyła bit startu (0) (oznaczony ^), po którym następuje kod znaku, a kończy się bitem zatrzymania (1) (oznaczonym jako $). Kontynuuje wysyłanie bitów stopu do momentu przesłania następnego znaku, zaczynając od innego bitu startowego.

Powodem używamy rozpocząć bity zamiast bajtów jest efektywność. Schemat powyżej wymaga 10 bitów (1 rozpoczęcia + 8 danych + 1 zatrzymania) przekazywanie 8 bitów danych, w wyniku czego napowietrznej od (10 - 8)/8 = 1/4 = 25% . Jeśli użyjemy początku i końca bajtów, będziemy musieli przesłać 3 bajty dla każdego bajtu danych, co byłoby obciążeniem (3 - 1)/1 = 2 = 200%. Jeśli każdy początek, data i stop bajtu wynosi 8 bitów, będziemy musieli przesłać 24 bity zamiast 10 dla każdego znaku, więc przesłanie danych zajmie prawie 2 1/2 razy więcej!

+0

Wygląda na to, że w twoim przykładzie jest faza "spokojna"/bezczynna. Czy w programie sprawdziłbym to z przekroczeniem limitu czasu? – Steve

+0

Nigdy nie widziałem, aby implementacja zachowywała się tak, jak opisujesz, ciągle wysyłając bity stopu, gdy linia jest bezczynna, co nie ma żadnego sensu. –

+1

Jestem facetem od sprzętu. Jeśli sprawdzisz napięcie na linii odbiorczej portu szeregowego twojego komputera, to * zawsze * będzie albo na poziomie 0 albo 1 (albo szybko między nimi). Punktem początku bit jest wymuszenie przejścia z "stop" - które jest takie samo jak "bezczynność". –

0

Oto sposób uruchamiania i zatrzymywania bity zazwyczaj pracują:

  1. A bit startu jest wysyłany, powiedzmy 1. Wskazuje to do odbiornika, który będzie nadawany określonej liczby bitów danych, powiedzmy 8.
  2. 8 bitów danych zostaje wysłanych.
  3. Zostaje wysłany bit zatrzymania, powiedzmy 0. Oznacza to, że wysłano 8 bitów danych.

Jeśli ma zostać przesłanych więcej danych, każdy bajt musi zostać zainicjowany bitem początkowym i zakończony bitem stopu. Nadajnik i odbiornik muszą uzgodnić, ile bitów danych jest wysyłanych dla każdego bitu startowego, aby odbiornik mógł odróżnić bit zatrzymania od danych. Czasami bit początkowy jest w rzeczywistości bitem wielokrotnym lub nawet bajtem, ale idea jest taka sama. Odbiornik rozpoznaje koniec ramki danych, gdy widzi bit zatrzymania po otrzymaniu wcześniej określonej liczby bitów danych. Czasami bit parzystości jest wysyłany przed bitem stop, aby zapewnić prosty mechanizm wykrywania błędów.

0

Wszystko zależy od protokołu. Możesz powiedzieć, że po symbolu startowym będziesz oczekiwać symboli N lub przeczytasz, aż napotkasz symbol stopu.

gdzie symbol colud być dowolną sekwencję N-bitowej (w tym kawałku i bajt).

Rzeczywiście swoją przykład z bitami dokładnie stosuje się do protokołu, który wykorzystuje bajtów zamiast bitów.

Say wysłaniu 00000000 11111111 00000000 Strumień Strumień B 11111111. W tym przypadku nadal mogą mylić go ze strumieniem C = Strumień 11111111 00000000 strumień B.

Zazwyczaj nieco start jest używany z powodu zmiany poziomu napięcia może wywołać zdarzenie (zobacz wyzwalanie zboczem w flip flops.) Z drugiej strony symbol uruchomienia z wieloma bitami będzie używany do synchronizowania zegarów dwóch systemów oprócz wyzwalania zdarzenia. Przykładem może być sygnał PAL.

-2

Bity rozpoczęcia i zakończenia pochodzą z dni teletypes. Zasadniczo były to impulsy, które zajęły trochę czasu, aby pozwolić na ustawienie sprzętu mechanicznego. Linie pliku tekstowego DOS zakończone są CR LF, co dosłownie spowodowało powrót karetki do kolumny 1, a płytą do przesunięcia o jedną linię. Wydaje mi się, że jest w kolejności, ponieważ CR trwa dłużej, a LF może działać skutecznie równolegle.

Wykrywanie go jest nieco trudniejsze. W pewnym sensie musisz oglądać strumień bitów. Po pewnym czasie powinieneś być w stanie to wykryć, ponieważ dane są zwykle ASCII z bitami start/stop wokół niego. Zwykle nie stanowi to problemu, ponieważ jest obsługiwany przez UART, który uruchamia port COM.

+0

Możesz wprowadzać w błąd początkowe i końcowe bity ze znakami pacing, które mają opóźnić transmisję do momentu, aż sprzęt "zacznie" do niej przychodzić. Bity startowe i stop są ściśle związane z synchronizacją odbiornika z nadajnikiem, więc "wyszukuje" każdy bity we właściwym czasie. –

+0

Ta odpowiedź jest błędna w wielu punktach ... EvilTeach. – jpinto3912

+0

I pozostawiam to jako ostrzeżenie dla innych. – EvilTeach

1

Zawsze można zdefiniować bajt początkowy jako wskazanie, że wiadomość się zaczyna (a kody ASCII SOH, STX i ETX były przeznaczone do takich celów). Jednak standardowy sprzęt i protokoły do ​​połączenia ze sprzętem transmisji danych (RS232C i nowszym) działają na niższym poziomie i na ogół nie jest możliwe ani pożądane, aby zmienić to ustawienie (zwłaszcza za pomocą oprogramowania).

Schematy synchronicznej transmisji danych o wysokiej wydajności, takie jak stosowane w sieciach lokalnych i systemach transmisji rozległych, wymagają skomplikowanych znaczników ramek. Znacznik ramki to wyraźny wzorzec bitów, który nigdy nie występuje w strumieniu danych wiadomości. Zwykle istnieje specjalna reguła przepisywania, która zasadniczo "wymyka się" wszelkim wystąpieniom w danych podobnego wzorca bitowego, aby sprzęt nadawczy nie widział go jako znacznika ramki. Te zbierane wzory są rekonstruowane przez odbiorcę, więc nadawca i odbiorca nigdy nie muszą zwracać na to uwagi. Te rozwiązania sprawiają, że wyspecjalizowany sprzęt jest jeszcze ważniejszy, na przykład w typowej karcie sieciowej (obecnie płyta główna) na komputerach osobistych.

Tło ON asynchronicznego komunikacji szeregowej

Korzystne jest, że asynchronicznych transmisji szeregowych asynchronicznie między charakterem/ramek danych i synchronicznego w odstępie ramy postaci (w tym bitów startu i początkowy stop/wypełnienia).

Przy tym schemacie występuje stały sygnał wypełnienia między ramkami i zwykle jest to co najmniej jeden bit szerokiego bitu danych, chociaż niektóre układy wymagają 1,5-bitowego lub 2-bitowego zatrzymania/wypełnienia. "Bit" stopu wykorzystuje ten sam poziom sygnału i może być uważany za minimalny okres wypełnienia, zanim nadejdzie inny bit startu.

Po nadejściu ramki należy ją zsynchronizować z uprzednio określoną liczbą bitów, które ma przenieść. Przejście od wypełnienia do sygnału o przeciwnym poziomie odbywa się przez bit początkowy, który jest zawsze przeciwny do poziomu stop/wypełnienia. Próbkowanie bitów może odbywać się w określonym czasie w połowie kolejnych okresów bit-arrival.

Z technicznego punktu widzenia, jeśli ramki były wysyłane z maksymalną szybkością, nie byłoby konieczne wysyłanie żadnego zatrzymania/wypełnienia, natychmiast przechodząc do bitu początkowego następnej klatki. Jednak liczenie na co najmniej jeden bit wartości wypełnienia przed rozpoczęciem bit-startu pomaga utrzymać synchronizację nadawcy i odbiorcy.

Jeśli uważasz, że strumienie asynchroniczne są kodowane z depresji klawiszy za pomocą klawiatury, możesz zobaczyć, jak ważne jest umożliwienie dowolnego wypełnienia ramek. Kiedy już wiadomo, która ramka ma zostać wysłana, można ją wstawić natychmiast, z bitem początkowym, z uzgodnioną szybkością bitową, po osiągnięciu przynajmniej jednego bitu wartości poprzedniego zatrzymania/wypełnienia.

Należy również zauważyć, że w typowych szybkich transmisjach asynchronicznych istnieją tylko dwa rodzaje bitów/poziomów, więc jedynym sposobem odróżnienia obecności danych w przeciwieństwie do wypełnienia jest schemat znaczników w ten sposób początek ramki jest jednoznacznie wykrywalny, a koniec ramki jest z góry określony (chyba że istnieje bardziej wyrafinowana struktura ramek o zmiennej długości, zasadniczo nieużywana w asynchronicznej komunikacji szeregowej). W rzeczywistości trudno jest odbiornikowi wykryć szybkość transmisji nadajnika bez jakiejś dodatkowej zgody, na przykład w celu znalezienia rozpoznawalnej sekwencji danych, z której można oszacować przepływność, która sprawiłaby, że przybyłaby poprawnie, gdy przybędzie w niewłaściwej formie.

Mimo że szybkie modemy przesyłają teraz złożone sygnały analogowe, które nie są opisane w kategoriach dwóch prostych poziomów sygnału, cyfrowa komunikacja RS232C (i później) między komputerem UART a łączeniem danych w modemie jest prawie tak, jak to opisano.

Szybkie modemy mają także dodatkowe możliwości synchronizacji z odległym punktem końcowym, co można usłyszeć, słuchając sygnału audio podczas uruchamiania połączenia. Ponadto istnieją oddzielne linie sygnałowe w kablu szeregowym do komputera, które są używane do stymulacji między komputerem a modemem, aby strona wysyłająca nie transmitowała nowych ramek danych szybciej niż strona odbierająca (komputer lub modem) może akceptować im. Ale ramka, po uruchomieniu, jest zawsze uruchamiana z uzgodnioną prędkością synchroniczną.

Wikipedia ma dobry opis asynchronous serial communication, jakie porty szeregowe komputera używają.

Istnieje powszechne nadmierne uproszczenie, które sugeruje, że bit stopu określa długość danych. Nie o to chodzi. Bit stopu wygląda jak poziom dla innego bitu danych. Sposób rozpoznawania bitu zatrzymania i okresu do następnego bitu początkowego polega na określeniu szybkości transmisji bitów, w której transmitowane są dane w ramce i bity start/stop, oraz ustalanie liczby bitów zawartych w ramce.W przeciwnym razie nie ma możliwości odróżnienia bitu stopu od innego bitu tej polaryzacji jako części ramki danych.