Я знаю ответ Google и ответ Википедии на вышеуказанный вопрос. Но у меня есть более конкретный вопрос под рукой. Концентраторы USB имеют много входных и портов и только один исходящий порт, поэтому я могу использовать, скажем, n-количество устройств вместе. Но я не понимаю, как один USB-порт может передавать данные с n-числом USB-портов?
Как он может отправлять разные данные на все порты USB одновременно?
*
смоделировать эту схему - схема, созданная с использованием CircuitLab
*.
Ответы:
Это все связано с арбитражем. Любая система, которая требует подключения нескольких устройств, нуждается в определенном способе определения того, кому и когда следует разговаривать. Существуют разные схемы, как и следовало ожидать, в зависимости от приложения.
Типичный пример - в сети у нас много узлов, которые все общаются друг с другом. Это выполняется каждым узлом, имеющим адрес (например, 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 Гбит / с!), Что означает, что, хотя хост в любой момент времени общается только с одной конечной точкой, он циклически переключается между ними, так что вы можете не говори, что делает это.
Хост-устройство отслеживает, какие адреса конечных точек используются, и будет отправлять пакеты каждому из них последовательно или по мере необходимости (т. Е. Когда ОС запрашивает доступ к конкретному устройству). Таким образом, хотя не все это происходит одновременно, арбитраж настолько быстр, что компьютеры не могут понять разницу между людьми.
источник
Краткий ответ: хост отправляет данные, адресованные конкретному устройству (которое было предварительно «перечислено»), по одной транзакции за раз, последовательно. Концентратор передает все пакеты на все устройства. Устройство отвечает только на транзакции, которые адресованы ему. Это все, что касается устройств HS.
Для устройств FS и LS процесс немного сложнее. Он использует «трансляторы транзакций», которые встроены в каждый концентратор для каждого порта и которые переводят так называемые «разделенные транзакции» в трафик LS или FS.
источник