Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДП.docx
Скачиваний:
11
Добавлен:
23.09.2019
Размер:
4.64 Mб
Скачать

2.1.1 Основные дескрипторы usb драйвера

Устройства USB содержат встроенные структуры данных, которые называются дескрипторами и обеспечивают их самоидентификацию для программного обеспечения хоста. Каждый дескриптор начинается с 2-байтового заголовка, со­держащего размер дескриптора в байтах и код типа. За фиксированным заголовком следуют данные, специфические для конкрет­ного типа дескриптора [2.2]. В таблице 2.1 приведено описание некоторых дескрипторов.

Таблица 2.1 – Типы дескрипторов

Тип дескриптора

Описание

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

Описывает все устройство

Дескриптор квалификатора устройства

Информация о конфигурации устройства для другой скорости работы

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

Описывает одну из возможных конфигураций устройства

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

Описывает один из интерфейсов, входящих в конфигурацию

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

Описывает одну из конечных точек, принадлежащих интерфейсу

Строковый дескриптор

Содержит строку в Юникоде, описывающую устройство, конфигурацию, интерфейс или конечную точку

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

С каждым устройством связывается один дескриптор устройства, идентифици­рующий устройство для хостового программного обеспечения. Дескриптор устройства содержит основную информацию об USB-устройстве в целом и обо всех существую­щих конфигурациях [2.3]. USB-устройство может иметь только один такой деск­риптор. Для получения этого дескриптора хост направляет конечной точке 0 управляющую транзакцию GET_DESCRIPTOR. Дескриптор устройства определяется следующим образом:

typedef struct _USB_DEVICE_DESCRIPTOR

{

UCHAR bLength;

UCHAR bDescriptorType;

USHORT bcdUSB;

UCHAR bDeviceClass;

UCHAR bDeviceSubClass;

UCHAR bDeviceProtocol;

UCHAR bMaxPacketSize;

USHORT idVendor;

USHORT idProduct;

USHORT bcdDevice;

UCHAR iManufacturer;

UCHAR iProduct;

UCHAR iSerialNumber;

UCHAR bNumConfigurations;

} USB_DEVICE_DESCRIPT0R, *PUSB_DEVICE_DESCRIPT0R;

В таблице 2.2 приведено подробное описание полей дескриптора устройства.

Таблица 2.2 – Структура дескриптора устройства

Смещение поля данных

Наименование поля

Размер,

байт

Описание

0

bLength

1

Размер дескриптора в байтах

1

bDescriptorType

1

Тип дескриптора

(_USB_DEVICE_DESCRIPTOR)

2

bcdUSB

2

Номер версии спецификации USB в формате BCD

4

bDeviceClass

1

Код класса USB

5

bDeviceSubClass

1

Код подкласса USB-устройства

6

bDeviceProtocol

1

Код протокола USB

7

bMaxPacketSize

1

Максимальный размер пакета для ну­левой конечной точки

8

idVendor

2

Идентификатор изготовителя

10

idProduct

2

Идентификатор продукта

12

bcdDevice

2

Номер версии устройства в формате BCD

14

iManufacturer

1

Индекс дескриптора строки, описы­вающей изготовителя

15

iProduct

1

Индекс дескриптора строки, описы­вающей продукт

16

iSerialNumber

1

Индекс дескриптора строки, содержа­щей серийный номер USB-устройства

17

bNumConfigurations

1

Количество возможных конфигураций USB-устройства

Поля стандартного дескриптора конфигурации подчиняются следующим правилам [2.3]:

  • размер дескриптора (поле bLength) всегда составляет 18 байтов;

  • код типа дескриптора (поле bDescriptorType) имеет значение 1;

  • номер версии (поле bcdUSB) представляется в формате BCD и может

  • принимать следующие значения:

  • 0100h — версия 1.0;

  • 0110h — версия 1.1;

  • 0200h — версия 2.0;

  • поле кода класса (поле bDeviceClass) может принимать следующие зна­чения:

  • значение 00h обозначает, что интерфейсы функционируют независимо друг от друга, и каждый из них имеет собственный код класса;

  • значение между 1 и FEh обозначает, что устройство поддерживает раз­личные спецификации для интерфейсов, и интерфейсы не могут функционировать независимо;

  • значение FFh обозначает, что класс устройства определяется изготови­телем;

  • код подкласса (поле bDeviceSubClass) имеет значение 0x0;

  • код протокола (поле bDeviceProtocol) имеет значение 0x0;

  • максимальный размер пакета для нулевой конечной точки (поле bMaxPacketSize) составляет 64 байта (хотя в общем случае могут использоваться значения 8, 16, 32 и 64);

  • число возможных конфигураций (поле bNumConfiguration) описывает число конфигураций только для текущей скорости работы, но не для обеих скоростей.

Идентификатор изготовителя устройства, идентификатор продукта и номер версии используются для подбора драйвера. Индексы дескрипторов строк используются для получения информации об устройстве в текстовом формате.