Czy naprawdę istnieje „protokół komunikacyjny USB”?

24

Według Wikipedii USB:

definiuje kable, złącza i protokoły komunikacyjne stosowane w magistrali do łączenia, komunikacji i zasilania między komputerami i urządzeniami elektronicznymi

Ale czy naprawdę istnieje „ protokół komunikacyjny USB ”? Moje zrozumienie jest, że:

  1. Podłączasz urządzenie USB do komputera (powiedzmy Ubuntu lub inny system Linux)
  2. Linux znajduje sterownik tego urządzenia (jakoś - bonus, jeśli wiesz!) I ładuje go
  3. Urządzenie jest teraz podłączone pod /dev/theDevice
  4. Aplikacje w przestrzeni użytkownika mogą teraz odczytywać / zapisywać, /dev/theDevicea sterownik obsługuje niskopoziomowe operacje we / wy na podstawowym urządzeniu / sprzęcie

Dla mnie nigdzie w tym przepływie nie pojawia się „protokół komunikacyjny USB”. Jeśli dobrze rozumiem, USB to tylko połączenie kablowe i elektryczne między komputerem a urządzeniem.

Czy się tu mylę? Czy USB faktycznie implementuje jakiś protokół niskiego poziomu, który podkreśla powyższy przepływ? Jeśli tak, co to jest i jak działa w widoku 30 000 stóp?

smeeb
źródło
45
„sterownik obsługuje niskopoziomowe operacje we / wy na podstawowym urządzeniu / sprzęcie” robi to przy użyciu protokołu komunikacyjnego, który jest w standardzie.
EBGreen,
29
Och ... Przeczytałem pytanie: „Czy naprawdę istnieje„ protokół komunikacyjny USB ”?” Więc odpowiedź brzmi: tak. Jeśli chcesz wiedzieć, jaki jest rzeczywisty protokół komunikacyjny, po prostu przeczytaj standard. Lub przeczytaj sekcję 11 na stronie wiki, do której linkowałeś.
EBGreen
6
„USB to tylko połączenie kablowe i elektryczne między komputerem a urządzeniem”. Kabel Ethernet to tylko kabel między komputerem a przełącznikiem / routerem / czymkolwiek. Nadal istnieją pewne protokoły używane do komunikowania się za pomocą tego kabla i robienia z nim użytecznych rzeczy.
ysdx
13
„Linux znajduje sterownik urządzenia dla tego urządzenia”. Jak myślisz, że Linux jest w stanie wykryć, które urządzenie jest podłączone do drugiego końca? Może wspólny protokół?
spędził
4
@Ramhound „Te protokoły komunikacyjne są niezależne od standardu przynajmniej w przypadku Ethernetu”. To nieprawda. Protokoły Ethernetowe (zarówno warstwa fizyczna, jak i MAC) są zdefiniowane przez standardy Ethernet IEEE (w szczególności standardy 802.3 ). Oczywiście możliwe (i powszechne) jest przesyłanie czegoś innego niż protokół Ethernet kablem kategorii 6 z Złącza RJ-45, ale w tym momencie nie jest to już Ethernet. Jest to na przykład powszechna praktyka w systemach telefonicznych innych niż VoIP.
reirab

Odpowiedzi:

47

Tak, patrz protokoły USB

Jak rozumiem, specyfikacja USB definiuje złożony zestaw warstwowych protokołów i profili urządzeń.

Na przykład urządzenia USB mogą być zgodne z szablonami wysokiego poziomu, takimi jak pamięć masowa, klawiatura (lub interfejs użytkownika itp.) I mogą być zarządzane przez ogólny sterownik urządzenia. Niektóre urządzenia USB mogą komunikować się na niższym poziomie, tak że obsługa USB niskiego poziomu systemu operacyjnego może rozpoznać, że potrzebne są sterowniki wyższego poziomu specyficzne dla urządzenia.

RedGrittyBrick
źródło
30

Pytanie: Czy działa protokół komunikacyjny USB niskiego poziomu i co to jest?

Odpowiedź:

Tak, specyfikacja USB obejmuje protokół USB, który określa sposób używania magistrali na poziomie bitowym. Byłby to protokół „niskiego poziomu”, który leży u podstaw protokołów wyższego poziomu, tj. Pamięci masowej, HID itp.

Aby dowiedzieć się, jak działa protokół USB, pomocne jest to wiki OSDev . Oto kolejny interesujący opis wykorzystujący diagramy sekwencji do opisania różnych transakcji danych dla protokołu USB.

