Patrząc na piny gniazd USB 3.0, widzę, że istnieją osobne pary transmisji i odbioru, jednak w przypadku USB 2.0 istnieje tylko jedna para pinów „danych”. W jaki sposób USB 2.0 zapewnia, że urządzenia nie komunikują się jednocześnie?
Patrząc na piny gniazd USB 3.0, widzę, że istnieją osobne pary transmisji i odbioru, jednak w przypadku USB 2.0 istnieje tylko jedna para pinów „danych”. W jaki sposób USB 2.0 zapewnia, że urządzenia nie komunikują się jednocześnie?
Odpowiedzi:
USB jest ściśle master-slave. Urządzenie nie transmituje, chyba że host każe mu transmitować.
Nawet tak zwany tryb „przerwania” jest naprawdę odpytywany: na przykład co 8 milisekund (lub mniej, jeśli masz mysz dla graczy), komputer pyta myszką „jaka jest twoja pozycja” i mysz odpowiada.
To samo, jeśli masz na przykład interfejs szeregowy USB. Kiedy interfejs odbiera dane na linii szeregowej, nie przesyła ich do komputera. Zamiast tego poczeka, aż komputer zainicjuje transakcję i poprosi o dane.
Ta strona zawiera dobre objaśnienie wymienianych pakietów. Zasadniczo należy pamiętać, że USB zostało zaimplementowane, aby umożliwić działanie najgłupszych i najtańszych urządzeń peryferyjnych, co oznacza, że większość inteligencji znajduje się w hoście, kontrolerze USB, systemie operacyjnym i sterownikach. Jest to bardzo widoczne podczas czytania specyfikacji.
Firewire (na przykład) ma zupełnie inną filozofię, jest znacznie potężniejszy, jest wielopanelowy, więc urządzenia mogą ze sobą rozmawiać bez pomocy hosta / mistrza. W rzeczywistości jest znacznie bliższy swojej filozofii do czegoś takiego jak Token Ring z izochronicznymi transferami uderzanymi w górę, niż do USB. Jednak „multi-master” oznacza, że wymaga on potężnego mikrokontrolera w urządzeniach, obsługującego złożony stos oprogramowania. Jest zatem droższy, a zatem ogranicza się do drogich produktów, takich jak kamery i szybkie obudowy dysków twardych. Mysz FireWire nie ma sensu, byłaby zbyt droga. To jeden z powodów niepowodzenia FireWire.
W środowisku USB urządzenia nie mogą komunikować się jednocześnie, ponieważ „rozmawiają” tylko wtedy, gdy host USB „pozwala” im rozmawiać. A host USB pozwala innemu urządzeniu na „rozmowę” tylko po zakończeniu protokołu sekwencyjnej transakcji z pierwszym urządzeniem. A urządzenia USB nie mają żadnych możliwości „samodzielnego” mówienia, w USB nie ma aktywnego mechanizmu przerwań. W skrócie, mechanizm wdrażania tej dyscypliny jest następujący.
Po podłączeniu urządzeń USB 2.0 host wylicza je, przypisując każdemu urządzeniu unikatowy adres.
Każda transakcja na magistrali jest inicjowana przez hosta USB.
Nagłówki każdej transakcji USB zawierają określony adres urządzenia. Nawet jeśli transakcje są rozgłaszane przez całe drzewo USB (w konkretnej instancji kontrolera hosta), tylko urządzenie z dopasowanym adresem zareaguje na transakcję i albo pobierze dane, albo odpowie na dane.
Link „partnerzy” wyśle następnie potwierdzenie w kierunku, od kogo dane zostaną pomyślnie odebrane. Cała transakcja odbywa się zgodnie z ustalonym protokołem z określoną sekwencją tokenów, limitami czasu i kodami korekcji błędów, aby zapewnić integralność transakcji.
Wszystkie inne urządzenia tylko nasłuchują i ignorują ruch, który nie jest do nich kierowany.
To wszystko, chodzi o interfejs „półdupleksowy”.