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.
Wygląda na to, że w twoim przykładzie jest faza "spokojna"/bezczynna. Czy w programie sprawdziłbym to z przekroczeniem limitu czasu? – Steve
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. –
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ść". –