Większość z nas nigdy nie zastanawia się nad naszymi urządzeniami USB, po prostu je podłączamy i zapominamy o nich. Ale co, jeśli jesteś ciekawym typem, który chce wiedzieć więcej o tym, jak działa USB? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi na ciekawe pytania czytelnika.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.
Zdjęcie dzięki uprzejmości Evilelka Kowalski (Flickr).
Czytnik SuperUser smeeb chce wiedzieć, czy rzeczywiście istnieje rzeczywisty protokół komunikacyjny USB:
Według Wikipedii, USB:
- Definiuje kable, złącza i protokoły komunikacyjne używane w magistrali do połączenia, komunikacji i zasilania między komputerami i urządzeniami elektronicznymi.
Ale czy istnieje rzeczywiste Protokół komunikacji USB? Moje zrozumienie jest następujące:
- Podłączasz urządzenie USB do komputera (na przykład Ubuntu lub Linux).
- Linux jakoś znajdzie sterownik urządzenia dla tego urządzenia (bonus, jeśli wiesz!) i ładuje go.
- Urządzenie jest teraz podłączone pod / dev / theDevice.
- Aplikacje przestrzeni użytkownika mogą teraz odczytywać i zapisywać / dev / theDevice a sterownik obsługuje wejścia i wyjścia niskiego poziomu do podstawowego urządzenia / sprzętu.
O ile mogę powiedzieć, a Protokół komunikacji USB nie pojawia się nigdzie w tym strumieniu. Jeśli moje zrozumienie jest prawidłowe, USB to tylko kabel i połączenie elektryczne między komputerem a urządzeniem.
Czy ja tu się mylę? Czy USB rzeczywiście 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?
Czy istnieje rzeczywisty protokół komunikacji USB?
Dostawcy SuperUser RedGrittyBrick i projectdp mają dla nas odpowiedź. Najpierw, 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 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 w systemie operacyjnym może rozpoznać, że potrzebne są sterowniki specyficzne dla określonego urządzenia.
Poniżej znajduje się odpowiedź z projectdp:
Pytanie
Czy istnieje aktywny protokół komunikacyjny USB niskiego poziomu i co to jest?
Odpowiedź
Tak jest. Specyfikacja USB zawiera protokół USB, który określa sposób korzystania z 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 poznać szczegóły na temat działania protokołu USB, ta wiki OSDev jest pomocna. Oto kolejny ciekawy opis wykorzystujący diagramy sekwencji do opisu różnych transakcji danych na podstawie protokołu USB.
Pytanie dodatkowe
W jaki sposób system Linux znajduje i ładuje sterownik urządzenia dla tego urządzenia?
Odpowiedź bonusowa
W systemie Linux podczas korzystania z jądra obsługującego 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 odbywa się za pomocą kontrolera hosta USB. Następnie w kernelu sterownik kontrolera hosta przejmuje i tłumaczy bity niskiego poziomu na drucie na informacje w formacie USB. Ta informacja zostanie następnie zapełniona w sterowniku usbcore w jądrze.
Parafrazowałem z tego wspaniałego artykułu Opensourceforu, który ma znacznie więcej szczegółów i jasności na temat twojego pytania w kontekście Linuksa.
Koniecznie sprawdź resztę żywej dyskusji poprzez link do wątku udostępniony poniżej!
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.