Pytanie:
Dlaczego potrzebujemy bitu start / stop do transmisji asynchronicznej
amjad
2020-06-10 20:03:11 UTC
view on stackexchange narkive permalink

Czytałem książkę, w której jest napisane

Transmisja asynchroniczna jest tak nazywana, ponieważ czas sygnału nie ma znaczenia.Zamiast tego informacje są odbierane i tłumaczone według uzgodnionych wzorców.Aby powiadomić odbiorcę o nadejściu nowej grupy, na początku każdego bajtu dodawany jest dodatkowy bit.Ten bit, zwykle 0, nazywany jest bitem startu.Aby odbiorca wiedział, że bajt się skończył, na końcu bajtu dołączany jest 1 lub więcej dodatkowych bitów.Te bity, zwykle jedynki, nazywane są bitami stopu.

Jak pokazuje poniższy obrazek:

enter image description here

Nie rozumiem, dlaczego potrzebujemy bitu start / stop?Czy nie jest tak, że bajt składa się z 8 bitów, więc odbiornik musi po prostu policzyć, ile bitów otrzymał do tej pory, jeśli liczba wynosi 8, ma jeden bajt i powtarza proces.Dlaczego więc potrzebujemy bitu start / stop?

Jak więc liczyć bity, jeśli nie wiesz, kiedy zacząć liczyć?Pamiętaj, że komunikaty nie są ciągłe i mogą pojawiać się sporadycznie, a oba Twoje tylko dwa stany są już używane do reprezentowania danych.Nie ma trzeciego stanu, który reprezentowałby brak wiadomości.
asynchroniczny, bez zegara, potrzebujesz co najmniej jednego zbocza i uzgodnionej (lub jeśli to możliwe wykrytej) szybkości, abyś mógł wykonać próbkowanie średniej komórki bitowej dla tych 8 bitów, które dają lub biorą (parzystość, dł, itp.).A to nie wystarczy, aby wiedzieć, gdzie się znajdujesz, w zależności od sytuacji, w której może wystąpić pewna liczba błędów kadrowania, dopóki nie uznasz, że jesteś zsynchronizowany.
nawet jeśli masz zegar, nie wiesz, gdzie są granice, możesz mieć coś takiego jak spi, w którym masz zegar i sygnał wyboru, dzięki czemu możesz zobaczyć, gdzie próbkować i jak podzielić to, co próbujesz, abyś mógł to odzyskaćz drugiej strony.
„czas sygnału jest nieważny” - wiedz, że jest żart, jeśli go słyszałem.
Pięć odpowiedzi:
Andy aka
2020-06-10 20:05:50 UTC
view on stackexchange narkive permalink

Gdybyś nie miał zerowego bitu początkowego, który rozpoczął odliczanie czasu do odbiornika, skąd wiesz, co zrobić, gdy bajt szeregowy pojawia się wraz z pierwszą cyfrą w strumieniu danych?Co się stanie, jeśli następny bit również ma wartość 1, a kolejny bit - co, jeśli wszystkie bity mają wartość 1?Wtedy straciłbyś cały bajt, ponieważ nic by się nie zmieniło (z powodu braku początkowego bitu 0).

Zwykłe 8 wysokich bitów z początkowym bitem startu zera: -

enter image description here

Brak bitu początkowego: -

enter image description here

Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/109283/discussion-on-answer-by-andy-aka-why-we-need-start-stop-bit-for-asynchroniczny-tra).
Cort Ammon
2020-06-12 01:33:31 UTC
view on stackexchange narkive permalink

Inną kwestią, oprócz zaakceptowanej odpowiedzi, jest czas.Będziesz miał dryf między zegarem nadawcy i odbiornika, więc odbiorca musi „odzyskać” zegar w taki czy inny sposób.Istnieją fantazyjne schematy, takie jak 10 / 8B, które wykorzystują do tego sygnały bezczynności, ale prostym podejściem w UART jest posiadanie „bitu początkowego”, którego obecność sygnalizuje zbocze narastające sygnału.Pozwala to odbiornikowi na ponowną synchronizację zegara w celu odebrania nadchodzącego bajtu.

Te wzorce startu i zatrzymania muszą występować wystarczająco często, aby zapewnić, że wyrównanie nie dryfuje zbyt daleko podczas odbioru.Prowadzi to do początku i końca bitów pojawiających się w każdym bajcie.To prosta zasada, nawet jeśli z innych względów nie jest „idealna”.

Dobra uwaga, którą starałem się zrozumieć w OP.
Tanner Swett
2020-06-11 23:25:34 UTC
view on stackexchange narkive permalink

Nie rozumiem, dlaczego potrzebujemy bitu start / stop? Czy nie jest tak, że bajt składa się z 8 bitów, więc odbiornik musi tylko policzyć, ile bitów otrzymał do tej pory, jeśli liczba wynosi 8, to ma jeden bajt i powtarza proces. Dlaczego więc potrzebujemy bitu start / stop?