Pytanie dodatkowe: Jak Linux znajduje i ładuje sterownik urządzenia dla tego urządzenia?

Dodatkowa odpowiedź:

„W systemie Linux, gdy używa się jądra z obsługą USB, działające urządzenie USB zostanie wykryte przez sprzęt i jądro ze względu na specyfikację USB. Po stronie sprzętowej wykrywanie wykonuje kontroler hosta USB. Następnie w jądrze sterownik kontrolera hosta przejmuje i tłumaczy bity niskiego poziomu w przewodzie na informacje sformatowane w protokole USB. Informacje te są następnie wypełniane w sterowniku rdzenia USB w jądrze. ”

Sparafrazowałem z tego doskonałego artykułu opensourceforu , który zawiera znacznie więcej szczegółów i jasności na temat twojego pytania w kontekście Linuksa.

projectdp
źródło
7
Mam nadzieję, że „pytanie bonusowe” oznacza dla ciebie „nagrodę”.
dotancohen
@projectdp - Byłoby bardzo przydatne, gdybyś umieścił niektóre informacje z podstawowych odniesień w samej odpowiedzi.
Ramhound
@Ramhound - Dziękujemy za opinię, przepisałem swoją odpowiedź w bardziej pomocny sposób. Jeśli chodzi o dodawanie dodatkowych informacji z zasobów, co chciałbyś zobaczyć, które jest istotne dla pytań?
projectdp
14

Jak prawie każdy inny typ interfejsu komunikacyjnego, USB jest implementowany jako stos protokołów. Poziomy w tym stosie, które są wspólne dla wszystkich lub wielu typów urządzeń, są określone przez same standardy USB, co zarówno umożliwia kompatybilność, jak i uniemożliwia każdemu urządzeniu wykonanie redundantnego protokołu. Co więcej, każda warstwa protokołu streszcza szczegóły, o które nie musi się martwić kolejna warstwa. Tak więc, kiedy faktycznie piszesz warstwę specyficzną dla urządzenia, masz po prostu ogólne funkcje wysyłania i odbierania, które pobierają dane z punktu końcowego A do punktu końcowego B. Jako projektant urządzenia nie musisz się tym przejmować jak to się dzieje. Ponadto niższe poziomy w stosie protokołów mogą zmieniać implementację, o ile ujawniają wspólny interfejs dla warstwy nad nimi. W ten sposób, gdy jedna część stosu protokołu zmienia się, reszta stosu niekoniecznie musi się zmieniać.który protokół jest używany na pewnym niższym poziomie stosu. Ogólnie rzecz biorąc, każda kolejna warstwa w dół stosu będzie otaczać komunikat wytworzony przez następną najwyższą warstwę w swoim własnym polu ładunku, gdy wiadomość jest wysyłana. Po otrzymaniu wiadomości każda warstwa odrywa część związaną z tą warstwą i przesyła swój ładunek do następnej odpowiedniej warstwy w górę stosu. Dotyczy to nie tylko USB, ale prawie każdej magistrali komunikacyjnej. Na przykład najczęściej używany jest stos TCP / IP / Ethernet. Zadania, za które zwykle odpowiadają poszczególne warstwy, opisano w modelach, takich jak model OSI .

W USB istnieje protokół warstwy fizycznej, który określa stany napięcia / czas / etc. na drutach i jak należy je interpretować. Ten protokół oczywiście musi być częścią samych standardów USB, a nie specyficzny dla danego urządzenia (zwłaszcza, że ​​host nie ma możliwości dowiedzenia się, jakie urządzenie ma zostać podłączone do danego portu USB).

Następnie jest protokół zarządzania magistralą, używany do opisywania, kto może rozmawiać w autobusie, kiedy. Nazywa się to warstwą dostępu do mediów w modelu OSI. W USB tę warstwę można z grubsza podsumować, ponieważ „urządzenie może transmitować, kiedy host każe to zrobić”, więc nie ma specjalnie skomplikowanego protokołu na tej warstwie w USB.

