Поделиться через


Стандартные дескрипторы USB

USB-устройство предоставляет сведения о себе в структурах данных, называемых дескрипторами USB. В этом разделе содержатся сведения об устройствах, конфигурации, интерфейсах и дескрипторах конечных точек, а также способах их извлечения с USB-устройства.

Дескрипторы USB, сопоставленные с макетом устройства

Основное программное обеспечение получает дескрипторы от подключенного устройства, отправляя различные стандартные запросы управления в конечную точку по умолчанию (получение запросов дескриптора, см. раздел спецификации USB 9.4.3). Эти запросы указывают тип извлекаемого дескриптора. В ответ на такие запросы устройство отправляет дескрипторы, которые содержат сведения об устройстве, его конфигурациях, интерфейсах и связанных конечных точках. Дескрипторы устройств содержат сведения обо всем устройстве. Дескрипторы конфигурации содержат сведения о каждой конфигурации устройства. Дескрипторы строк содержат текстовые строки в Юникоде.

Каждое USB-устройство предоставляет дескриптор устройства, который указывает сведения о классе устройства, идентификаторы поставщика и продукта, а также количество конфигураций. Каждая конфигурация предоставляет дескриптор конфигурации, который указывает количество интерфейсов и характеристики мощности. Каждый интерфейс предоставляет дескриптор интерфейса для каждого из его альтернативных параметров, содержащий сведения о классе и количестве конечных точек. Каждая конечная точка в каждом интерфейсе предоставляет дескрипторы конечной точки, которые указывают тип конечной точки и максимальный размер пакета.

Например, рассмотрим макет устройства платы OSR FX2 (см. раздел Макет usb-устройства). На уровне устройства устройство предоставляет дескриптор устройства и дескриптор конечной точки для конечной точки по умолчанию. На уровне конфигурации устройство предоставляет дескриптор конфигурации 0. На уровне интерфейса он предоставляет один дескриптор интерфейса для альтернативного параметра 0. На уровне конечной точки он предоставляет три дескриптора конечной точки.

Схема классов макета дескриптора usb-устройства.

Дескриптор USB-устройства

Каждое устройство универсальной последовательной шины (USB) должно иметь возможность предоставить один дескриптор устройства, содержащий соответствующие сведения об устройстве. Windows использует эти сведения для получения различных наборов данных. Например, поля idVendor и idProduct указывают идентификаторы поставщика и продукта соответственно. Windows использует эти значения полей для создания идентификатора оборудования для устройства. Чтобы просмотреть идентификатор оборудования конкретного устройства, откройте диспетчер устройств и просмотрите свойства устройства. На вкладке Сведения значение свойства Hardware Ids указывает идентификатор оборудования ("USB\XXX"), созданный Windows. В поле bcdUSB указывается версия спецификации USB, которой соответствует устройство. Например, 0x0200 указывает, что устройство разработано согласно спецификации USB 2.0. Значение bcdDevice указывает номер редакции, определяемый устройством. Стек драйверов USB использует bcdDevice, а также idVendor и idProduct для создания аппаратных и совместимых идентификаторов для устройства. Эти идентификаторы можно просмотреть в диспетчер устройств. Дескриптор устройства также указывает общее количество конфигураций, поддерживаемых устройством.

Узел получает дескриптор устройства через передачу элемента управления. Корпорация Майкрософт предоставляет программные интерфейсы для получения дескриптора.

Если вы пишете... Вызова...
Приложение UWP, использующее Windows.Devices.Usb UsbDevice.DeviceDescriptor
Классическое приложение Win32, использующее функции WinUSB WinUsb_GetDescriptor
Драйвер клиента на основе UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Драйвер клиента на основе KMDF WdfUsbTargetDeviceGetDeviceDescriptor
Драйвер клиента на основе WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

Дескриптор конфигурации USB

Конфигурация USB содержит ряд интерфейсов. Каждый интерфейс состоит из одного или нескольких альтернативных параметров, а каждый альтернативный параметр состоит из набора конечных точек (см. раздел Макет USB-устройства). Дескриптор конфигурации описывает всю конфигурацию, включая ее интерфейсы, альтернативные параметры и их конечные точки. Каждая из этих сущностей также описывается в формате дескриптора. Дескриптор конфигурации также может включать пользовательские дескрипторы, определенные производителем устройства.

Таким образом, фиксированная только начальная часть дескриптора конфигурации составляет 9 байт. Остальные переменные зависят от количества интерфейсов и их альтернативных параметров, а также конечных точек, поддерживаемых устройством. В этом наборе документации начальные 9 байт называются дескриптором конфигурации. Первые два байта дескриптора указывают общую длину.

В следующей таблице показан дескриптор конфигурации для USB-устройства веб-камеры:

Поле Значение
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (питание от шины )
MaxPower 0xFA (500 мА)

