Як USB 2.0 уникнув зіткнень?


33

Дивлячись на штифти USB 3.0 ємностей, я бачу, що існують окремі пари передачі та прийому, однак для USB 2.0 є лише одна контактна пара "даних". Як USB 2.0 гарантує, що пристрої не спілкуються одночасно?


2
Можливо, вам також буде цікаво переглянути такі речі, як CSMA / CD, як це вирішується в інших контекстах
PlasmaHH

1
Окремі пари передачі / прийому не вирішують усіх конфліктів. Уявіть, що у вас є маятник і модем, вони обидва хочуть надіслати деякі дані хосту, тому вони обоє починають передавати. Де? На одній і тій же парі: хост отримувати. Конфлікт все ще є. USB не працює так, але саме так працює 10/100 Ethernet: у кожному напрямку є своя пара, але світло "зіткнення" на маточині постійно блимає.
Agent_L

Відповіді:


67

USB суворо-ведучий. Пристрій не передає, якщо господар не каже йому передавати.

Навіть так званий режим «переривання» справді опитується: наприклад, кожні 8 мілісекунд (або менше, якщо у вас є геймерська миша), ПК запитує мишу «яке ваше становище», а миша відповідає.

Те саме, якщо у вас є, наприклад, USB-послідовний інтерфейс. Коли інтерфейс отримує дані по послідовної лінії, він не передаватиме їх на ПК. Натомість він зачекає, коли ПК ініціює транзакцію та запитає дані.

На цій веб-сторінці є гарне пояснення щодо пакетів, які обмінюються. В основному, майте на увазі, що USB був реалізований для того, щоб дозволити найдешевшій та найдешевшій периферійній пристрої функціонувати, а це означає, що більша частина інтелекту знаходиться в хості, хості usb-контролері, ОС та драйверах. Це дуже очевидно при читанні специфікації.

Firewire (наприклад) має зовсім іншу філософію, він набагато потужніший, він є багатопроменевим, тому пристрої можуть спілкуватися один з одним без допомоги хоста / майстра. Насправді вона набагато наближається до своєї філософії до чогось подібного токенового кільця з ізохронними передачами, ляпаними зверху, ніж до USB. Однак "мультимайстер" означає, що йому потрібен потужний мікроконтролер у пристроях, який працює зі складним стеком програмного забезпечення. Тому вона дорожча і, таким чином, обмежується дорогими продуктами, такими як відеокамери та корпуси для швидкого жорсткого диска. Миша firewire не має сенсу, це було б занадто дорого. Це одна з причин, чому FireWire вийшов з ладу.


3
Відмінне пояснення та дуже придатне порівняння з FireWire (і так, давайте побудуємо арбітражну мережу на основі лексем для ... реально, щонайбільше 5 пристроїв на шині).
Маркус Мюллер

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

Дякую;) Я не знаю гірських деталей про перерахування з боку господаря. Але справжня причина IMO в USB полягає в тому, що він був розроблений в середині 1990-х, і в той час мікроконтролери були дорожчі, ніж сьогодні, і шлях до дешевих пристроїв полягав у тому, щоб зробити їх максимально німими з якомога меншою кількістю ОЗУ та коду як можна. Крім того, вона працює дуже добре, вона начебто потрапила на солодке місце.
peufeu

5
Неправильно, USB - це шина . Він просто має іншу топологію (зірку) на противагу більш звичній "лінійній" шині. Усі транзакції з хостом USB 2.0 (HS) транслюються по всіх сегментах зірки, тому він не сильно відрізняється від "лінійної" шини. Подібно до лінійної шини, всі пристрої бачать активність шини майже одразу. Єдина відмінність полягає в тому, що відповіді пристроїв не видно на деяких інших пристроях, які сидять на різних гілках.
Але..ченський

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 "атомні", відкладених відповідей немає, все залежить від тайм-ауту. Жодна своєчасна відповідь (незавершена транзакція) не призведе до повторної спроби її.
Але..ченський

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

7
@Derek 朕 會 功夫: Нічого. Ось чому ви не підключаєте до випадкових USB-ключів, які ви отримуєте з позашляхових ринків. Ви не можете їм довіряти.
Гонки легкості з Монікою

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