link0 link1 link2 link3 link4 link5 link6 link7 link8 link9 link10 link11 link12 link13 link14 link15 link16 link17 link18 link19 link20 link21 link22 link23 link24 link25 link26 link27 link28 link29 link30 link31 link32 link33 link34 link35 link36 link37 link38 link39 link40 link41 link42 link43 link44 link45 link46 link47 link48 link49 link50 link51 link52 link53 link54 link55 link56 link57 link58 link59 link60 link61 link62 link63 link64 link65 link66 link67 link68 link69 link70 link71 link72 link73 link74 link75 link76 link77 link78 link79 link80 link81 link82 link83 link84 link85 link86 link87 link88 link89 link90 link91 link92 link93 link94 link95 link96 link97 link98 link99 link100 link101 link102 link103 link104 link105 link106 link107 link108 link109 link110 link111 link112 link113 link114 link115 link116 link117 link118 link119 link120 link121 link122 link123 link124 link125 link126 link127 link128 link129 link130 link131 link132 link133 link134 link135 link136 link137 link138 link139

PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

USB

Идентификация и классификация устройств

Обнаружив подключение устройства (по сообщению от хаба), система USB считывает его дескрипторы, чтобы определить, какие программные компоненты необходимо загрузить и кого уведомлять о появлении нового устройства. В любом устройстве USB обязательно должны присутствовать дескрипторы устройства, конфигурации, интерфейсов и конечных точек. Подробно структура дескрипторов описана далее, здесь рассматриваются только фрагменты дескрипторов, участвующих в идентификации устройств.

В дескрипторе устройства имеются 2-байтные поля, идентифицирующие устройство в целом:

  • idVendor — идентификатор производителя (VID — Vendor Id), назначаемый USB-IF;
  • idProduct и bcdDevice — идентификатор продукта (PID — Product Id) и его версии (DID — Device Id), определяются производителем.

Кроме того, здесь могут присутствовать ссылки на строковые дескрипторы, в которых содержатся текстовые названия изготовителя и устройства, а также его серийный номер. Эти текстовые описания имеют произвольную длину и формат (но кодируются в UNICODE), на эти строковые дескрипторы указывают индексы в полях iManufacturer, iProduct и iSerialNumber.

Для определения назначения, возможностей и протоколов, поддерживаемых устройством и его отдельными интерфейсами, в его дескрипторах указываются коды класса, подкласса и протокола. Коды класса, подкласса и протокола имеют непосредственное отношение к интерфейсам — по ним могут быть подобраны (операционной системой автоматически) подходящий драйвер и клиентское приложение. Эти коды содержатся в дескрипторах интерфейсов, поддерживаемых устройством. «Штатные» коды в диапазоне 01h–FEh назначает USB-IF, но только для уже стандартизованных устройств. Значение 00h означает отсутствие определения, FFh отдано для специфического назначения разработчикам и производителям устройств. Сообщение штатного кода обязывает устройство соответствовать стандартным требованиям, предъявляемым к интерфейсам с указанным протоколом для заданного класса и подкласса, в том числе и выполнять все специфические запросы и сообщать специфические дескрипторы, если таковые имеются. При этом допускается и расширение возможностей устройства. Для связывания нестандартного устройства со своим драйвером используются идентификаторы VID и PID.

Коды класса, подкласса и протокола присутствуют не только в дескрипторах интерфейсов, но и в дескрипторе устройства. Здесь нулевой код класса означает, что устройство состоит из набора независимых интерфейсов, каждому из которых может быть назначен свой код класса, подкласса и протокола. При этом и подкласс и протокол устройства тоже нулевые (то есть устройство в целом стандартно охарактеризовать нельзя). «Штатный» код класса устройства означает, что его интерфейсы не являются независимыми (агрегированные интерфейсы). При этом код подкласса (тоже от USB-IF) является дополнительным квалификатором. «Штатный» код протокола означает, что устройство поддерживает все протоколы, требуемые для устройства данного класса и подкласса. Нулевой код протокола устройства означает, что протоколы могут быть определены только для отдельных интерфейсов.

Классификация устройств USB относится не к потребительским функциям, выполняемым устройствами, а к способам коммуникаций между хостом и устройствами. Классификация позволяет обобщать характеристики интерфейсов, при этом, как правило, код протокола задает состав, тип конечных точек и правила их использования, а подкласс определяет форматы данных, передаваемых через те или иные конечные точки. Классификация позволяет сократить многообразие (разнотипность) драйверов, требуемых для различных устройств, — драйвер может абстрагироваться от конкретного устройства-функции, которое он обслуживает. Операционная система связывает имеющиеся в ее распоряжении клиентские драйверы с конкретными интерфейсами устройств, используя коды классов/подклассов и протокола, а также идентификаторы производителя, продукта и его версии.

 

Таблица. Некоторые стандартные классы и протоколы устройств

Подкласс Протокол (точки, используемые интерфейсом)
Класс 01 — аудиоустройства
01 — AUDIOCONTROL, управляемый модуль аудиообработки (регулятор, фильтр, микшер, ревербератор…)
02 — AUDIOSTREAMING, устройство-приемник или источник аудиопотока
03 — MIDISTREAMING, устройство-приемник или источник потока MIDI-сообщений
00 — протокол не определен
Класс 03 — человеко-машинный интерфейс (HID-устройства)
01 — устройства, используемые при загрузке ОС 01 — клавиатура
02 — мышь
Класс 07 — принтеры
01 — передача к принтеру данных, используя любые языки описания страниц (PCL), применяемые в принтерах с традиционными интерфейсами, и прием информации о состоянии 01 — однонаправленный (EP0, Bulk-OUT)
02 — двунаправленный (EP0, Bulk-OUT, Bulk-IN)
03 — двунаправленный IEEE 1284.4 (EP0, Bulk-OUT, Bulk-IN)
Класс 08 — устройства хранения данных (mass storage)
01 — сокращенный набор команд (RBC — Reduced Block Commands), типично для устройств на флэш-памяти, но этот набор команд могут использовать любые устройства хранения
02 — SFF8020i, MMC-2 (ATAPI), типично для CD/DVD-устройств
03 — QIC-157 (ленточные устройства)
04 — UFI, типично для НГМД
05 — SFF8070i, типично для НГМД
06 — прозрачная передача команд SCSI
00 — CBI-транспорт с прерываниями (EP0, Bulk-OUT, Bulk-IN, Interrupt-IN)
01 — CBI-транспорт без прерываний (EP0, Bulk-OUT, Bulk-IN, Interrupt-IN), только для FS
50h — BO-транспорт (Bulk-OUT, Bulk-IN, EP0)
Класс 09h — хабы
00 — деления на подклассы нет 00 — хаб USB 1.x;
01 — хаб USB 2.0 с одним транслятором транзакций;
02 — хаб USB 2.0 с множеством трансляторов транзакций
Класс 0Eh — видеоустройства
01 —VIDEOCONTROL, управляемое устройство видеообработки
02 — VIDEOSTREAMING, устройство-приемник или источник видеопотока
03 — VIDEO_INTERFACE_COLLECTION, набор связанных интерфейсов видеоустройств
00 — протокол не определен