Как USB 2.0 избежал коллизий?


33

Глядя на контакты разъемов USB 3.0, я вижу, что существуют отдельные пары передачи и приема, однако для USB 2.0 существует только одна пара контактов «данных». Как USB 2.0 гарантирует, что устройства не обмениваются данными одновременно?


2
Вам также может быть интересно посмотреть на такие вещи, как CSMA / CD, как это решается в других контекстах
PlasmaHH

1
Отдельные пары передачи / приема не решают все конфликты. Представьте, что у вас есть Pendrive и модем, они оба хотят отправить некоторые данные на хост, поэтому они оба начинают передачу. Где? На той же паре: хост получит. Конфликт все еще там. Это не то, как работает USB, но именно так работает 10/100 Ethernet: у каждого направления есть своя пара, но индикатор «столкновения» на концентраторе продолжает мигать.
Agent_L

Ответы:


67

USB строго мастер-раб. Устройство не передает, если хост не скажет ему передать.

Даже так называемый режим «прерывания» - это действительно опрос: например, каждые 8 ​​миллисекунд (или меньше, если у вас есть игровая мышь), ПК спрашивает мышь «какова ваша позиция», и мышь отвечает.

То же самое, если у вас есть USB-последовательный интерфейс, например. Когда интерфейс получает данные по последовательной линии, он не передает их на ПК. Вместо этого он будет ждать, пока ПК инициирует транзакцию и запросит данные.

Эта веб-страница имеет хорошее объяснение о пакетах, которыми обмениваются. В основном, имейте в виду, что USB был реализован, чтобы позволить функционировать самым тупым и дешевым периферийным устройствам, что означает, что большая часть интеллекта находится на хосте, хост-контроллере USB, ОС и драйверах. Это очень очевидно при чтении спецификации.

У Firewire (например) совершенно другая философия, он гораздо более мощный, он мультимастерный, поэтому устройства могут общаться друг с другом без помощи хоста / мастера. На самом деле, по своей философии он намного ближе к тому, что напоминает Token Ring с изохронными передачами, чем к USB. Однако «мультимастер» означает, что для устройств требуется мощный микроконтроллер, работающий со сложным программным стеком. Поэтому он более дорогой и, следовательно, ограничивается дорогими продуктами, такими как видеокамеры и корпуса для быстрых жестких дисков. Мышь FireWire не имеет смысла, это будет слишком дорого. Это одна из причин, почему FireWire потерпел неудачу.


3
Отличное объяснение и очень подходящее сравнение с FireWire (и да, давайте построим сеть на основе токенов для ... реально, максимум 5 устройств на шине).
Маркус Мюллер

3
Это хороший ответ, но я думаю, что было бы более полным, если бы вы упомянули перечисление. Обнаружение, какие устройства подключены к динамической сети без возможности арбитража (как, например, сеть с несколькими хозяевами), является нетривиальной проблемой и во многих случаях определяет, почему USB не может использовать настоящую топологию шины.
Джон

Спасибо;) Я не знаю кровавых подробностей о перечислении со стороны принимающей стороны. Но, по мнению IMO, настоящая причина, по которой USB таков, заключается в том, что он был спроектирован в середине 1990-х годов, и в то время микроконтроллеры были дороже, чем сегодня, и путь к дешевым устройствам состоял в том, чтобы сделать их настолько глупыми, насколько это возможно, с минимальным объемом оперативной памяти и кода. насколько это возможно. Кроме того, это работает очень хорошо, это своего рода приятное место.
peufeu

5
Неверно, USB - это шина . У него просто другая топология (звезда), в отличие от более знакомой «линейной» шины. Все хост-транзакции USB 2.0 (HS) транслируются по всем сегментам звезды, поэтому они не сильно отличаются от «линейной» шины. Подобно линейной шине, все устройства видят активность шины почти одновременно. Разница лишь в том, что ответы устройств не видны некоторым другим устройствам, расположенным в разных ветвях.
Ale..chenski

2
@rahuldottech это неплохо, если он работает , но FireWire был гораздо менее надежным, чем USB, в частности WRT Plug & Play. А с USB вы можете легко подключить множество дисков к одному порту, используя дополнительный концентратор. Есть компромисс производительности, но надежность и легкость бьют.
оставил около

18

В структуре USB устройства не могут общаться одновременно, потому что они «разговаривают» только тогда, когда USB-хост «позволяет» им общаться. А USB-хост позволяет другому устройству «разговаривать» только после завершения протокола последовательной транзакции с первым устройством. А на USB-устройствах нет никаких средств для «самостоятельной связи», в USB нет активного механизма прерывания. Вкратце, механизм реализации этой дисциплины заключается в следующем.

После подключения устройств USB 2.0 хост перечисляет их, назначая уникальные адреса каждому устройству.

Каждая транзакция на шине инициируется USB-хостом.

Заголовки каждой транзакции USB содержат определенный адрес устройства. Даже когда транзакции транслируются по всему дереву USB (на конкретном экземпляре хост-контроллера), только устройство с соответствующим адресом будет отвечать на транзакцию и либо принимать данные, либо отвечать данными.

Затем ссылка «партнеры» отправит подтверждение в направлении того, кто успешно получил данные. Вся транзакция следует установленному протоколу с определенной последовательностью токенов, тайм-аутов и кодов исправления ошибок, чтобы обеспечить целостность транзакции.

Все остальные устройства просто слушают и игнорируют трафик, который не направлен на них.

Вот и все, это «полудуплексный» интерфейс.


1
Не знаком с протоколом USB, так как хост узнает, что устройство ответило правильно?
Дерек 朕 會 功夫

@Derek 朕 會 功夫, хост знает об этом, потому что это единственное устройство, которое должно отвечать, никто больше не будет отвечать. Транзакции USB 2.0 являются «атомарными», отложенных ответов нет, все зависит от времени ожидания. Отсутствие своевременного ответа (незавершенная транзакция) приведет к повторной попытке.
Ale..chenski

Чтобы продолжить, мой вопрос заключается в том, что, поскольку каждое устройство подключено к одной и той же шине, что мешает мне выдать себя за другое подключенное устройство?
Дерек 朕 會 功夫

7
@Derek 朕 會 功夫: Ничего. Вот почему вы не подключаете случайные USB-ключи, которые вы получаете с рынков вне улиц. Вы не можете доверять им.
Легкость гонок с Моникой

7
@Derek 朕 會 功夫, за исключением злонамеренных намерений, USB-устройство должно принимать адрес во время перечисления, а другое устройство будет иметь другой адрес, управляемый хостом. Это ничем не отличается от случая, когда несколько модулей памяти подключены к параллельной шине, но каждый модуль реагирует только на адрес декодера / выбор микросхемы. И если два USB-устройства будут случайно отвечать (скажем, хост облажался с назначением адреса), на шине будет беспорядок коллизий, и ни один пакет не пройдет CRC (который подключен к каждому USB-токену), и соответствующий порт будет быть отключен из-за массовых ошибок.
Ale..chenski
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.