Глядя на контакты разъемов USB 3.0, я вижу, что существуют отдельные пары передачи и приема, однако для USB 2.0 существует только одна пара контактов «данных». Как USB 2.0 гарантирует, что устройства не обмениваются данными одновременно?
Глядя на контакты разъемов USB 3.0, я вижу, что существуют отдельные пары передачи и приема, однако для USB 2.0 существует только одна пара контактов «данных». Как USB 2.0 гарантирует, что устройства не обмениваются данными одновременно?
Ответы:
USB строго мастер-раб. Устройство не передает, если хост не скажет ему передать.
Даже так называемый режим «прерывания» - это действительно опрос: например, каждые 8 миллисекунд (или меньше, если у вас есть игровая мышь), ПК спрашивает мышь «какова ваша позиция», и мышь отвечает.
То же самое, если у вас есть USB-последовательный интерфейс, например. Когда интерфейс получает данные по последовательной линии, он не передает их на ПК. Вместо этого он будет ждать, пока ПК инициирует транзакцию и запросит данные.
Эта веб-страница имеет хорошее объяснение о пакетах, которыми обмениваются. В основном, имейте в виду, что USB был реализован, чтобы позволить функционировать самым тупым и дешевым периферийным устройствам, что означает, что большая часть интеллекта находится на хосте, хост-контроллере USB, ОС и драйверах. Это очень очевидно при чтении спецификации.
У Firewire (например) совершенно другая философия, он гораздо более мощный, он мультимастерный, поэтому устройства могут общаться друг с другом без помощи хоста / мастера. На самом деле, по своей философии он намного ближе к тому, что напоминает Token Ring с изохронными передачами, чем к USB. Однако «мультимастер» означает, что для устройств требуется мощный микроконтроллер, работающий со сложным программным стеком. Поэтому он более дорогой и, следовательно, ограничивается дорогими продуктами, такими как видеокамеры и корпуса для быстрых жестких дисков. Мышь FireWire не имеет смысла, это будет слишком дорого. Это одна из причин, почему FireWire потерпел неудачу.
В структуре USB устройства не могут общаться одновременно, потому что они «разговаривают» только тогда, когда USB-хост «позволяет» им общаться. А USB-хост позволяет другому устройству «разговаривать» только после завершения протокола последовательной транзакции с первым устройством. А на USB-устройствах нет никаких средств для «самостоятельной связи», в USB нет активного механизма прерывания. Вкратце, механизм реализации этой дисциплины заключается в следующем.
После подключения устройств USB 2.0 хост перечисляет их, назначая уникальные адреса каждому устройству.
Каждая транзакция на шине инициируется USB-хостом.
Заголовки каждой транзакции USB содержат определенный адрес устройства. Даже когда транзакции транслируются по всему дереву USB (на конкретном экземпляре хост-контроллера), только устройство с соответствующим адресом будет отвечать на транзакцию и либо принимать данные, либо отвечать данными.
Затем ссылка «партнеры» отправит подтверждение в направлении того, кто успешно получил данные. Вся транзакция следует установленному протоколу с определенной последовательностью токенов, тайм-аутов и кодов исправления ошибок, чтобы обеспечить целостность транзакции.
Все остальные устройства просто слушают и игнорируют трафик, который не направлен на них.
Вот и все, это «полудуплексный» интерфейс.