Как работает USB Hub?

9

Я знаю ответ Google и ответ Википедии на вышеуказанный вопрос. Но у меня есть более конкретный вопрос под рукой. Концентраторы USB имеют много входных и портов и только один исходящий порт, поэтому я могу использовать, скажем, n-количество устройств вместе. Но я не понимаю, как один USB-порт может передавать данные с n-числом USB-портов?
Как он может отправлять разные данные на все порты USB одновременно?

*

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

*.

Аадитя Сахай
источник
1
Почти так же, как ваш сетевой маршрутизатор может подключить один порт LAN (Интернет) к нескольким устройствам. Каждой конечной точке (устройству USB) назначается адрес, и концентраторы просто направляют запросы от хоста на правильное устройство, отслеживая, какой адрес на каком порту. Для USB гораздо проще в том смысле, что есть только один мастер (порт хоста), который инициирует все транзакции.
Том Карпентер
@TomCarpenter Тогда как бы порт USB отправлял разные данные вместе?
Aaditya Sahay
1
Порт узла запрашивает конкретную конечную точку для разговора. Конечные точки общаются только по запросу хоста.
Том Карпентер
@TomCarpenter Но все они используются одновременно и не один за другим, а все вместе.
Aaditya Sahay
3
Помните, что шина USB может работать на скорости до 480 Мбит / с по USB 2.0. Хост всегда общается только с одной конечной точкой за раз, но он общается со всеми из них последовательно и переключается между ними так быстро, что вы не можете сказать. То же самое делают сети. «Эй, мышь на порту 1, скажите мне, если вы переехали. Хорошо, теперь клавиатура на порту 2, есть ли у вас какие-либо нажатия клавиш для отчета? Теперь вы там на порту 3, флэш-накопитель, сохраните эти данные для меня. Мне нужно поговорить с? Нет, хорошо, тогда наведите указатель мыши на порт 1, скажите, переехали ли вы ... "
Том Карпентер,

Ответы:

16

Это все связано с арбитражем. Любая система, которая требует подключения нескольких устройств, нуждается в определенном способе определения того, кому и когда следует разговаривать. Существуют разные схемы, как и следовало ожидать, в зависимости от приложения.

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


Теперь на USB. На самом деле это намного проще, чем работа в сети, потому что не все узлы сделаны равными. У вас есть два вида, хост и конечная точка. Существует только один хост, но может быть много конечных точек. В этом случае арбитраж намного проще, потому что только порт хоста может говорить по желанию. Конечные точки могут общаться только по запросу хоста , и хост всегда говорит только с одной конечной точкой за раз.

Для пакетов host-> endpoint концентраторы USB просто передают запрос от хоста всем конечным точкам. Поскольку все конечные точки имеют адрес, только тот, которому адресован запрос, будет что-либо делать с ним (например, отвечать), все остальные будут игнорировать пакет.

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


С точки зрения того, как хост определяет, какие устройства подключены, и как конечная точка получает их адрес, это достигается путем перечисления.

Все порты хоста и концентратора имеют нагрузочные резисторы (15 кОм) на линиях D + и D-. Они переводят линии данных этого порта в известное состояние, когда нет подключенного устройства, состояние, в котором порт вообще не будет отправлять данные по линиям D + / D-.

Когда устройство подключено, оно заявляет о себе, подключая линию передачи данных D + (полная скорость) или D- (низкая скорость) к VCC с использованием резистора 1,5 кОм. Это вызывает событие перечисления. Затем порт начнет процесс настройки устройства и назначения адреса. Если вы подключите два устройства одновременно, они будут перечислены по одному .

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

(*) Поскольку в каждый момент времени перечисляется только одно устройство, адрес 0 всегда будет уникальным для вновь подключенного устройства.


Тогда вы можете спросить: «Ну, как я могу одновременно говорить о нескольких устройствах?». Допустим, у вас есть мышь, клавиатура и флэш-накопитель, подключенные к одному USB-концентратору. Мы все знаем, что вы можете одновременно использовать мышь и клавиатуру, одновременно копируя файлы на флэш-накопитель и обратно, но если одновременно может общаться только одно устройство, как это возможно?

Ну, все сводится к тому, что несколько сотен миллисекунд, которые требуются вашему мозгу, чтобы заметить, что вы нажали клавишу, и ожидаете, что экран обновится, - вечность для компьютера. Интерфейс USB 2.0 может работать на скорости до 480 Мбит / с (USB 3.1 может работать на скорости до 10 Гбит / с!), Что означает, что, хотя хост в любой момент времени общается только с одной конечной точкой, он циклически переключается между ними, так что вы можете не говори, что делает это.

USB Host: «Эй, мышь на порту 1, скажите мне, если вы переехали. Хорошо, теперь клавиатура на порту 2, есть ли у вас какие-либо нажатия клавиш, чтобы сообщить? Теперь вы там на порту 3, флэш-накопитель, сохраните эти данные для меня. С кем-то еще, с кем мне нужно поговорить? Нет, хорошо, тогда наведите указатель мыши на порт 1, скажите, переехали ли вы ... "

Человек: «О, смотри, компьютер заметил, что я просто переместил мышь, нажал клавишу на клавиатуре и скопировал изображение на флэш-накопитель одновременно!»

Хост-устройство отслеживает, какие адреса конечных точек используются, и будет отправлять пакеты каждому из них последовательно или по мере необходимости (т. Е. Когда ОС запрашивает доступ к конкретному устройству). Таким образом, хотя не все это происходит одновременно, арбитраж настолько быстр, что компьютеры не могут понять разницу между людьми.

Том Карпентер
источник
2
Для добавления: USB-устройства (точнее, только «конечные точки прерывания») могут запрашивать опрос с определенным интервалом до 1 мс. Пока у вас нет сотен устройств ввода, вы никогда не заметите задержку.
Майкл
Как хост узнает, какие конечные точки подключены? Кроме того, похоже, что это не отвечает на первоначальный вопрос о концентраторах. Как они взаимодействуют в этом процессе? Как взаимодействуют в перечислении?
Йона Апплетри
1
@YonaAppletree перечисление. Хосты и концентраторы сканируют все свои порты на предмет подключения устройств - они обнаруживают нагрузочное сопротивление 1,5 кОм на D + (полная скорость) или D- (низкая скорость). Я добавлю некоторую информацию о том, как конечным точкам назначается адрес.
Том Карпентер
@YonaAppletree с точки зрения концентраторов во время работы, ответ уже говорит об этом. От хоста к конечной точке: «USB-концентраторы просто передают запрос от хоста ко всем конечным точкам». От конечной точки к хосту: «Поскольку в любой момент времени разрешено говорить только одной конечной точке, USB-концентратор будет просто маршрутизировать пакет от того порта, который отвечает»
Том Карпентер,
1

Краткий ответ: хост отправляет данные, адресованные конкретному устройству (которое было предварительно «перечислено»), по одной транзакции за раз, последовательно. Концентратор передает все пакеты на все устройства. Устройство отвечает только на транзакции, которые адресованы ему. Это все, что касается устройств HS.

Для устройств FS и LS процесс немного сложнее. Он использует «трансляторы транзакций», которые встроены в каждый концентратор для каждого порта и которые переводят так называемые «разделенные транзакции» в трафик LS или FS.

Ale..chenski
источник
А как насчет USB 3?
Jbarlow
Концентраторы USB3 более интеллектуальны для высокоскоростной связи и используют явную маршрутизацию к устройству / конечным точкам. Раздел USB2 остается прежним. См. Раздел 3.1 «Архитектурная сводка» последних спецификаций USB3.1
Ale..chenski,