Главная » Ассемблер, Железо » Запросы к устройствам USB

0

Все устройства USB принимают запросы от хост-контроллера и отвечают на них через Основной канал сообщений. Запросы выполняются при помощи управляющих посылок.

Запрос и его параметры передаются устройству в Setup-пакете, структура которого показана в табл. 8.3. Каждый Setup-пакет имеет размер 8 байт.

Таблица 8.3. Структура Setup-пакета

Сме

Мнемоника Размер

Описание

щение

 

 

0

bmRequestType BYTE

Характеристики запроса: биты 0-4 — код получателя (0 — устройство, 1 — интерфейс, 2 — другой получатель; коды 4-31 зарезервированы); биты 5-6 — код типа запроса (0 — стандартный запрос, 1 — специфический запрос для данного класса, 2 — специфический запрос изготовителя, 3 — зарезервирован);

бит 7 — направление передачи данных (0 — от хоста к устройству, 1 — от устройства к хосту)

1

bRequest BYTE

Код запроса

2

wValue WORD

Параметр запроса

4

wlndex WORD

Индекс или смещение

6

wUength WORD

Количество байтов, подлежащих передаче на стадии передачи данных

Поле кода запроса определяет тип запроса. В спецификации USB определены только коды стандартных запросов к устройству:

•    0 — GET_STATUS (определить состояние устройства);

•    1 — CLEAR_FEATURE (сбросить свойство);

•    3 — SET_FEATURE (установить свойство);

•    5 — SET_ADDRESS (установить адрес);

•    6 – GETJDESCRIPTOR (получить дескриптор);

•    7 — SET_DESCRIPT0R (загрузить дескриптор);

•    8 — GET_C0NFIGURATI0N (получить код текущей конфигурации);

•    9 — SET_CONFIGURATIDN (установить конфигурацию);

•    10 — GET_INTERFACE (получить код интерфейса);

•    11 — SET INTERFACE (установить интерфейс);

•    12 — SYNCH_FRAME (кадр синхронизации).

Значение параметров wValue, wlndex зависят от типа запроса. В запросах на прием или передачу дескрипторов параметр wValue содержит тип дескриптора в старшем байте и индекс дескриптора — в младшем. Каждому типу дескрипторов поставлен в соответствие определенный числовой код:

•    1 (DEVICE) — дескриптор устройства;

•    2 (CONFIGURATION) — дескриптор конфигурации;

•    3 (STRING) — дескриптор строки;

•    4 (INTERFACE) — дескриптор интерфейса;

•    5 (ENDPOINT) — дескриптор конечной точки.

Поле wlndex обычно используется для задания номера интерфейса или конечной точки. Если поле wlndex задает конечную точку, оно имеет следующий формат:

•    биты 0-3 — номер конечной точки;

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

•    бит 7 — направление передачи конечной точки (0 — OUT, 1 — IN);

•    биты 8-15 зарезервированы и должны содержать нули.

Если поле wlndex задает номер интерфейса, то младший байт (биты 0-7) содержит номер интерфейса, а старший байт не используется (биты 8-15 зарезервированы и должны содержать нули). Запрос Get Status позволяет определить состояние устройства, интерфейса или конечной точки. Запрос имеет следующие параметры:

•    поле bmRequestType уточняет запрос (ЮООООООЬ — получить состояние устройства, 10000001b — получить состояние интерфейса, 10000010b — получить состояние конечной точки);

•    wValue = 0;

•    wlndex — ноль (если запрос обращен к устройству), номер интерфейса или конечной точки;

•    wLength = 2.

По запросу Get Status устройство возвращает 16-разрядное слово состояния, описывающее текущее состояние устройства, интерфейса или конечной точки.

Разряды слова состояния устройства имеют следующее назначение:

•    бит 0 (Self Powered) — режим электропитания (0 — устройство получает питание от шины USB, 1 — от собственного источника энергии);

•    бит 1 (Remote Wakeup) — реакция на сигнал пробуждения от шины USB (0 — устройство игнорирует сигнал, 1 — устройство реагирует на сигнал);

•    биты 2-15 зарезервированы и должны содержать нули.

Слово состояния интерфейса зарезервировано и содержит нули во всех разрядах.

Разряды слова состояния конечной точки имеют следующее назначение:

•    бит 0 (Halt) — признак «зависания» конечной точки (0 — конечная точка функционирует нормально, 1 — передача данных заблокирована);

