Класс устройства USB
Флешка любого производителя работает без установки драйвера, а переходник на неизвестной микросхеме иногда требует его. Разница в классе устройства: стандартные классы операционная система поддерживает сама.
Обновлено Редакция GAW
Класс устройства (device class) — стандартный тип функции USB-устройства, описанный отдельной спецификацией USB-IF: накопитель, клавиатура, звуковая карта, модем. Если устройство заявляет стандартный класс и соблюдает его спецификацию, операционная система работает с ним своим драйвером класса. На странице Defined Class Codes USB-IF так и объясняет назначение кодов: определить функцию устройства и загрузить для неё драйвер.
Как задаётся класс
Код класса — три байта: базовый класс, подкласс и протокол. Его указывают в дескрипторе устройства (поля bDeviceClass, bDeviceSubClass, bDeviceProtocol) или в дескрипторах интерфейсов (bInterfaceClass и т. д.). Значение 00h в дескрипторе устройства означает, что классы заданы в интерфейсах. Так устроены составные устройства, у которых несколько функций.
Основные коды USB-IF
| Код | Класс | Где указывается | Примеры |
|---|---|---|---|
| 01h | Audio | интерфейс | звуковые карты, микрофоны |
| 02h | Communications and CDC Control | устройство и интерфейс | виртуальный COM-порт, модемы |
| 03h | HID | интерфейс | клавиатуры, мыши, джойстики |
| 08h | Mass Storage | интерфейс | флешки, картридеры |
| 09h | Hub | устройство | хабы |
| 0Ah | CDC-Data | интерфейс | канал данных CDC |
| 0Eh | Video | интерфейс | веб-камеры |
| EFh | Miscellaneous | устройство и интерфейс | составные устройства |
| FFh | Vendor 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.
Источники
- 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
- 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
Нашли ошибку?