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

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

Стандартный дескриптор интерфейса (standard interface descriptor) содержит информацию об одном из интерфейсов, доступных при определенной конфигурации USB-устройства. Структура дескриптора интерфейса приведена ниже, а описание полей показано в таблице 2.5 [2.3].

typedef struct _USB_INTERFACE_DESCRIPTOR

{

UCHAR bLength;

UCHAR bDescriptorType;

UCHAR InterfaceNumber;

UCHAR bAlternateSetting;

UCHAR bNumEndpoints;

UCHAR bInterfaceClass;

UCHAR bInterfaceSubClass;

UCHAR bInterfaceProtocol;

UCHAR iInterface;

} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;

Таблица 2.5 – Структура дескриптора интерфейса

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

байт

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

Размер,

байт

Описание

0

bLength

1

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

1

bDescriptorType

1

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

(usb_interface_descriptor_type)

2

bInterfaceNumber

1

Номер данного интерфейса (нумеруются с 0) в наборе интерфей­сов, поддерживаемых в данной конфи­гурации

3

bAlternateSetting

1

Альтернативный номер интерфейса

4

bNumEndpoints

1

Число конечных точек для этого ин­терфейса без учета нулевой конечной точки

5

bInterfaceClass

1

Код класса интерфейса

6

bInterfaceSubClass

1

Код подкласса интерфейса

7

bInterfaceProtocol

1

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

8

iInterface

1

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

Размер дескриптора интерфейса всегда составляет 9 байт. При идентификации и нумерации USB-устройств на шине дескриптор интерфейса может использоваться для определения типа устройства по кодам класса, подкласса и протокола.

Дескриптор интерфейса возвращается USB-устройством при выполнении запроса GET_DESCRIPTOR и не может быть запрошен или установлен напря­мую вызовами GET_ DESCRIPTOR или SET_ DESCRIPTOR.

USB-устройство может иметь альтернативный набор установок (alternate set­tings), что позволяет изменять настройки после конфигурирования. По умолчанию всегда устанавливаются обычные настройки интерфейса, а с по­мощью запроса SET_INTERFACE могут быть установлены альтернативные на­стройки или возвращены настройки по умолчанию.

Если интерфейс использует только нулевую конечную точку, то поле bNumEndpoints должно быть равно нулю.

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

Стандартный дескриптор конечной точки (standard endpoint descriptor) содержит информацию об одной из конечных точек, доступных при использовании определенного интерфейса. Структура дескриптора конечной точки показана в табл. 2.6 [2.3].

typedef struct _USB_ENDPOINT_DESCRIPTOR

{

UCHAR bLength;

UCHAR bDescriptorType;

UCHAR bEndpointAddress;

UCHAR bmAttributes;

USHORT wMaxPacketSize;

UCHAR bInterval;

} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

Таблица 2.6 – Структура дескриптора конечной точки

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

байт

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

Размер,

байт

Описание

0

bLength

1

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

1

bDescriptorType

1

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

(usb_endpoint_descriptor_type)

2

bEndpointAddress

1

Код адреса конечной точки

3

bmAttributes

1

Атрибуты конечной точки

4

wMaxPacketSize

2

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

  • 00 − 1-1024

  • 01 − 513-1024

  • 10 − 683-1024

  • 11 − Не используется (зарезервировано)

6

bInterval

1

Интервал опроса конечной точки при передаче данных (задается в миллисекундах)

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

  • [7 бит] направление передачи (игнорируется для каналов сообщений):

  • 0 − OUT (от хоста);

  • 1 − IN (к хосту);

  • [6-4 биты] зарезервированы и должны содержать нули;

  • [3-0 биты] номер конечной точки.

Байт атрибутов bmAttributes содержит следующие биты:

  • [7-6] зарезервированы и должны быть равны нулю;

  • [5-4] тип использования конечной точки:

  • 00 — конечная точка (данные);

  • 01 — конечная точка для явной обратной связи;

  • 10 — конечная точка неявной обратной связи;

  • 11 — зарезервировано;

  • [3-2] тип синхронизации:

  • 00 — нет синхронизации;

  • 01 — асинхронная;

  • 10 — адаптивная;

  • 11 — синхронная;

  • [1-0] тип конечной точки:

  • 00 — канал сообщений;

  • 01 — изохронный канал;

  • 10 — канал передачи данных;

  • 11 — канал прерываний.

Интервал опроса конечной точки (поле binterval) имеет значение только в том случае, если точка используется для передачи данных по прерываниям. Для изохронных конечных точек это поле всегда равно 1. Для остальных типов конечных точек значение этого поля игнорируется.

В HighSpeed-режиме для изохронных передач и прерываний биты 12 и 11 поля wMaxPacketSize определяют число транзакций внутри фрейма, определяемого значением поля bInterval [2.3].