Перейти к содержанию

Класс устройства USB

Флешка любого производителя работает без установки драйвера, а переходник на неизвестной микросхеме иногда требует его. Разница в классе устройства: стандартные классы операционная система поддерживает сама.

Обновлено Редакция GAW

Класс устройства (device class) — стандартный тип функции USB-устройства, описанный отдельной спецификацией USB-IF: накопитель, клавиатура, звуковая карта, модем. Если устройство заявляет стандартный класс и соблюдает его спецификацию, операционная система работает с ним своим драйвером класса. На странице Defined Class Codes USB-IF так и объясняет назначение кодов: определить функцию устройства и загрузить для неё драйвер.

Как задаётся класс

Код класса — три байта: базовый класс, подкласс и протокол. Его указывают в дескрипторе устройства (поля bDeviceClass, bDeviceSubClass, bDeviceProtocol) или в дескрипторах интерфейсов (bInterfaceClass и т. д.). Значение 00h в дескрипторе устройства означает, что классы заданы в интерфейсах. Так устроены составные устройства, у которых несколько функций.

Основные коды USB-IF

КодКлассГде указываетсяПримеры
01hAudioинтерфейсзвуковые карты, микрофоны
02hCommunications and CDC Controlустройство и интерфейсвиртуальный COM-порт, модемы
03hHIDинтерфейсклавиатуры, мыши, джойстики
08hMass Storageинтерфейсфлешки, картридеры
09hHubустройствохабы
0AhCDC-Dataинтерфейсканал данных CDC
0EhVideoинтерфейсвеб-камеры
EFhMiscellaneousустройство и интерфейссоставные устройства
FFhVendor Specificустройство и интерфейссобственный протокол производителя

Класс, VID и PID

Класс говорит, что устройство умеет, а пара VID и PID — какое это конкретное изделие. Для устройств с классом FFh система ищет драйвер производителя по VID и PID. Тип передачи, который требует класс, — прерывания, bulk или изохронные — задаёт спецификация класса, см. типы передач USB.

Не путать с режимами скорости Low, Full и High Speed: класс устройства описывает функцию, а не физический уровень, и устройство одного класса может работать на любой из скоростей, которые допускает его спецификация.

Частые вопросы

Какой класс USB выбрать для своего устройства?

Стандартный, если подходит: тогда драйвер уже есть в операционной системе. Обмен короткими сообщениями — HID (03h), виртуальный COM-порт — CDC (02h и 0Ah), накопитель — Mass Storage (08h). Свой протокол — класс FFh (Vendor Specific), но тогда драйвер или библиотеку для хоста придётся обеспечить самому.

Почему в дескрипторе устройства класс 00h?

Это значит, что класс указан не для устройства целиком, а для каждого интерфейса отдельно. Так делают составные устройства: например, одно устройство может иметь интерфейс HID и интерфейс CDC, и для каждого система загрузит свой драйвер класса.

Почему переходнику USB–UART нужен драйвер, а другому — нет?

Если мост реализует стандартный класс CDC, система работает с ним своим драйвером. Многие популярные мосты используют собственный протокол с классом производителя, и для них нужен драйвер, который система подбирает по VID и PID.

Источники

  1. USB-IF. Defined Class Codes — код класса — три байта: Base Class, SubClass, Protocol; служит для определения функции устройства и загрузки драйвера; размещается в дескрипторе устройства или в дескрипторах интерфейсов; таблица: 00h — в дескрипторе устройства, класс задаётся в интерфейсах; 01h Audio; 02h Communications and CDC Control (оба); 03h HID (интерфейс); 07h Printer; 08h Mass Storage; 09h Hub (устройство); 0Ah CDC-Data; 0Eh Video; DCh Diagnostic; E0h Wireless Controller; EFh Miscellaneous; FEh Application Specific; FFh Vendor Specific; классы определяются спецификациями классов на сайте USB-IF
  2. USB-IF. Universal Serial Bus Specification, Revision 2.0 (пакет usb_20_20250603) — табл. 9-8: bDeviceClass, bDeviceSubClass, bDeviceProtocol — коды назначает USB-IF; 00h — классы указаны в интерфейсах; FFh — класс производителя; табл. 9-12: bInterfaceClass, bInterfaceSubClass, bInterfaceProtocol

Нашли ошибку?