Odbiornik nie może zliczyć otrzymanych bitów, ponieważ nie wie, czy odbiera bity!

Wyobraźmy sobie, że nadawca i odbiorca komunikują się za pomocą dźwięku i wyobraźmy sobie, że 0 jest reprezentowane przez jedną sekundę ciszy, a 1 jest reprezentowane przez jedną sekundę dźwięku. W Twojej książce „stan bezczynności” - co wysyła nadawca, gdy nie ma żadnych rzeczywistych danych do wysłania - to 1, co oznacza dźwięk.

Załóżmy teraz, że jesteś odbiorcą, a nadawca nie używa bitu startowego. Słychać osiem sekund ciągłego dźwięku. Czy właśnie usłyszałeś bajt „11111111”, czy nadawca jest po prostu na biegu jałowym? Nie możesz się tego dowiedzieć, ponieważ wszystko brzmi dla ciebie tak samo.

Alternatywnie, przypuśćmy, że słyszysz jedną sekundę ciszy, potem sześć sekund dźwięku, a potem jedną sekundę ciszy. Czy właśnie usłyszałeś bajt „01111110”? A może był to bajt „11110111”, po którym następuje bajt „11101111”? Ponownie, nie możesz tego wiedzieć.

Tutaj pojawia się bit startu. Kiedykolwiek nadawca chce wysłać bajt, najpierw wysyła 0 (jedną sekundę ciszy), następnie wysyła bajt danych.

Teraz Twoja praca jako odbiorcy jest o wiele łatwiejsza! Jeśli usłyszysz dziewięć sekund dźwięku, wiesz, że nadawca jest po prostu bezczynny. Jeśli z drugiej strony usłyszysz jedną sekundę ciszy, po której następuje osiem sekund dźwięku, wiesz, że nadawca właśnie wysłał bajt „11111111”.

Oczywiście większość systemów komunikacji maszyn nie używa dźwięku; zamiast tego używają energii elektrycznej. Ale sygnały elektryczne działają tak samo jak dźwięk. Odbiorca zawsze otrzyma coś , niezależnie od tego, czy tego chcemy, czy nie. Musimy więc dać odbiornikowi jakiś sposób na sprawdzenie, czy odbiera rzeczywiste dane, czy tylko szum bezczynności.

Aby odpowiedzieć na to konkretne pytanie w swoim komentarzu:

tylko jedno pytanie, jeśli nie mamy wartości „idle”, więc gdy nie ma danych do wysłania, odbiornik niczego nie otrzyma, więc może liczyć każde 8 bitów jako bajt bez konieczności zatrzymywania / uruchamiania trochę?

Fizycznie niemożliwe jest nie mieć wartości bezczynności. Jeśli masz kabel elektryczny, możesz wysłać napięcie dodatnie, ujemne lub 0, ale fizycznie niemożliwe jest nie wysyłanie żadnego napięcia. Oznacza to, że odbiornik zawsze otrzyma jakieś napięcie, bez względu na to, co robimy. Musimy więc dać odbiornikowi jakiś sposób, aby wiedział, czy napięcie, które otrzymuje, ma znaczenie, czy nie.

auspicious99
2020-06-10 21:54:43 UTC
view on stackexchange narkive permalink

Być może zamieszanie jest spowodowane tym, że my, ludzie, kiedy widzimy diagram podobny do twojego pytania, widzimy dokładnie, gdzie są wszystkie bity, który z nich następuje po którym, itd. Jednakże wyobraź sobie, że jesteś odbiorcą i wszystko, co masz do pracy to przychodzący przepływ sygnału (na przykład 2 poziomy, jeden poziom (powiedzmy, wysoki) reprezentujący 1 bit, inny poziom (powiedzmy niski) reprezentujący 0 bitów), jako analogowy sygnał elektryczny, który jest albo stała lub zmieniająca się z jednej wartości na drugą. Ponownie zwróć uwagę, że odbiorcą nie jest człowiek, który widzi pierwszy bit, drugi bit itp. Z globalnym widokiem.

Powiedzmy, że wartość „idle” jest taka sama, jak wartość 1-bitowa (wysoka). Wtedy nie wiesz, kiedy zaczną przychodzić bity, chyba że mamy przejście od 1 do 0. W przeciwnym razie, jeśli pierwszy bit ma wartość 1, skąd wiesz, kiedy się zaczyna?

Następnie w przypadku bitów stopu chcesz, aby był on przeciwny do bitu początkowego (więc chcesz, aby były to wartości 1), więc oznacza koniec jednego bajtu i możesz wiedzieć, kiedy zaczyna się następny bajt, kiedy znowu przechodzi od wysokiego do niskiego.

Można również argumentować, że zamiast widoku globalnego jest to pogląd bez przyczyny.Nie tylko nie jest to przypadkowe, ale diagramy są również rysowane * po tym, jak * ktoś lub coś już zorientowało się, gdzie wszystko się zaczyna i kończy, i oznaczyło je etykietą.Równie dobrze możesz powiedzieć: „Dlaczego potrzebujemy całej tej pracy, aby rozwiązać to równanie? Odpowiedź jest na końcu! Po prostu użyj tego!”
@auspicious99 Dziękuję za odpowiedź.tylko jedno pytanie, jeśli nie mamy wartości "idle", więc gdy nie ma danych do wysłania, odbiornik niczego nie otrzyma, więc może policzyć każde 8 bitów jako bajt bez konieczności zatrzymywania / uruchamiania bitu?
@amjad Aby uniknąć nieporozumień, każdy wysłany bajt ma dodany bit startu i stopu, więc za każdym razem wysyłanych jest 10 bitów.Niektórzy nadal nazywają to szybkością transmisji.Odbiornik oczekuje 10 bitów na bajt danych.Pamiętaj, że bity startu i stopu pomagają utrzymać synchronizację odbiornika z danymi.8-bitowe dane mogą być same 1 lub 0.Bez przejścia z 0 na 1 lub 1 na 0 nie można wykryć granicy bajtów.
Zauważ, że w tym przypadku bit stopu tak naprawdę nie "zaznacza końca jednego bajtu", niczego nie zaznacza, koniec bajtu jest znany z synchronizacji.Bit stopu służy do resetowania linii do stanu bezczynności, tak aby następny bit startu mógł zostać wykryty, gdy tylko nadejdzie.
@vsz dziękuję za odpowiedź.Ale czy naprawdę potrzebujemy bitu stopu, aby zresetować linię do stanu bezczynności?Powiedziano mi, że gdy kanał jest bezczynny, nadal wysyła 1s do odbiornika
Ale skąd kanał * wie *, że jest bezczynny?;)
@amjad po stronie nadajnika, wyobraź sobie, że masz przełącznik i musisz zawsze wybierać jedną lub drugą wartość, ustawiając przełącznik w jednej lub drugiej pozycji.
@amjad: być może łatwiej byłoby myśleć o bicie początkowym po prostu jako o przywróceniu linii do stanu bezczynności, a nie jako o bicie.
@amjad: "więc może liczyć każde 8 bitów jako bajt bez konieczności używania bitu stop / start": Nie. Opisujesz komunikację synchroniczną (która ma analogiczne problemy z utrzymaniem synchronizacji wszystkich przypadkowo dryfujących zegarów).W komunikacji asynchronicznej od końca jednego bajtu do początku następnego może upłynąć dowolna ilość czasu.Ten czas nie musi być wielokrotnością czasu transmisji bitu.
@auspicious99: W przypadku braku bitów stopu, co by się stało, gdyby urządzenie wysłało 5000 kolejnych bajtów zerowych przed pozostawieniem linii w stanie bezczynności przez chwilę?Jak dokładny musiałby być zegar odbiorcy, aby określić, że nadawca wysłał dokładnie 5000 bajtów zerowych, zamiast 4999 zer i 0x80 lub 5000 zer, po których następuje 0xFF?Istnieją sposoby projektowania protokołów asynchronicznych, aby zapewnić, że w ramach ciągłej komunikacji będą występowały okresowe przejścia linii bez użycia bitów stopu, ale większości UART nie można skonfigurować do ich obsługi.
supercat
2020-06-12 02:39:51 UTC
view on stackexchange narkive permalink

Jeśli bezczynna linia jest reprezentowana przez ciągły strumień tego samego stanu, który nie ma wyraźnego początku, każda transmisja musi rozpocząć się od wysłania czegoś, co różni się od stanu bezczynnej linii, niezależnie od tego, czy pierwszy przesyłany bit ma wartość zero czy jeden . Wobec braku innych środków wskazujących, kiedy zaczyna się transmisja, bit startu jest więc generalnie niezbędny zarówno w protokołach synchronicznych, jak i asynchronicznych, w których bezczynna linia byłaby nie do odróżnienia od jednolitego ciągu jedynek lub zer.

Chociaż istnieją sposoby projektowania protokołów, które nie wymagają oddzielnych bitów startu i stopu między bajtami, a tym samym poprawiają wydajność komunikacji o 10%, są one zwykle nieco bardziej skomplikowane niż obecny protokół, który został zaprojektowany jako mechaniczny zdekodowane za pomocą kombinacji elektromagnesu, silnika i niektórych krzywek. Jedną z rzeczy, która sprawiałaby, że praca bez bitów stopu byłaby trudna, jest to, że jeśli bit początkowy zawsze kieruje linię w stan przeciwny do stanu bezczynności, a każdy bit danych może być niezależnie wysoki lub niski, to czynność wysyłania wielu kolejnych bajtów zerowych mógłby po prostu obniżyć linię przez dowolnie długi czas bez żadnych przejść, aby zapewnić synchronizację nadawcy i odbiorcy.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...