Дескрипторы USB уровня "Стандартный"

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

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

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

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

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

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

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

Каждое устройство универсальной последовательной шины (USB) должно иметь возможность предоставить один дескриптор устройства, содержащий соответствующие сведения об устройстве. Windows использует эти сведения для получения различных наборов сведений. Например, поля idVendor и idProduct указывают идентификаторы поставщика и продукта соответственно. Windows использует эти значения полей для создания идентификатора оборудования для устройства. Чтобы просмотреть идентификатор оборудования конкретного устройства, откройте диспетчер устройств и просмотрите свойства устройства. На вкладке "Сведения" значение свойства "Идентификаторы оборудования " указывает идентификатор оборудования ("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 mA)

Поле 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-устройства".