Обнаружив подключение устройства (по сообщению от хаба), система USB считывает его дескрипторы, чтобы определить, какие программные компоненты необходимо загрузить и кого уведомлять о появлении нового устройства. В любом устройстве USB обязательно должны присутствовать дескрипторы устройства, конфигурации, интерфейсов и конечных точек. Подробно структура дескрипторов описана далее, здесь рассматриваются только фрагменты дескрипторов, участвующих в идентификации устройств.
В дескрипторе устройства имеются 2-байтные поля, идентифицирующие устройство в целом:
Кроме того, здесь могут присутствовать ссылки на строковые дескрипторы, в которых содержатся текстовые названия изготовителя и устройства, а также его серийный номер. Эти текстовые описания имеют произвольную длину и формат (но кодируются в 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 — протокол не определен |