Детальная информация Алматис купить у нас на сайте. Ознакомьтесь с массажист эстетист.
Хабы USB относятся к стандартным устройствам с кодами класса 09 подкласса 00. Код протокола характеризует транслятор транзакций (для хабов 2.0), он зависит от типа, текущей скорости работы и структуры хаба:
Эти коды классификации хаб сообщает в своих дескрипторах устройства и интерфейса.
Кроме стандартных дескрипторов хаб имеет специальный классовый дескриптор (hub class descriptor), содержание которого раскрывает таблица ниже.
Смещение | Поле | Длина | Содержание |
0 | bDescLength | 1 | Длина дескриптора (зависит от числа портов, 9 для хабов с числом нисходящих портов 1–7) |
1 | bDescriptorType | 1 | Тип (29h — дескриптор хаба) |
2 | bNbrPorts | 1 | Число нисходящих портов |
3 | wHubCharacteristics | 2 | Характеристики хаба: Биты [1:0] — режим управления питанием портов: 00 — для всех портов одновременно (Ganged power switching), 01 — селективное, 1x — нет управления (для хабов 1.0); Бит 2 — признак комбинированного устройства: 1 — к некоторым портам хаба всегда подключены встроенные устройства; Биты [4:3] — Режим защиты от перегрузки по питанию: 00 — глобальная защита, 01 — индивидуальная защита портов, 1x — нет защиты (для хабов, питающихся от шины); Биты [6:5] — характеристика быстродействия транслятора транзакций (TT): 00 — TT делает межкадровый зазор на нисходящих портах до 8 FS bt, 01 — до 16, 10 — до 24, 11 — до 32; Бит 7 — наличие управляемых индикаторов состояния нисходящих портов; Биты [15:8] — резерв (0); в USB 1.x резервными были биты [15:5] |
5 | bPwrOn2PwrGood | 1 | Время установления нормального питания на нисходящих портах с момента команды включения (в 2 мс-интервалах) |
6 | bHubContrCurrent | 1 | Максимальный ток, потребляемый контроллером хаба (мА) |
7 | DeviceRemovable | ? | Признаки возможности отсоединения устройств от портов. Бит 0 не используются, биты 1…n соответствуют портам 1…n (0 — отсоединяемое устройство, 1 — нет). Длина поля (в байтах) зависит от числа портов, в «лишних» битах — нули |
? | PortPwrCtrlMask | ? | Маска управления питанием портов (в USB 1.x), единичное значение бита означает, что данный порт не подчиняется общей команде управления питания. В USB 2.0 все биты единичные. Связь битов с портами как и в предыдущем поле |
Хаб имеет всего один интерфейс, в котором используется (кроме нулевой) только одна конечная точка типа InterruptIN для опроса признаков изменения состояния портов (Status Change Endpoint) с максимально возможным периодом опроса (bInterval = FFh). С этой точки хост получает информацию в виде битовой карты, размер которой (в байтах) зависит от числа портов хаба. Самый младший бит карты (бит 0) несет признак смены состояния хаба (1 — есть смена), бит 1 — смены состояния порта-1, бит 2 — порта-2 и т. д. Обычно эти сообщения однобайтные, поскольку более 7 портов в хабе встречается редко. Если изменения состояния портов не произошло, то хаб на опрос отвечает NAK’ом (не передает данных). По получении признака изменения состояния хаба хост выполняет запрос чтения состояния хаба (GetHubStatus), по получении признака изменения состояния порта — запрос чтения состояния этого порта (GetPortStatus).
Хаб поддерживает все стандартные запросы к устройствам, кроме управления интерфейсом (он всего один) и установки метки времени (у хаба нет изохронных точек). Кроме того, он должен поддерживать классовые запросы, определенные для хабов.
Запрос | bmRequestType | bRequest |
ClearHubFeature | 00100000B | 1 |
ClearPortFeature | 00100011B | 1 |
ClearTTBuffer | 00100011B | 8 |
GetHubDescriptor | 10100000B | 6 |
GetHubStatus | 10100000B | 0 |
GetPortStatus | 10100011B | 0 |
ResetTT | 00100011B | 9 |
SetHubDescriptor | 00100000B | 7 |
SetHubFeature | 00100000B | 3 |
SetPortFeature | 00100011B | 3 |
GetTTState | 10100011B | 10 |
StopTT | 00100011B | 11 |
Для опроса состояния хаба и каждого его нисходящего порта имеются специальные (классовые) запросы GetHubStatus и GetPortStatus (wLength=4). Ответом на GetHubStatus будет слово состояния хаба wHubStatus, за которым следует слово изменения состояния wHubChange. В запросе GetPortStatus в поле wIndex указывается номер порта, ответом на него будет слово состояния порта wPortStatus, за которым следует слово изменения состояния порта wPortChange. Форматы этих слов приведены в следующей таблице.
Бит | Имя признака | Назначение |
Слово состояния хаба wHubStatus | ||
0 | Hub_Local_Power | Признак состояния локального источника питания хаба: 0 — локальное питание в норме, 1 — потеряно локальное питание. |
1 | Hub_Over_Current | Перегрузка по питанию (только для хабов с общей защитой для всех портов): 1 — сработала общая цепь защиты, 0 — нет |
[2:15] | Резерв | (0) |
Слово изменения состояния wHubChange | ||
0 | C_Hub_Local_Power | Признак смены состояния локального питания: 1 — была смена, 0 — нет |
1 | C_Hub_Over_Current | Признак смены состояния общей перегрузки: 1 — была смена, 0 — нет |
[2:15] | Резерв | (0) |
Слово состояния порта wPortStatus | ||
0 | Port_Connection | Текущее состояние подключения к порту: 1 — подключено устройство, 0 — нет |
1 | Port_Enable | Состояние разрешения порта: 0 — disabled, 1 — enabled. Устанавливается только программно хостом, сбрасывается программно и аппаратно по ошибке устройства |
2 | Port_Suspend | Состояние приостановки порта: 0 — не приостановлен, 1 — приостановлен или находится в процессе возобновления. Устанавливается только программно, сбрасывается программно или сигналом удаленного пробуждения от этого порта |
3 | Port_Over_Current | Перегрузка порта по питанию (только при селективной защите портов): 1 — защита сработала, 0 — нет |
4 | Port_Reset | Сброс порта: 1 — подается сигнал Reset, 0 — нет. Устанавливается программно, сбрасывается аппаратно хабом по окончании сигнализации |
[5:7] | Резерв | (0) |
8 | Port_Power | Состояние питания порта (отражает реальную ситуацию только при селективном управлении питанием): 0 — порт не запитан, 1 — порт не обесточен селективно |
9 | Port_Low_Speed | Признак низкой скорости: 1 — обнаружено подключение LS-устройства, 0 — подключенное устройство (если есть) либо FS, либо HS (смотря по биту 10) |
10 | Port_High_Speed | Признак высокой скорости: 1 — с устройством согласована высокая скорость, 0 — нет |
11 | Port_Test | Состояние тестирования порта: 1 — порт в режиме тестирования, 0 — нет (устанавливается программно) |
12 | Port_Indicator | Управление индикатором порта: 0 — индикатор управляется аппаратно, 1 — программно |
[13:15] | Резерв | (0) |
Слово изменения состояния порта wPortChange | ||
0 | C_Port_Connection | Изменение состояние подключения устройства: 1 — состояние сменилось, 1 — нет |
1 | C_Port_Enable | Изменение состояния разрешения порта, устанавливается в 1 при автоматическом запрещении работы порта из-за обнаруженной ошибки |
2 | C_Port_Suspend | Изменение состояния приостановки устройства, устанавливается в 1 при завершении возобновления работы устройства (Resume complete) |
3 | C_Port_Over_Current | Изменение состояния индивидуальной защиты порта: 1 — состояние изменилось, 0 — нет (или нет индивидуальной защиты) |
4 | C_Port_Reset | Изменение состояния сброса порта: 0 — нет изменений, 1 — сброс завершен |
[5:15] | Резерв | (0) |
Управление свойствами хаба (запросы SetHubFeature и ClearHubFeature) и каждого из нисходящих портов (запросы SetPortFeature и ClearPortFeature) обеспечивают функции, приведенные в таблице, которая расположена ниже.
Имя свойства | Номер(wValue) | Запрос установки | Запрос сброса |
Свойства хаба | SetHubFeature | ClearHubFeature | |
C_Hub_Local_Power | 0 | Установка (для диагностических целей) одноименного признака в слове изменения состояния хаба | Сброс одноименного признака в слове изменения состояния хаба подтверждение, что хост его воспринял) |
C_Hub_Over_Current | 1 | То же | То же |
Свойства порта | SetPortFeature | ClearPortFeature | |
Port_Connection | 0 | Запрос не используется, хаб не выполняет никаких операций | |
Port_Enable | 1 | Перевод запитанного порта в состояние Enabled | Перевод порта в состояние Disabled |
Port_Suspend | 2 | Приостановка порта | Генерация возобновления на приостановленном порте |
Port_Over_Current | 3 | Запрос не используется, хаб не выполняет никаких операций | |
Port_Reset | 4 | Сброс и перевод запитанного порта в состояние Enabled | Запрос не используется, хаб не выполняет никаких операций |
Port_Power | 8 | Подача питания на порт | Снятие питания с порта |
Port_Low_Speed | 9 | Запрос не используется, хаб не выполняет никаких операций | |
C_Port_Connection | 16 | Сброс одноименного признака в слове изменения состояния порта (подтверждение, что хост его воспринял) | |
C_Port_Enable | 17 | То же | |
C_Port_Suspend | 18 | То же | |
C_Port_Over_Current | 19 | То же | |
C_Port_Reset | 20 | То же | |
Port_Test | 21 | Перевод порта в тестовый режим (только для портов в состоянии Disabled, Disconnected или Suspended) | Нет, выход из теста только по сбросу хаба |
Port_Indicator | 22 | Программное управление индикатором порта | Отключение программного управления индикатором порта |
В запросе установки тестового режима в младшем байте поля wIndex задается номер порта, в старшем — селектор, определяющий выполняемый тест.
В запросе установки управления индикатором в младшем байте поля wIndex задается номер порта, в старшем — селектор, определяющий режим индикации: 0 — автоматическая работа индикатора, 1 — принудительно янтарный, 2 — принудительно зеленый, 3 — принудительно отключен, 4–FFh — резерв. Выбор нулевого селектора эквивалентен сбросу признака управления индикатором.
Для хабов с протоколами типа 1 и 2 имеются запросы управления транслятором транзакций (TT), используемые в основном в отладочных целях:
Периодические транзакции (изохронные и прерывания) критичны к времени выполнения, что накладывает отпечаток на их исполнение в расщепленном виде.
Изохронные транзакции на FS синхронизируются с кадрами (1 мс), в то время как на HS — с микрокадрами (125 мкс). Поскольку за время микрокадра на полной скорости может быть передано всего 187,5 байт данных, при расщеплении транзакций на стороне FS можно без ущерба равномерности уменьшить размер передаваемого пакета за один микрокадр (ради облегчения планирования загрузки микрокадров). Исходя из этого, одна транзакция FS, несущая до 1023 байт данных, фрагментируется — разбивается на 1–6 транзакций HS, несущих до 188 байт данных каждая.
Проще всего расщепляются транзакции изохронного вывода, поскольку здесь не требуется получения от устройства ответа или данных. Одна FS-транзакция изохронного вывода реализуется в виде цепочки из 1–6 HS-транзакций, в каждой из которых после маркера SS посылается маркер OUT, адресующийся к конечной точке целевого устройства, и пакет DATA0 с очередным фрагментом данных. Здесь (и только здесь) в маркере SS поля S (Start) и E (End) определяют местоположение пакета данных в полноскоростной транзакции: [S:E] = 10 — стартовый, [S:E] = 01 — последний, [S:E] = 00 — промежуточный, [S:E] = 11 — в пакете все данные транзакции.
Транслятор транзакций, успешно приняв стартовый пакет (с единичным битом S), может начинать транзакцию вывода, полагая, что последующие данные будут хостом доставлены своевременно. Отработав пакет с признаком последнего фрагмента, транслятор формирует нормальное окончание пакета (CRC код и EOP). Если промежуточные фрагменты приходят с ошибкой, транслятору придется «испортить» выводимый пакет, введя ошибку вставки бит. Таким образом, целевой приемник данные этой транзакции проигнорирует, как некорректные. Транслятор транзакций после приема фрагмента с ошибкой будет игнорировать все расщепленные транзакции, адресованные к данной конечной точке, у которых нет признака начального фрагмента. Последующую транзакцию со стартовым фрагментом транслятор будет отрабатывать как новую.
Транзакции изохронного ввода расщепляются несколько сложнее, поскольку требуют передачи к хосту данных, которые от целевого устройства будут получены с задержкой. Одна FS-транзакция изохронного ввода реализуется в виде цепочки, состоящей из транзакции запуска, содержащей маркер SS и маркер IN, и нескольких транзакций завершения, в каждой из которых за маркером CS следует тот же маркер IN и ожидается от хаба пакет с очередным фрагментом данных или пакет квитирования. Здесь также данные одной FS-транзакции разбиваются на 1–6 фрагментов (HS-транзакций). Данные всех фрагментов, кроме последнего, возвращаются пакетами MDATA, вынуждающими повторить транзакцию завершения в следующем микрокадре. Последний фрагмент приходит в пакете DATA0. Вместо пакета данных контроллер может ответить пакетом NYET, если к концу микрокадра он принял от целевого устройства менее трех байт данных. Хост в этом случае повторит транзакцию завершения в следующем микрокадре, если текущий микрокадр не является последним в кадре. Ответ NYET в последнем микрокадре кадра трактуется хостом как ошибка, по которой транзакцию следует завершить и сообщить об этом клиентскому драйверу. Если транслятор транзакций принимает от целевого устройства данные с ошибкой, он ответит пакетом ERR, что тоже вынудит хост прекратить транзакцию с сообщением об ошибке.
Транзакции прерываний имеют небольшой размер пакета (до 8 байт данных на LS и до 64 на FS), поэтому для них не нужна фрагментация вывода, а их выполнение укладывается в 1–2 микрокадра.
Транзакция запуска вывода по прерыванию (Interrupt OUT) состоит из последовательности маркеров SS и OUT, за которыми следует пакет данных DATA0 или DATA1. Транзакция завершения состоит из последовательности маркеров CS и OUT, на которую транслятор отвечает пакетом подтверждения:
Транзакция запуска ввода по прерыванию (InterruptIN) состоит из последовательности маркеров SS и IN. Данные от устройства хост получит в пакетах 1–2 транзакций завершения. Транзакция завершения состоит из последовательности маркеров CS и IN, на которую транслятор отвечает пакетом данных или подтверждения (NAK, NYET, STALL или ERR с вышеописанными значениями). Если транслятор принял еще не все данные от целевого устройства, они придут в пакете MDATA (если принято менее трех байт, транслятор пошлет NYET), на что хост должен повторить транзакцию завершения в следующем микрокадре. Последняя порция данных придет в пакете DATA0 или DATA1.
Непериодические транзакции (управление и передача массивов) не критичны к времени выполнения; малый размер блока данных (до 64 байт) позволяет их расщеплять, используя по одной транзакции запуска и завершения.
Транзакции запуска вывода состоит из последовательности маркеров SS и OUT для массивов (Bulk OUT) или SS и SETUP для управления (Сontrol), за которыми следует пакет данных DATA0 или DATA1. Транслятор подтверждает запуск ответом ACK, после которого хост должен выполнить транзакцию завершения, или отвергает его пакетом NAK, после которого хост должен повторить запуск. Транзакция завершения состоит из маркеров CS и OUT, на что транслятор отвечает подтверждениями ACK, NAK, STALL (это обычные ответы целевой конечной точки) или NYET — транзакция еще не завершена, хосту следует позже повторить транзакцию завершения.
Транзакции запуска ввода состоит из последовательности маркеров SS и IN, транслятор своим ответом подтверждает (ACK) или отвергает (NAK) запуск. Транзакция завершения состоит из маркеров CS и IN, на что транслятор отвечает пакетом данных (DATA0 или DATA1) или подтверждениями NAK, STALL или NYET с вышеописанным значением.
Транслятор транзакций, входящий в хаб USB 2.0, служит для преобразования скоростей обмена по шине: высокой (HS) на стороне восходящего порта в полную или низкую (FS/LS) на стороне нисходящих портов, к которым подключены устройства USB 1.x. Транслятор выполняет расщепленные транзакции ввода/вывода и транслирует маркеры микрокадров в маркеры кадров, передаваемые в порты FS.
Расщепление транзакций организуется хостом, который знает текущую топологию шины (к портам каких хабов USB 2.0 подключены устройства или хабы 1.x). Расщепленные транзакции выполняются в два-три этапа, в зависимости от типа и направления передачи:
Во всех этих транзакциях используется обычная «молчаливая» реакция на прием поврежденных пакетов и механизм тайм-аутов.
Каждый нулевой маркер микрокадра хаб транслирует в виде полноскоростного маркера кадра SOF. Расщепленные транзакции на стороне FS/LS выполняются внутри этих кадров. Старт расщепленных транзакций хост планирует на нулевой микрокадр, чтобы к концу последнего (седьмого) микрокадра расщепленная транзакция могла быть завершена и все данные оказались бы переданы (чтобы не накапливать переходящих остатков). Временные соотношения между транзакциями на обеих сторонах транслятора иллюстрирует рисунок, где в качестве примера рассмотрено расщепление транзакции ввода.
Общая структура транслятора транзакций приведена на следующем рисунке. HS-обработчик (HS Handler) помещает информацию расщепленных запусков в свои буферы, а по запросам завершений выбирает из буферов результаты и передает их в виде пакетов хосту. Этот обработчик отрабатывает все обычные функции протокола USB, включая генерацию и проверку CRC, посылку хосту подтверждений и т. п. F/LSобработчик (F/LS-Handler) по выбранным из буферов запросам запусков формирует обычные транзакции USB, начинающиеся с маркеров IN, OUT, SETUP (а для LSпортов и с преамбулы PRE). Результаты этих транзакций (данные и подтверждения) он помещает в буферы. Транслятор транзакций обладает буферами, в которых размещаются все необходимые данные о текущих выполняемых расщепленных транзакциях. По завершении транзакции (на обеих сторонах) буфер освобождается для обслуживания следующих расщепленных транзакций.
Периодические транзакции (изохронные и прерывания), критичные к времени выполнения, транслятором обрабатываются по конвейерной схеме. Данные запусков периодических транзакций помещаются в SS-буфер, из которого они выбираются F/LS-обработчиком (буфер реализует дисциплину FIFO) и запускаются в виде транзакций на вторичную шину. Результаты этих транзакций помещаются в CS-буфер (тоже FIFO), откуда их извлекает хост. За порядок наполнения и опустошения этих буферов отвечает хост — он планирует транзакции SS и CS. Транзакции запусков проходят без подтверждений со стороны транслятора; хост узнает о судьбе транзакции только в фазе завершения.
Непериодические транзакции (управление и передача массивов) обрабатываются иначе: у транслятора имеется два или более буфера B/C In/Out, каждый из которых обслуживает по одной транзакции, от начала и до конца. Здесь транзакции запусков подтверждаются транслятором: ответ NAK означает невозможность приема транзакции к исполнению (нет свободных буферов), то есть хосту следует повторить попытку запуска. Ответ ACK означает, что транзакция принята к исполнению и через некоторое время следует забрать результат, выполнив транзакцию завершения.
Спецификация предусматривает два варианта реализации транслятора; какой именно применяется, можно узнать из кода протокола интерфейса хаба:
В расщепленных транзакциях фаза маркера, определяющая продолжение транзакции, состоит из двух пакетов-маркеров: специального маркера SPLIT, формат которого приведен в таблице, за которым следует маркер обычной транзакции (IN, OUT, SETUP). Пакет-преамбула PRE в расщепленных транзакциях не используется — скорость целевого устройства задается в маркере SPLIT, что позволяет хабу провести транзакцию на нужной скорости. Транслятор сам генерирует преамбулу, если вторичный порт, через который обращаются к LS-устройству, опознал FSподключение (это означает, что между хабом, транслирующим транзакцию, и целевым устройством есть хаб USB 1.x). Маркер SPLIT адресуется к порту хаба (номера в полях HubAddr и PortAddr), а следующий за ним обычный маркер адресует конечную точку целевого устройства. Маркеры SPLIT, используемые для запуска (SS) и завершения (CS) расщепленных транзакций, различаются полем SC: 0 — для SS, 1 — для CS. Поле ET описывает тип целевой конечной точки, с которой будет производиться транзакция (00 — Control, 01 — Isochronous, 10 — Bulk, 11 — Interrupt). Поля S и E трактуются по-разному. Для управляющих транзакций и прерываний поле S определяет скорость (0 — FS, 1 — LS), E = 0. Для остальных транзакций, кроме запуска изохронного вывода, поля S и E содержат нули. В транзакциях запуска изохронного вывода поля S и E трактуются как признаки начала и конца данных соответственно.
Поле | Sync | PID | Check | Hub Addr | SC | Port Addr | S | E | ET | SRC | EOP |
Длина, бит | 32 | 4 | 74 | 7 | 1 | 7 | 1 | 1 | 2 | 5 | 8 |
Хаб обеспечивает живучесть шины USB, автоматически запрещая работу нисходящих портов, от которых исходит угроза для работоспособности шины. Неисправное устройство, подключенное к порту, может не вовремя «замолчать» (потерять активность) или, наоборот, что-то «бормотать» (babble). Эти ситуации отслеживает ближайший к устройству хаб и запрещает восходящие передачи от такого устройства не позже чем по границе микрокадра. Хаб следит за тем, чтобы восходящие пакеты не пересекали границу микрокадра. Для этого в хабе имеется счетчик, который определяет следующие моменты в микрокадрах:
Во время восходящей трансляции пакета (пока повторитель ожидает EOP) возможны особые ситуации:
Если восходящее соединение устанавливается после EOF1, то повторитель вместо трансляции кадра передает признак FSEOP, чтобы вышестоящий хаб не запретил работу порта, к которому подключен данный хаб. Если с нисходящего порта, вызвавшего эту ситуацию, не придет EOP до EOF2, то этот порт будет автоматически запрещен.
При трансляции пакетов и сигналов для LS-портов повторитель выполняет инвертирование сигнала, поскольку представление состояний J и K для них иное. Кроме того, нисходящий трафик не транслируется на порты LS, пока не придет специальный пакет PRE. После пакета PRE «вниз» на LS-порт транслируется только один пакет. Вместо маркеров SOF на LS-порт передается признак LS-EOP, чтобы устройство не приостановилось.
Для HSпортов повторитель устроен функционально сложнее — здесь требуется ресинхронизация (re-clocking). Помехи в линии и по питанию влияют на момент переключения состояния выхода приемника во время нарастания и спада входного сигнала — это приводит к дрожанию фазы (jitter). На невысоких (LS, FS) скоростях дрожание несущественно, поскольку время нарастания/спада сигнала существенно меньше длительности битового интервала. На скорости 480 Мбит/с это соотношение иное, и накопление дрожания в цепочке повторителей (хабов) привело бы к потере битовой синхронизации. Ресинхронизация выполняется с помощью эластичного буфера — небольшой FIFO-памяти, хранящей последовательность бит транслируемого сигнала. Информация в буфер — биты, извлеченные из NRZI-сигнала, — поступает от приемника порта на частоте входного сигнала (частота подстраивается по полю Sync). Из буфера информация поступает на передатчик(и), но синхронизируясь уже от внутреннего генератора хаба. Поскольку частоты входного сигнала и внутреннего генератора абсолютно точно совпадать не могут, темп заполнения буфера отличается от темпа его опустошения. Для компенсации этих расхождений в начале приема пакета его трансляция задерживается до тех пор, пока буфер не наполнится до половины; за время передачи пакета наполненность буфера может измениться. Эластичный буфер вносит свою лепту в задержку, вносимую хабом. Глубина буфера определяется исходя из допустимого отклонения скоростей: по спецификации частота синхронизации должна выдерживаться с точностью ± 0,05%, так что максимальное расхождение частот приема и передачи может достигать ± 0,1%. При этом на пакете максимальной длины (9644 бит) может «набегать» расхождение до 9644×0,1% ≈ 10 бит; с небольшим запасом половинную длину буфера определили в 12 бит. Аналогичная технология применяется в высокоскоростных локальных сетях (Fast Ethernet, FDDI).
HS-пакет, проходя через повторитель хаба, может не только потерять до 4 бит начала синхропоследовательности, но и «обрасти» дополнительным «хвостом» после признака EOP, также до 4 бит длиной (dribble bits). Это «обрастание», как и начальная потеря, обусловлено задержкой, вносимой детектором амплитуды сигнала HS-приемника. При прохождении через 5 хабов число лишних бит может достигать 20, но это не страшно — приемник информации все равно верно определит конец пакета по признаку EOP. Вышеуказанная максимальная длина пакета 9644 бит включает в себя эти лишние биты.
Контроллер хаба является программно-видимым устройством USB, взаимодействуя с которым хост управляет конфигурированием устройств и соединениями на шине. Как и всякое устройство USB, контроллер хаба имеет набор дескрипторов, его описывающих. Для хабов определен специальный класс устройств (класс 09, подкласс 00). Интерфейс хаба (кроме обязательной нулевой контрольной точки) содержит конечную точку типа Interrupt-IN для информирования хоста о смене состояния. Управление хабом в целом и его портами выполняется с помощью специальных запросов к точке EP0. Их описание в табл.
Повторитель хаба обеспечивает динамические соединения между портами для трансляции пакетов и сигналов возобновления. В состоянии покоя повторителя все порты работают на прием и ожидают признака начала кадра или сигнала возобновления. По этим событиям устанавливается то или иное соединение портов (см. рисунок ниже).
В трансляции пакетов участвуют только разрешенные порты (восходящий разрешен всегда). Если какой-либо разрешенный порт обнаружил начало пакета, то устанавливается соединение в соответствии с рисунком б или в, и повторитель транслирует пакет, дожидаясь его конца (признака EOP). По концу пакета повторитель опять переходит в состояние покоя. Из рисунков видно, что нисходящий трафик транслируется широковещательно. Восходящий трафик транслируется сугубо направленно, так, что его «видят» только хабы, расположенные в цепочке от устройства к хосту, но не другие устройства.
Сигнал возобновления (resume) транслируется несколько иначе. С восходящего порта сигнал resume транслируется во все нисходящие порты, кроме запрещенных и селективно приостановленных. Сигнал resume, обнаруженный на нисходящем разрешенном порте, подхватывается хабом и транслируется в восходящий порт и во все нисходящие порты (включая и порт-источник сигнала), кроме запрещенных и селективно приостановленных. С селективно приостановленного порта сигнал возобновления подхватывается и транслируется обратно только в этот же порт, после чего хаб завершает сигнализацию возобновления (LS-EOP) и переводит порт в разрешенное состояние.