•    биты 1-15 зарезервированы и должны содержать нули.

Запрос Clear Feature используется для того, чтобы запретить свойство или состояние, указанное значением селектора свойств. Запрос имеет следующие параметры:

•    поле bmRequestType уточняет запрос (00000000b — запретить свойство устройства, 00000001b — запретить свойство интерфейса, ООООООЮЬ — запретить свойство конечной точки);

•    wValue — селектор свойств;

•    wlndex — ноль (если запрос обращен к устройству), номер интерфейса или конечной точки;

•    wLength = 0.

В спецификации USB 1.1 определены только два значения селектора свойств:

•    0 (обозначение — ENDPOI NT HALT, получатель — конечная точка) — блокировка конечной точки;

•    1 (обозначение — DEVICE_REMDTE_WAKEUP, получатель — устройство) — разрешить выполнение сигнала пробуждения.

Передача данных по запросу Clear Feature не производится. Сброс состояния ENDPOINT_HALT разблокирует конечную точку; сброс состояния DEVI CE_REMOTE_WAKEUP лишает устройство способности реагировать на сигнал пробуждения.

Запрос Set Feature используется для того, чтобы разрешить свойство или состояние, указанное значением селектора свойств. Запрос имеет следующие параметры:

•    поле bmRequestType уточняет запрос (00000000b -[3] разрешить свойство устройства, 00000001b— разрешить свойство интерфейса, ООООООЮЬ — разрешить свойство конечной точки);

•    wVal ue — селектор свойства;

•    wlndex — ноль (если запрос обращен к устройству), номер интерфейса или конечной точки;

•    wLength = 0.

Передача данных по запросу Set Feature не производится. Установка состояния ENDPOI NT HALT блокирует конечную точку; установка состояния DEVICE_REMDTE_WAKEUP позволяет устройству реагировать на сигнал пробуждения.

Запрос Set Address позволяет присвоить устройству новое значение адреса на шине USB. Запрос имеет следующие параметры:

•    bmRequestType = 00000000b;

•    wVal ue — адрес устройства;

•    wlndex = 0;

•    wLength = 0.

Передача данных при выполнении запроса Set Address не производится.

Запрос Get Descriptor позволяет получить дескриптор устройства, дескриптор конфигурации или дескриптор строки. Запрос имеет следующие параметры:

•    bmRequestType = 10000000b;

•    wVal ue содержит тип дескриптора в старшем байте (0EVICE — дескриптор устройства, CONFIGURATION — дескриптор конфигурации,

STRING — дескриптор строки) и индекс дескриптора в младшем байте (при запросе дескриптора устройства индекс имеет значение 0);

•     wlndex — ноль (для дескриптора устройства или конфигурации) или идентификатор языка (для дескриптора строки);

•     wLength — размер дескриптора в байтах.

ПРИМЕЧАНИЕ

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

Запрос Set Configuration позволяет задать устройству новую конфигурацию. Запрос имеет следующие параметры:

•    bmRequestType = 00000000b;

•    wVal ue — код конфигурации;

•    wlndex = 0;

•    wLength = 1;

•    передача данных не производится.

При выполнении запроса Set Configuration от хоста к устройству передается один байт данных, содержащий код конфигурации, которую требуется установить.

Запрос Get Interface позволяет получить код текущей настройки для указанного интерфейса. Запрос имеет следующие параметры:

•    bmRequestType= 10000001b;

•    wValue = 0;

•    wlndex — номер интерфейса;

•    wLength = 1.

При выполнении запроса Get Interface от устройства к хосту передается один байт данных, содержащий код текущего варианта настройки интерфейса.

Запрос Set Interface позволяет задать новый вариант настройки для указанного интерфейса. Запрос имеет следующие параметры:

•    bmRequestType = 00000001b;

•    wVal ue — код варианта настройки интерфейса;

•    wlndex — номер интерфейса;

•    wLength = 0.

Передача данных при выполнении запроса Set Interface не производится.

Запрос Synch Frame используется для задания номера кадра синхронизации. Запрос имеет следующие параметры:

•    bmRequestType = 10000010b;

•    wValue = 0;

•    wlndex — номер конечной точки;

•    wLength = 2.

С помощью запроса Set Interface хост передает заданной конечной точке, работающей в изохронном режиме, 16-разрядное слово данных, содержащее номер кадра, который конечная точка должна использовать для синхронизации передачи.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии