Czytam o standardowym protokole dla UART i myślę, że jeśli odbierający UART nie ma pojęcia o prędkości transmisji danych, byłoby wiele problemów. Jeśli zakładana szybkość transmisji jest niższa niż prędkość transmisji, w której dane są przesyłane, pojawią się bity, których nie będzie „widoczny” przez odbierający UART. Z drugiej strony, jeśli szybkość transmisji wykorzystywana przez odbiornik jest wyższa niż prędkość transmisji, w której dane są przesyłane, pojawią się bity, które zostaną policzone dwukrotnie i spowodują nieprawidłowe odczytanie danych.
Moja wiedza na temat UART jest taka, że gdy linia jest bezczynna, jest trzymana na „1”, bit Start ma wartość „0”, a bit Stop ma wartość „1”. Ponadto bit stopu „1” nie ma żadnej różnicy w stosunku do „1”, gdy linia jest bezczynna lub czy istnieje sposób na rozróżnienie?
Czy dwóch komunikujących się UART najpierw zgadza się z tym, jakiej prędkości transmisji będą używać? Jeśli tak, jak to robią?
źródło
Odpowiedzi:
Zwykłe UART muszą być wstępnie skonfigurowane z żądaną szybkością transmisji (jak również długość słowa, bity stopu, parzystość itp.) Tradycyjnie przez człowieka.
Jednak od kilku dziesięcioleci w niektórych ustawieniach zastosowano implementacje wykrywania „automatycznej transmisji”, która zwykle działa poprzez synchronizację kluczowych funkcji kształtu fali w celu ustalenia prędkości transmisji. Wczesne wersje wymagały przesłania znanego znaku, ale bardziej zaawansowane wersje mogą znaleźć szybkość na podstawie dowolnych danych.
Odbierający UART zazwyczaj ma lokalny zegar, który działa z większą szybkością - zwykle 8 lub 16 razy większą niż prędkość transmisji. Służy to do próbkowania sygnału przychodzącego i wykrywania bitów w słowie w sposób, który może tolerować kilka procent błędu. Nawet dwa kryształowe oscylatory nie pasowałyby idealnie do siebie, ale tolerancja błędu może pozwolić na użycie niektórych mniej precyzyjnych źródeł, czasem takich jak przycięte oscylatory na chipie itp. Może to również pomóc uwzględnić fakt, że podział popularnych częstotliwości oscylatora może tylko produkować niedokładne przybliżenie niektórych prędkości transmisji - dawniej zegary główne UART czasami potrzebowały określonych częstotliwości, aby uzyskać dostęp do popularnych prędkości transmisji, na przykład 11,0592 MHz w rodzinie 8051.
źródło
Dwa UARTS „zgadzają się” na szybkość transmisji za pomocą dokumentacji oraz przez operatora / użytkownika ustawiającego szybkość transmisji ręcznie, w tym protokół uzgadniania, rozmiar bitów stop itp.
źródło
Tak, wszystko jest konfigurowane ręcznie, co często jest trochę uciążliwe, szczególnie gdy systemy są słabo udokumentowane (patrzę na ciebie, każdy system osadzony kiedykolwiek).
Wiem, że USB, SATA i większość innych współczesnych protokołów danych rozpoczyna się po jakimś zdarzeniu resetu lub inicjalizacji przy najniższej prędkości ze standardową domyślną konfiguracją i negocjuje ze wszystkimi innymi (lub tylko nadrzędnym, w zależności od protokołu) do wyższych prędkości . Niektórzy używają również rezystorów podwyższających lub obniżających na swoich liniach danych / mocy, aby wskazać obsługiwane prędkości.
Zobacz tę stronę na temat negocjacji USB, jeśli chcesz zagłębić się w inne protokoły.
źródło