Круглосуточная скорая ветеринарная помощь.
Спецификация USB позволяет к одной шине подключать устройства, работающие на существенно различающихся скоростях передачи. Для их нормального сосуществования в плане распределения времени микрокадров для каждой из скоростей приняты соответствующие ограничения на максимальную длину поля данных пакета:
Приемопередатчики (да и соединительные кабели) низкоскоростных устройств не способны работать с сигналами полной скорости, на которой передаются все маркеры SOF и пакеты обмена с полноскоростными устройствами. Поэтому хаб USB не транслирует трафик на свои нисходящие порты, к которым подключены низкоскоростные устройства, до тех пор, пока хост-контроллер не передаст специального маркера — преамбулы низкоскоростного обмена (PRE). Этот маркер игнорируется всеми устройствами, кроме хабов. Пакетом-преамбулой хост-контроллер гарантирует, что следующий пакет будет им передан на низкой скорости. Этим пакетом будет маркер, определяющий тип транзакции с LS-устройством, а в транзакциях вывода — и пакет данных (перед которым требуется своя преамбула). Хаб разрешает транслировать на свой нисходящий порт с LS-устройством только один пакет, следующий за преамбулой; по концу пакета (увидев EOP на низкой скорости) он снова запрещает трансляцию. Чтобы хаб успел переключить режим своего приемопередатчика, между преамбулой и последующим пакетом вводится зазор (4 битовых интервала FS). Для ответа LS-устройства никаких преамбул не нужно — хабы способны прозрачно передавать восходящий трафик на обеих скоростях (LS и FS). Хост-контроллер, естественно, должен принимать пакеты и на FS, и на LS. Очевидно, что низкоскоростные транзакции расходуют время кадра весьма неэффективно, но в USB 1.x с этим мирятся ради возможности подключения дешевых устройств и упрощения хабов, которые являются просто повторителями сигналов. Заметим, что маркеры SOF не транслируются на низкоскоростные порты, так что изохронный обмен, для которого они необходимы, для LS-устройств невозможен и не поддерживается.
Эффективное сосуществование трех скоростей в USB 2.0 реализуется сложнее и обходится дороже. Во-первых, хост-контроллер USB 2.0 содержит фактически два контроллера — EHC, работающий только на высокой скорости, и контроллеркомпаньон (возможно, и не один) USB 1.x (UHC или OHC) для полной и низкой скорости. Корневой хаб может иметь равноправные порты, но в процессе автоконфигурирования, в зависимости от свойств подключенного к нему устройства (или хаба), каждый порт соединяется с соответствующим контроллером. Существуют системные платы с фиксированным распределением портов по контроллерам: часть портов отводится под USB 2.0 и подключена к EHC, часть — под USB 1.1 и подключена к UHC или OHC. Ради повышения пропускной способности применяют и индивидуальные контроллеры (UHC или OHC) для каждого порта USB 1.x.
Во-вторых, хабы USB 2.0 имеют более сложную структуру: кроме повторителя он имеет еще и транслятор транзакций. Когда восходящий и нисходящие порты хаба работают на одинаковой скорости (FS или HS), хаб работает в режиме повторителя. При этом транзакция с устройством, подключенным к хабу, занимает весь канал от хост-контроллера до устройства на все время своего выполнения. Если же к порту хаба USB 2.0, работающего на HS, подключается устройство или хаб 1.1, то применяются расщепленные транзакции. Здесь по части канала от хоста до хаба (его транслятора транзакций) обмен проходит на скорости HS, а между транслятором транзакций и устройством (или хабом) USB 1.x обмен идет уже на его «родной» скорости FS или LS. Эти обмены разнесены во времени, между ними могут вклиниваться любые транзакции на высокой скорости (в том числе и расщепленные). Таким образом, расщепленные транзакции позволяют не расходовать попусту пропускную способность высокоскоростной шины: транзакции с хабом на высокой скорости занимают в 40 (для FS) и даже в 320 (для LS) раз меньше времени шины, чем транзакции с самим целевым устройством. От старых (USB 1.x) устройств и хабов все тонкости расщепленных транзакций скрываются, чем и обеспечивается обратная совместимость.
Порт хаба имеет возможность аппаратно определить, какую скорость поддерживает подключенное устройство. Все HS-устройства по включению работают в режиме FS, и только после взаимного согласования с портом хаба перейдут в режим HS. Если HS-устройство подключается к хабу USB 1.x, который этого согласования не поддерживает, устройство останется в режиме FS, возможно, с усеченной функциональностью. В системе с USB 2.0 у устройства можно спросить (запросом дескрипторов), что изменится в его функциональности, если его подключить на другой скорости (изменив топологию соединений).
Вполне понятно, что устройство USB 2.0 сможет реализовать высокую скорость, только если по пути от него к хост-контроллеру (тоже 2.0) будут встречаться только хабы 2.0. Если это правило нарушить и между ним и контроллером 2.0 окажется старый хаб, то связь может быть установлена только в режиме FS. Если такая скорость устройство и клиентское ПО устроит (к примеру, для принтера и сканера это выльется только в большее время ожидания пользователя), то подключенное устройство работать будет, но появится сообщение о неоптимальной конфигурации соединений. По возможности ее (конфигурацию) следует исправить, благо переключения кабелей USB можно выполнять на ходу. Устройства и ПО, критичные к полосе пропускания шины, в неправильной конфигурации работать откажутся и категорично потребуют переключений. Если же хост-контроллер старый, то все преимущества USB 2.0 окажутся недоступными пользователю. В этом случае придется менять хост-контроллер (менять системную плату или приобретать PCI-карту контроллера USB 2.0).
Контроллер и хабы USB 2.0 позволяют повысить суммарную пропускную способность шины и для старых устройств. Если устройства FS подключать к разным портам хабов USB 2.0 (включая и корневой), то для них возможно повышение суммарной пропускной способности шины USB по сравнению с 12 Мбит/с во столько раз, сколько используется портов высокоскоростных хабов. Конечно, при этом суммарная пропускная способность для всех устройств, включая и HS-устройства, не может превышать общую пропускную способность HS-шины (нужно учитывать и накладные расходы). Кроме того, нужно учитывать архитектурные особенности хост-контроллера и хабов. Хост-контроллер может умножать пропускную способность FS/LS на число своих встроенных контроллеров USB 1.x. «Умножительные способности» хаба зависят от реализации его транслятора транзакций.