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:
- Podłączasz urządzenie USB do komputera (powiedzmy Ubuntu lub inny system Linux)
- Linux znajduje sterownik tego urządzenia (jakoś - bonus, jeśli wiesz!) I ładuje go
- Urządzenie jest teraz podłączone pod
/dev/theDevice
- Aplikacje w przestrzeni użytkownika mogą teraz odczytywać / zapisywać,
/dev/theDevice
a 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?
linux
usb
linux-device-driver
smeeb
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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.
źródło
Universal Serial Bus
.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:
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 są liczne wstępnie zdefiniowane i uzgodnione protokołu USB s do różnych zastosowań USB.
źródło