Как подключить сканер к компьютеру установить и настроить сканер на компьютере.
Хабы 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), используемые в основном в отладочных целях: