W jaki sposób USB 2.0 uniknął kolizji?

33

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?

VortixDev
źródło
2
Możesz być także zainteresowany spojrzeniem na takie rzeczy jak CSMA / CD, czyli jak to jest rozwiązywane w innych kontekstach
PlasmaHH
1
Oddzielne pary transmisji / odbioru nie rozwiązują wszystkich konfliktów. Wyobraź sobie, że masz pendrive i modem. Obaj chcą wysłać dane do hosta, więc obaj zaczynają transmisję. Gdzie? Na tej samej parze: host odbiera. Konflikt wciąż istnieje. Nie tak działa USB, ale dokładnie tak działa 10/100 Ethernet: każdy kierunek ma swoją parę, ale lampka „kolizji” na hubie wciąż miga.
Agent_L,

Odpowiedzi:

67

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.

peufeu
źródło
3
Doskonałe wyjaśnienie i bardzo trafne porównanie z FireWire (i tak, zbudujmy sieć arbitrażową opartą na tokenach dla ... realistycznie, maksymalnie 5 urządzeń na magistrali).
Marcus Müller,
3
To dobra odpowiedź, ale myślę, że byłaby bardziej kompletna, gdybyś wspomniał o wyliczeniu. Odkrycie, które urządzenia są podłączone do sieci dynamicznej bez możliwości arbitrażu (jak na przykład w przypadku sieci wielostanowiskowej), jest nietrywialnym problemem i pod wieloma względami określa, dlaczego USB nie może używać prawdziwej topologii magistrali.
Jon
Dzięki;) Nie znam jednak krwawych szczegółów dotyczących wyliczenia ze strony hosta. Ale IMO jest prawdziwym powodem, dla którego USB jest taki, że został zaprojektowany w połowie lat 90. XX wieku, a mikrokontrolery były w tamtych czasach droższe niż dziś, a sposobem na tanie urządzenia było uczynienie ich tak głupimi, jak to możliwe, przy minimalnej ilości pamięci RAM i kodu jak to możliwe. Poza tym działa bardzo dobrze, trafia w dobre miejsce.
peufeu
5
Niepoprawnie, USB to magistrala . Ma po prostu inną topologię (gwiazdę) w przeciwieństwie do bardziej znanej „liniowej” magistrali. Wszystkie transakcje hosta USB 2.0 (HS) są transmitowane we wszystkich segmentach gwiazdy, więc nie różni się niczym od szyny „liniowej”. Podobnie jak magistrala liniowa, wszystkie urządzenia niemal natychmiast widzą aktywność magistrali. Jedyną różnicą jest to, że odpowiedzi urządzeń nie są widoczne dla niektórych innych urządzeń, które siedzą na różnych gałęziach.
Ale..chenski
2
@rahuldottech jest całkiem fajny, jeśli działa , ale FireWire był znacznie mniej niezawodny niż USB, w szczególności WRT plug & play. A dzięki USB możesz dość łatwo podłączyć wiele dysków do jednego portu za pomocą dodatkowego koncentratora. Występuje kompromis między wydajnością, ale niezawodność i łatwość przeważają.
leftaroundabout
18

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”.

Ale..chenski
źródło
1
Nie znasz protokołu USB, więc skąd host wie, że właściwe urządzenie zareagowało?
Derek 朕 會 功夫
@Derek 朕 會 功夫, host wie o tym, ponieważ jest to jedyne urządzenie, które ma odpowiedzieć, nikt inny nie odpowie. Transakcje USB 2.0 są „atomowe”, nie ma odroczonych odpowiedzi, wszystko zależy od limitu czasu. Brak odpowiedzi na czas (niedokończona transakcja) spowoduje jej ponowną próbę.
Ale..chenski
Kontynuując, moje pytanie brzmi: skoro każde urządzenie jest podłączone do tej samej magistrali, co powstrzymuje mnie przed udawaniem, że jestem innym urządzeniem, które również jest podłączone?
Derek 朕 會 功夫
7
@Derek 朕 會 功夫: Nic. Dlatego nie podłączasz losowych kluczy USB, które otrzymujesz z rynków pozagiełdowych. Nie możesz im ufać.
Wyścigi lekkości z Moniką
7
@Derek 朕 會 功夫, pomijając złośliwe zamiary, urządzenie USB musi zaakceptować adres podczas wyliczania, a inne urządzenie będzie miało inny adres, wszystkie kontrolowane przez host. Nie inaczej jest, gdy kilka modułów pamięci jest podłączonych do równoległej magistrali, ale każdy moduł odpowiada tylko na wybór dekodera / układu scalonego. A jeśli dwa urządzenia USB przypadkowo zareagują (powiedzmy, host spieprzył z przypisaniem adresu), na magistrali wystąpi bałagan i żaden pakiet nie przejdzie CRC (który jest dołączony do każdego tokena USB), a odpowiedni port będzie być wyłączone z powodu ogromnych błędów.
Ale..chenski