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 — протокол не определен