Większość z nas nigdy nie myśli o naszych urządzeniach USB, po prostu je podłączamy i zapominamy o nich. Ale co, jeśli jesteś ciekawskim typem, który chce dowiedzieć się więcej o działaniu USB? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi na pytania zaciekawionego czytelnika.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości SuperUser - części Stack Exchange, grupy witryn internetowych z pytaniami i odpowiedziami.
Zdjęcie dzięki uprzejmości Evilelka Kowalski (Flickr) .
Pytanie
Czytnik SuperUser smeeb chce wiedzieć, czy rzeczywiście istnieje protokół komunikacji USB:
Według Wikipedii USB :
- Definiuje kable, złącza i protokoły komunikacyjne używane w magistrali do połączeń, komunikacji i zasilania między komputerami i urządzeniami elektronicznymi.
Ale czy istnieje rzeczywisty Protokół komunikacji USB ? Rozumiem, że:
- Podłączasz urządzenie USB do komputera (na przykład Ubuntu lub dowolny rodzaj Linuksa).
- Linux w jakiś sposób znajduje sterownik urządzenia dla tego urządzenia ( bonus, jeśli wiesz! ) i ładuje go.
- Urządzenie jest teraz podłączone pod / dev / theDevice .
- Aplikacje w przestrzeni użytkownika mogą teraz czytać i zapisywać / dev / theDevice a sterownik obsługuje wejście i wyjście niskiego poziomu do podstawowego urządzenia / sprzętu.
O ile wiem, a Protokół komunikacji USB nie pojawia się nigdzie w tym przepływie. Jeśli dobrze rozumiem, USB to tylko kabel i połączenie elektryczne między komputerem a urządzeniem.
Czy się 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 przy widoku na 30000 stóp?
Czy istnieje rzeczywisty protokół komunikacji USB?
Odpowiedź
Dostawcy SuperUser, RedGrittyBrick i projectdp mają dla nas odpowiedź. Po pierwsze, RedGrittyBrick:
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, urządzenie interfejsu ludzkiego itp., I mogą być zarządzane przez ogólny sterownik urządzenia. Niektóre urządzenia USB mogą komunikować się na niższym poziomie, dzięki czemu obsługa niskiego poziomu USB w systemie operacyjnym może rozpoznać, że potrzebne są sterowniki wyższego poziomu specyficzne dla danego urządzenia.
Następnie odpowiedź z projectdp:
Pytanie
Czy działa protokół komunikacyjny USB niskiego poziomu i co to jest?
Odpowiedź
Tak jest. Specyfikacja USB zawiera protokół USB, który określa sposób wykorzystania magistrali na poziomie bitowym. Byłby to protokół niskiego poziomu, który stanowi podstawę protokołów wyższego poziomu (tj. Pamięci masowej, HID itp.).
Aby uzyskać szczegółowe informacje na temat działania protokołu USB, to OSDev wiki jest pomocny. Oto inny ciekawy opis wykorzystanie diagramów sekwencji do opisania różnych transakcji danych według protokołu USB.
Pytanie dodatkowe
W jaki sposób Linux znajduje i ładuje sterownik urządzenia dla tego urządzenia?
Dodatkowa odpowiedź
W systemie Linux, gdy używasz jądra obsługującego USB, działające urządzenie USB zostanie wykryte przez sprzęt i jądro zgodnie ze specyfikacją USB. Po stronie sprzętowej wykrywanie jest wykonywane przez kontroler hosta USB. Następnie w jądrze sterownik kontrolera hosta przejmuje kontrolę i tłumaczy bity niskiego poziomu w przewodzie na informacje sformatowane za pomocą protokołu USB. Te informacje są następnie umieszczane w sterowniku usbcore w jądrze.
Parafrazowałem z tego znakomitego Artykuł w Opensourceforu , który zawiera o wiele więcej szczegółów i jasności odnośnie twojego pytania w kontekście Linuksa.
Sprawdź resztę ożywionej dyskusji za pośrednictwem linku do wątku udostępnionego poniżej!
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych zaawansowanych technicznie użytkowników Stack Exchange? Sprawdź cały wątek dyskusji tutaj .