Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 39

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 166 >> Следующая

Изохронную передачу могут выполнять только полноскоростные устройства. Максимальный размер пакета данных при изохронной передаче — 1023 байта.
Глава 4
Внутренняя организация устройства
Миксер — это устройство, приводящее продукты в замешательство.
4.1. Запросы к USB-устройствам
Все USB-устройства принимают запросы от хост-контроллера и отвечают на них через Основной канал сообщений (см. разд. 3.7). Запросы выполняются при помощи управляющих посылок (см. разд. 3.10.3).
4.1.1. Конфигурационный пакет
Запрос и, его параметры передаются устройству в конфигурационном пакете (Setup Packet). Конфигурационный пакет имеет размер 8 байт (табл. 4.1). Структура конфигурационного пакета на языке Pascal показана в листинге 4.1.
Таблица 4.1. Конфигурационный пакет
Смещение Поле Размер Описание
0 bmRequestType BY TE Тип запроса
1 bRequest BYTE Код запроса
2 wValue WORD Параметр запроса
4 wlndex WORD Индекс или смещение
6 wLength WORD Число байт для передачи
Листинг 4.1. Конфигурационный пакет
TSetupPacket bmRequest bRequest
= packed record : UCHAR; : UCHAR;
Глава 4. Внутренняя организация устройства
97
wLength
wValue
wlndex
Array [1..2] of UCHAR Array [1..2] of UCHAR Array [1..2] of UCHAR
End;
Тип запроса bmRequestType имеет размер 1 байт и состоит из следующих битов:
? [71 направление передачи:
• 0 — от хоста к устройству;
• 1 — от устройства к хосту;
? [6:5] код типа запроса:
• 0 — стандартный запрос;
• 1 — специфический запрос для данного класса;
• 2 — специфический запрос изготовителя;
• 3 — зарезервирован;
? [4:0] код получателя:
• 0 — устройство;
• 1 — интерфейс;
• 2 — другой получатель;
• 4—-31 зарезервированы.
Поле кода запроса определяет операцию, выполняемую запросом. В спецификации USB определены только коды стандартных запросов к устройству (листинг 4.2).
Листинг 4.2. Коды стандартных запросов
// GET_STATUS (определение состояния устройства)
!define USB_REQUEST_GET_STATUS OxOO II CLEAR_FEATURE (сброс устройства)
fdefine USB_REQUEST_CLEAR_FEATURE 0x01
II код 2 зарезервирован
II SET_FEATURE (установить свойство)
fdefine USB_REQUEST_SET_FEATURE 0x03
// код 4 зарезервирован
II SET_ADDRESS (установить адрес)
fdefine USB REQUEST_SET ADDRESS 0x05
98
Часть II. Внутренняя организация USB
II GET_DESCRPTOR (получить дескриптор)
#define USB_REQUEST_GET_DESCRIPTOR 0x06
II SET_DESCRIPTOR (загрузить дескриптор)
#define USB_REQUEST_SET_DESCRIPTOR 0x07
II GET_CONFIGURATION (получить код текущей конфигурации)
#define USB_REQUEST_GET_CONFIGURATION 0x08
II SET_CONFIGURATION (установить конфигурацию)
#defme USB_REQUEST_SET_CONFIGURATION 0x09
// GET_INTERFACE (получить код интерфейса)
#define USB_REQUEST_GET_INTERFACE OxOA
// SET_INTERFACE (установить интерфейс)
!define USB_REQUEST_SET_INTERFACE OxOB
II SYNC_FRAME (кадр синхронизации)
#define USB_REQUEST_SYNC_FRAME OxOC
Значения параметров value и index зависят от типа запроса. В запросах на прием или передачу дескрипторов параметр value содержит тип дескриптора (листинг 4.3) в старшем байте и индекс дескриптора — в младшем.
Листинг 4 3, Типидескрипторов
..............і
// Стандартный дескриптор устройства
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
11 Дескриптор конфигурации
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
II Дескриптор строки
#define USB_STRING_DESCRIPTORJTYPE 0x03
11 Дескриптор интерфейса
#define USB_INTERFACE__DESCRIPTOR_TYPE 0x04
11 Дескриптор конечной точки
#defme USB_ENDPOINT_DESCRIPTORJFYPE 0x05
11 Уточняющий дескриптор устройства
#define DEVICE_QUALIFIER 0x06
11 Дескриптор дополнительной конфигурации
#defme OTHER_SPEED_CONFIGURATION 0x07
// Дескриптор управления питанием интерфейса
#defme INTERFACE_POWER 0x08
Il Дескриптор OTG
#define OTG 0x09
гпава 4. Внутренняя организация устройства
99
Il Отладочный дескриптор #define DEBUG
Il Дополнительный дескриптор интерфейса #define INTERFACE ASSOCIATION
OxOA
OxOB
Поле index обычно используется для задания номера интерфейса или конечной точки. Если поле index задает конечную точку, то оно имеет следующий формат:
? [15:8] зарезервированы и должны содержать нули;
? [7] направление передачи конечной точки:
• 0 — выход (OUT, от хоста);
• 1 — вход (IN, к хосту);
? [6:4] зарезервированы и должны содержать нули;
? [3:0] номер конечной точки.
Если поле index задает номер интерфейса, то оно имеет следующий формат:
? [15:8] зарезервированы и должны содержать нули;
? [7:0] номер интерфейса.
Если устройство получает некорректный или неподдерживаемый запрос, оно должно ответить пакетом типа STALL (см. разд. 3.8).
4.1.2. Стандартные запросы к устройствам Получение состояния GET_STATUS
Запрос get_status позволяет определить состояние устройства, интерфейса или конечной точки. Запрос имеет следующие параметры:
? bmRequestType обозначает тип запроса:
• ЮООООООЬ — получить состояние устройства;
• 10000001b — получить состояние интерфейса;
• 10000010b — получить состояние конечной точки;
? bRequest = 0x00;
? wValue = 0;
? windex — адресант запроса:
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100