Мезонинный адаптер USB 2.0
2.3.1 Дескриптор устройства
Каждое USB устройство имеет один дескриптор устройства (согласно USB спецификации). Устройство должно определять класс устройства и подклассовые коды в дескрипторе интерфейса, а не в дескрипторе устройства.
Общее описание устройства показано в таблице 1.5. Данное описание дает представление о следующих параметрах:
спецификации USB (bcdUSB), поддерживаемой устройством;
классе (bDeviceClass, bDeviceSubClass), к которому относится устройство;
стандартизованном протоколе (bDeviceProtocol), используемом при работе;
производителе и продукте (idVendor, idProduct, bcdDevice).
Описание всегда имеет длину 18 байт. Поле bMaxPacketSize0 содержит информацию о контрольной точке и показывает максимально возможный размер пакета, передаваемого в фазе данных (в отличие от дополнительных точек, сведения о контрольной точке ограничены названным полем). Поле bNumConfiguration показывает количество конфигураций, поддерживаемых устройством (как минимум одна). Количество дескрипторов конфигурации соответствует заданному здесь числу. Информация в полях iManufacturer, iProduct, iSerialNumber не является обязательной, и если значения этих полей отличны от нуля, то содержат индекс строкового дескриптора, содержащего текстовую информацию соответственно о производителе, продукте и серийном номере устройства.
Формированием классов устройств и стандартизацией протоколов занимается организация USB-IF. Именно она определяет значения для полей bDeviceClass, bDeviceSubClass, bDeviceProtocol. Если поле bDeviceClass имеет значение 0FFh, то устройство относится к классу производителя, в таком случае набор поддерживаемых дополнительных требований определяется производителем (значение поля bDeviceSubClass может быть произвольным).
Когда значение поля bDeviceClass находится в диапазоне от 1 до 0FEh, это показывает, что устройство относится к некоторому стандартизованному классу и оно должно поддерживать определенный набор команд. В таком случае поля bDeviceSubClass и bDeviceProtocol дополняют предыдущее поле в соответствии с требованиями USB-IF.
Таблица 1.5
Дескриптор устройства
Offset |
Поле |
Размер |
Значение |
Описание |
|
0 |
bLength |
Byte |
12h |
Размер дескриптора в байтах |
|
1 |
bDescriptorType |
Byte |
01h |
Тип дескриптора, в данном случае DEVICE |
|
2 |
bcdUSB |
Word |
xxxxh |
Номер спецификации USB, поддерживаемой устройством, в двоично-десятичном виде |
|
4 |
bDeviceClass |
Byte |
00h |
Код класса (распределяется организацией USB-IF) |
|
4 |
bDeviceSubClass |
Byte |
00h |
Код подкласса (распределяется организацией USB-IF) |
|
6 |
bDeviceProtocol |
Byte |
00h |
Код протокола (распределяется организацией USB-IF) |
|
7 |
bMaxPacketSize0 |
Byte |
xxh |
Максимальный размер пакета для контрольной точки. Допустимые значения: 8,16, 32, 64 |
|
8 |
idVendor |
Word |
xxxxh |
Идентификационный код производителя (распределяется организацией USB-IF) |
|
10 |
idProduct |
Word |
xxxxh |
Идентификационный код продукта (распределяется организацией USB-IF) |
|
12 |
bcdDevice |
Word |
xxxxh |
Номер версии устройства в двоично- десятичном виде |
|
14 |
iManufacturer |
Byte |
xxh |
Индекс строки, описывающий производителя |
|
15 |
iProduct |
Byte |
xxh |
Индекс строки, описывающий продукт |
|
16 |
iSerialNumber |
Byte |
xxh |
Индекс строки, описывающей серийный номер устройства |
|
17 |
bNumConfiguration |
Byte |
xxh |
Количество конфигураций, поддерживаемых устройством |
Если поле bDeviceClass имеет значение 0, то каждый интерфейс устройства имеет собственное описание класса и все имеющиеся интерфейсы работают независимо. Для этого случая поле bDeviceSubClass должно иметь значение 0.
Значения в поле bDeviceProtocol имеют смысл, похожий на смысл значений в поле bDeviceClass: 0 - описание протокола будет задано в описании интерфейса, 1…0FEh - протокол стандартизован организацией USB-IF, 0FFh - протокол определяет производитель.