Następnie znajduje się standardowy protokół opisujący pakiet danych i sposób, w jaki powinien on być kierowany od nadawcy do odbiorcy. Warstwa ta musi również stanowić część samego standardu USB, aby początkowa komunikacja w celu odkrycia, jaki typ podłączonego urządzenia mogła się zdarzyć, zanim dany typ urządzenia zostanie faktycznie rozpoznany przez host. Oprócz każdego urządzenia posiadającego określony identyfikator na tej warstwie, istnieje również koncepcja USB identyfikatora punktu końcowego w USB. Dzięki temu dowolne urządzenie może mieć wiele punktów końcowych USB, które są multipleksowane i demultipleksowane przez standardowy stos USB, podobnie jak gniazda są multipleksowane i demultipleksowane przez standardowy stos TCP / IP. Aplikacja może traktować każdy z tych punktów końcowych jako osobne strumienie danych.

Wreszcie istnieje protokół zdefiniowany dla samego urządzenia. Należy pamiętać, że w rzeczywistości istnieją pewne typowe, wstępnie zaprojektowane elementy stanowiące część standardu USB dla typowych przypadków użycia, takie jak urządzenia pamięci masowej, myszy, klawiatury itp., Dzięki czemu każdy producent urządzeń nie musi ponownie wymyślać koło. Bardziej skomplikowane urządzenia mogą jednak zaprojektować własny protokół na tej warstwie. Dane wyjściowe tej warstwy dla danej transmisji są przekazywane jako ładunek pakietu danych na poprzedniej warstwie. Zauważ, że w przypadku wystarczająco skomplikowanych urządzeń, część protokołu specyficzna dla urządzenia może być podzielona na wiele niezależnych warstw, ale niższe poziomy nie muszą o tym wiedzieć ani się tym przejmować. Wszystko, co muszą wiedzieć, to to, że muszą przekazać dany zestaw bajtów z hosta do określonego punktu końcowego urządzenia lub z określonego punktu końcowego urządzenia do hosta. Ponownie, mając standardowy interfejs między warstwami, można rozdzielić obawy, więc jedna warstwa nie musi przejmować się wewnętrznym działaniem innej warstwy, a jedynie konkretnymi danymi, które powinna przekazać lub oczekiwać od warstw bezpośrednio powyżej lub pod nim w stosie.

reirab
źródło
9

W rzeczywistości istnieje zestaw powiązanych protokołów komunikacyjnych, które oddziałują na siebie.

Na najniższym poziomie znajduje się protokół opisujący, w jaki sposób pakiety bajtów są wysyłane przez połączenie szeregowe. Jest to wspólne dla wszystkich urządzeń USB (ale różni się w przypadku USB2 i USB3).

Jeden z pierwszych wysłanych pakietów prosi urządzenie o opisanie się. Aby zapobiec problemowi z kurczakiem i jajkiem, protokół identyfikacji jest taki sam dla wszystkich urządzeń USB. System operacyjny może użyć tej identyfikacji, aby załadować odpowiedni sterownik.

Na jeszcze innym poziomie USB jest magistralą, co oznacza, że ​​wiele urządzeń musi współdzielić przepustowość. Oznacza to, że istnieje protokół, który informuje każde urządzenie, kiedy może mówić, a kiedy nie. Ponieważ wszystkie urządzenia USB muszą być zgodne z tym, do ustalenia tego służy wspólny protokół.

Wreszcie, wiele prostych urządzeń USB jest tak prostych, że istnieją dodatkowe protokoły opisujące całą klasę urządzeń (myszy, klawiatury, pamięć masowa, adaptery Ethernet, ...). Większość urządzeń obsługuje zero lub jeden z tych protokołów funkcjonalnych.

MSalters
źródło
„USB to magistrala, co oznacza, że ​​wiele urządzeń musi dzielić szerokość pasma” - Punkt, który OP przeoczył, gdy używał tylko konfiguracji punkt-punkt w swoim pytaniu. Ponieważ dwa (lub więcej) urządzeń USB może współdzielić kabel z komputerem PC, możemy wywnioskować, że musi istnieć protokół.
trociny
@sawdust Ponieważ w ogóle działa (nawet punkt-punkt), możemy wywnioskować, że istnieje protokół. Na przykład wykrywanie urządzeń nie byłoby możliwe, gdyby nie istniał standardowy protokół.
reirab
Rzeczywiście istnieje standard komunikacji, a jego rdzeniem jest komunikacja szeregowa Universal Serial Bus.
Ramhound
@Ramhound Tak, podobnie jak większość nowoczesnych konstrukcji magistrali do wszystkiego oprócz interfejsów pamięci, USB wykorzystuje szeregowe pary różnicowe do transmisji danych. USB <= 2.0 miał pojedynczą parę różnicową, podczas gdy USB 3 ma dwie dodatkowe pary różnicowe (jedna do transmisji SuperSpeed ​​i druga do odbioru SuperSpeed, umożliwiając komunikację w pełnym dupleksie z prędkością 5 Gb / s w każdym kierunku.)
reirab
Pomyślałem, że skieruję jego magistralę szeregową na rdzeń standardu, autor nie zdawał sobie z tego sprawy, stąd pytanie.
Ramhound
5