Поле bConfigurationValue указывает номер конфигурации, определенной в встроенном ПО устройства. Конфигурация USB также указывает на определенные характеристики питания. BmAttributes содержит битовую маску, которая указывает, поддерживает ли конфигурация функцию удаленного пробуждения, а также работает ли устройство на шине или на автономном устройстве. Поле MaxPower указывает максимальную мощность (в миллиамп-единицах), которую устройство может получить от узла, когда устройство работает на шине. Дескриптор конфигурации также указывает общее количество интерфейсов (bNumInterfaces), поддерживаемых устройством.

Если вы пишете... Вызова...
Приложение UWP, использующее Windows.Devices.Usb UsbDevice.ConfigurationDescriptor для получения части фиксированной длины.
UsbConfiguration.Descriptors для получения всего набора конфигурации.
Классическое приложение Win32, использующее функции WinUSB WinUsb_GetDescriptor
Драйвер клиента на основе UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Драйвер клиента на основе KMDF WdfUsbTargetDeviceRetrieveConfigDescriptor
Драйвер клиента на основе WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

Дескриптор интерфейса USB

Дескриптор интерфейса содержит сведения о альтернативной настройке ИНТЕРФЕЙСА USB.

В следующей таблице показан дескриптор интерфейса для альтернативного параметра 0 интерфейса 0 для устройства веб-камеры:

Поле Значение
bInterfaceNumber 0x00
bAlternateSetting 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 Microsoft LifeCam VX-5000
0x0409 Microsoft LifeCam VX-5000

В предыдущем примере обратите внимание на значения полей bInterfaceNumber и bAlternateSetting . Эти поля содержат значения индекса, которые узел использует для активации интерфейса и одного из его альтернативных параметров. Для активации приложение или драйвер указывает значение индекса в вызове функции. На основе этой информации стек драйверов USB создает стандартный запрос управления (SET INTERFACE) и отправляет его на устройство. Обратите внимание на поле bInterfaceClass . Дескриптор интерфейса или дескриптор для любого из его альтернативных параметров указывает код класса, подкласс и протокол. Значение 0x0E указывает, что интерфейс предназначен для класса видеоустройства. Кроме того, обратите внимание на поле iInterface . Это значение указывает, что к дескрипторов интерфейса добавляются два дескриптора строк. Дескрипторы строк содержат описания Юникода, которые используются во время перечисления устройств для определения функциональных возможностей.

Если вы пишете... Вызова...
Приложение UWP, использующее Windows.Devices.Usb UsbInterfaceSetting.Descriptors для получения определенного дескриптора для определенного альтернативного параметра.
UsbInterface.Descriptors для получения дескрипторов для всех параметров интерфейса.
Классическое приложение Win32, использующее функции WinUSB WinUsb_GetDescriptor
Драйвер клиента на основе UMDF IWDFUsbInterface::GetInterfaceDescriptor
Драйвер клиента на основе KMDF WdfUsbInterfaceGetDescriptor
Драйвер клиента на основе WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , а затем выполните синтаксический анализ для каждого дескриптора интерфейса. Дополнительные сведения см. в статье Выбор конфигурации для USB-устройства.

Дескриптор конечной точки USB

Каждая конечная точка в интерфейсе описывает один поток входных или выходных данных для устройства. Устройство, поддерживающее потоки для различных типов функций, имеет несколько интерфейсов. Устройство, поддерживающее несколько потоков, относящихся к функции, может поддерживать несколько конечных точек в одном интерфейсе.

Все типы конечных точек (за исключением конечной точки по умолчанию) должны предоставлять дескрипторы конечных точек, чтобы узел смог получить сведения о конечной точке. Дескриптор конечной точки содержит такие сведения, как адрес, тип, направление и объем данных, которые может обрабатывать конечная точка. Передача данных в конечную точку основана на этой информации.

В следующей таблице показан дескриптор конечной точки для устройства веб-камеры:

Поле Значение
bEndpointAddress 0x82 IN
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bInterval 0x01

В поле bEndpointAddress указывается уникальный адрес конечной точки, содержащий номер конечной точки (Bits 3..0) и направление конечной точки (бит 7). Считывая эти значения в предыдущем примере, можно определить, что дескриптор описывает конечную точку IN, номер конечной точки которой равен 2. Атрибут bmAttributes указывает, что тип конечной точки является изохронным. Поле wMaxPacketSizefield указывает максимальное количество байтов, которое конечная точка может отправлять или получать в одной транзакции. Биты 12..11 указывают общее количество транзакций, которые могут быть отправлены на микрофрейм. BInterval указывает, как часто конечная точка может отправлять или получать данные.

Если вы пишете... Вызова...
Приложение UWP, использующее Windows.Devices.Usb UsbEndpointDescriptor
Классическое приложение Win32, использующее функции WinUSB WinUsb_GetDescriptor
Драйвер клиента на основе UMDF WDFUsbTargetPipe::GetInformation
Драйвер клиента на основе KMDF WdfUsbTargetPipeGetInformation
Драйвер клиента на основе WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , а затем выполните синтаксический анализ для каждого дескриптора конечной точки. Дополнительные сведения см. в статье Выбор конфигурации для USB-устройства.