Być może część odpowiedzi leży w definicji frazy „ protokół komunikacyjny ”. Idąc do tego samego źródła (Wikipedia), znajdziesz przydatne informacje, takie jak:

  • Aby komunikacja mogła się odbyć, należy uzgodnić protokoły.
  • Systemy komunikacyjne używają dobrze zdefiniowanych formatów (protokołów) do wymiany wiadomości.
  • protokół musi określać składnię, semantykę i synchronizację komunikacji.
  • Protokół można zatem zaimplementować jako sprzęt, oprogramowanie lub oba.

Prostym sposobem, aby myśleć o tym, że protokół jest wstępnie zdefiniowane i uzgodnione sposób robienia czegoś , w tym przypadku coś jest sposób przenoszenia danych do iz urządzenia USB podłączone. Pod względem sprzętowym każdy pin ma wstępnie zdefiniowany poziom napięcia i protokół użytkowania, każdy typ urządzenia ma wstępnie zdefiniowany protokół użytkowania dla każdego pin , a każdy pakiet danych ma wcześniej zdefiniowaną składnię i format danych. Dołączono także protokół uzgadniania komunikacji . Łącznie są to wszystkie elementy zbioru standardów użytkowania urządzeń USB, czyli protokołu USB, na co decydują (tj. projektują, proponują, debatują, poprawiają i ostatecznie zgadzają się) członkowie USB Implementers Forum, Inc.

Więc tak, tam jest protokół USB, lub bardziej poprawnie tam liczne wstępnie zdefiniowane i uzgodnione protokołu USB s do różnych zastosowań USB.

OMY
źródło
1
1. proces komunikacji są (przynajmniej) trzy elementy: (1) kodowanie / wysyłania i (2) otrzymujące / dekodowania (3) _information_ (w przeciwieństwie do szumu losowego). Jeśli brakuje któregokolwiek z tych 3 elementów, proces kończy się niepowodzeniem. Mogą być również obecne dodatkowe elementy, takie jak sprzężenie zwrotne, medium (kanał) i kontekst. ŹRÓDŁO: Jeden z moich dyplomów
studiuje
1
2. SETI nie dotyczy komunikacji, dotyczy eksploracji i odkrywania . Nawet jeśli wykryjemy autentycznie wyprodukowany sygnał, nie ma gwarancji, że kiedykolwiek go zrozumiemy lub będziemy w stanie komunikować się z nadawcą. ŹRÓDŁO: [Misja SETI] [1] [1]: seti.org/about-us
2015 r. O
1
3. Zgodność między różnymi przeglądarkami jest zazwyczaj powodowana przez (a) producentów przeglądarek nieprzestrzegających protokołów lub (b) źle napisane protokoły powodujące błędne implementacje (na przykład rozważ niesławnebłędy modelu IEi zobacz także < quirksmode.org> ). To znaczy wy mamy teraz HTML 5 i CSS 3 , ponieważ protokoły wymagały ulepszenia. ŹRÓDŁO: Przez wiele lat
byłem
1
4. Po pierwsze, sygnały radiowe „synchronizujące” częstotliwość wykorzystują protokoły AM (modulacja amplitudy). Sygnały radiowe FM (modulacja częstotliwości) „synchronizują” się z całką czasową. Protokoły dla systemów FM obejmują stałe i dynamiczne elementy do przetwarzania informacji. Elementem dynamicznym są ustawienia zmiennej częstotliwości , które są ograniczone do wcześniej określonego i ograniczonego zakresu częstotliwości.
OMY
1
Elementami stałymi są wzory matematyczne do modulowania i demodulacji sygnału. Bez względu na to, jakie częstotliwości te formuły są stałe i można je wdrożyć do przetwarzania sygnału za pomocą analogowego sprzętu lub oprogramowania cyfrowego. ŹRÓDŁO: Osobiste doświadczenie jako hobbysta elektroniki, a także [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
2015 o