Глава 9
Каркас Устройства USB
Устройство USB может быть разделено на три уровня. Нижней уровень - интерфейс шины, который
передает и получает пакеты. Средний уровень направляет данные между интерфейсом
шины и различными конечными точками на устройстве. Конечная точка -
окончательный потребитель или поставщик данных. Она может считаться источником
или стоком для данных. Верхний уровень - функциональные возможности устройства
последовательной шины; например, мыши или интерфейса ISDN.
Эта глава описывает общие атрибуты и операции среднего
уровня устройства USB. Эти атрибуты и операции используются функционально -
специфическими частями устройства, чтобы связаться через интерфейс шины и в
конечном счете с хостом.
Устройство USB имеет несколько возможных состояний.
Некоторые из этих состояний видимы USB и хостом, а другие внутренние состояния
устройства USB. Этот раздел описывает эти состояния.
Этот раздел описывает состояния устройства USB, которые
являются внешне видимыми (см. Рисунок 9-1). Обратите внимание: устройства USB выполняют
операцию сброса в ответ на запрос Сброса upstream порта от хоста. Когда
передача сигналов сброса завершена, устройство USB считается сброшенным.
Рисунок 9-1. Диаграмма Состояний Устройства
Таблица 9-1. Видимые Состояния Устройства
Присоединенное |
Под напряжением |
По умол-чанию |
Адрессованное |
Сконфигу-рированное |
Подвешенное |
Состояние |
Нет |
-- |
-- |
-- |
-- |
-- |
Устройство не
присоединено к USB. Другие атрибуты
не важны. |
Да |
Нет |
-- |
-- |
-- |
-- |
Устройство
присоединено к USB, но не включено. Другие атрибуты не важны. |
Да |
Да |
Нет |
-- |
-- |
-- |
Устройство
присоединено к USB и включено, но не сброшено. |
Да |
Да |
Да |
Нет |
-- |
-- |
Устройство
присоединено к USB, включено и было сброшено, но не был назначен уникальный
адрес. Устройство отвечает на заданный по умолчанию адресе. |
Да |
Да |
Да |
Да |
Нет |
-- |
Устройство
присоединено к USB, включено, было сброшено, и уникальный адрес устройства
назначен. Устройство не сконфигурировано. |
Да |
Да |
Да |
Да |
Да |
Нет |
Устройство
присоединено к USB, включено, было сброшено, имеет уникальный адрес,
конфигурировано, и не подвешенно. Хост может теперь использовать функцию, обеспечивающуюся
устройством. |
Да |
Да |
Да |
Да |
Да |
Да |
Устройство по
минимуму, присоединенном к USB, было сброшено, и минимально включено для
подвешенного уровня. Оно может также иметь уникальный адрес и быть
сконфигурировано для использования. Однако, так как устройство подвешено,
хост не может использовать функцию устройства. |
Устройство USB может быть присоединено или отсоединено от
USB. Состояние устройства USB, когда оно отсоединено от USB, не определено в
этой спецификации. Эта спецификация только выдвигает требования к операциям и
атрибутам, если устройство присоединено.
Устройства USB могут получать мощность от внешнего
источника и-или от концентратора USB, к
которому они присоединены. Устройство USB питающееся из вне называется с
независимым питанием. Эти устройства могут уже быть запитаны прежде, чем они
присоединены к USB. Устройство может поддерживать конфигурацию, как с
независимым питанием так и с питанием от шины. Некоторые устройства
сконфигурированы для поддержания любого источника питания. Другие устройства
сконфигурированы так, что могут использоваться, если устройство запитано из
вне. Устройства сообщают свои возможности об источнике питания через Дескриптор
Конфигурации. О текущем источнике питания сообщается как о части состояния
устройства. Устройства могут изменять свои источники питания в любое время;
например, от само- к питающимся от USB. Если конфигурация поддерживает оба
режима питания, сообщение о максимальном питании для этой конфигурации будет
максимальное питание устройства при
любом режиме.(If a configuration is capable of supporting both
power modes, the power maximum reported for that configuration is the maximum
the device will draw in either mode.) Устройство
должно наблюдать этот максимум, независимо от режима. Если конфигурация
поддерживает только один режим питания и источник питания устройства изменен,
устройство потеряет текущую конфигурацию, адрес и возвратиться в присоединенное
состояние.
Порт концентратора должен быть включен, чтобы обнаружить
изменения состояния порта, включая присоединение и отсоединение. Концентраторы
не обеспечивают никого вниз по иерархии мощностью, пока они не сконфигурируют,
в какой точке они будут обеспечиваться питанием, учитывая требования их
конфигурации и источника питания.
Устройство USB должно быть способно адресоваться внутри определенного
периода времени, когда питание первоначально подано (обратитесь к Главе7). После
того, как было обнаружено присоединение к порту, хост разрешит работать порту,
который также сбросит устройство, присоединенное к порту.(After an attachment
to a port has been detected, the host shall enable the port, which
will also reset the device attached to the port.)
После того, как на устройство было подано питание, оно
должно не отвечать на любые транзакции шины, пока оно не получит сброс от шины.
После получения сброса, устройство считается адресованным в заданном по
умолчанию адресе.
Все устройства USB используют заданный по умолчанию адрес
когда первоначально включены или после того, как устройство сброшено. Каждому
устройству USB назначается уникальный адрес хостом после присоединения или
после того, как оно сброшено. Устройство USB удерживает назначенный адрес в то
время как оно подвешено.
Устройство USB отвечает на запросы по создаваемому по
умолчанию каналу, назначен ли устройству в настоящее время уникальный адрес или
оно использует заданный по умолчанию адрес.
Прежде, чем функция устройства USB может использоваться, устройство должно быть
сконфигурировано. В зависимости от вида устройства, в конфигурацию включена
запись ненулевого значения в регистр конфигурации устройства. Конфигурирование
устройства или по причине изменения альтернативных установок всех состояний и
значений конфигурации, связанные с конечными точками в затронутых интерфейсах,
установит свои значениям по умолчанию.(Configuring a device or changing an alternate
setting causes all of the status and configuration values
associated with endpoints in the affected interfaces to be set to their default
values.) Это действие включает установку переключателя данных
любой конечной точки, использущей переключатели данных, к значению DATA0.
Чтобы экономить мощность, устройства USB автоматически
входят в Подвешенное состояние, когда устройство не наблюдает никакой трафик
шины за определенный период (обратитесь к Главе 7). В подвешенном состоянии,
USB устройство поддерживает любое внутреннее состояние, включая адресованное и
сконфигурированное.
Все устройства должны быть подвешены, если не наблюдалось
активности на шине в течении отрезка времени, определенного в Главе 7.
Присоединенные устройства должны быть подготовлены к подвешиванию, в любое
время когда они запитаны, был ли им назначен адрес не по умолчанию или они были
сконфигурированы. Активность на шине может прекращаться из-за хоста, вводящего
подвешенный режим для самого себя. Кроме того, устройство USB должно также
ввести подвешенное состояние, когда порт концентратора, к которому оно
присоединено, заблокирован. Такой
случай упоминается как выборочное подвешивание.
Устройство USB выходит из
подвешенного режима, когда имеется активность на шине. Устройство USB может
также запрашивать хост выйти из подвешенного режима или выборочного
подвешивания, используя электрическую передачу сигналов, для указания
удаленного пробуждения. Способность устройства, о сообщении удаленного
пробуждения необязательна. Если устройство USB способно к удаленной передаче
сигналов пробуждения, устройство должно поддерживать способность хоста включать
и отключить эту возможность.
Когда устройство USB присоединено или удалено из USB,
хост использует процесс, известный как перенумерация шины, чтобы
идентифицировать и управлять необходимыми изменениями состояний устройств. Когда устройство USB присоединено,
предпринимаются следующие действия:
1.
Концентратор, к которому устройство USB
теперь присоединено, сообщает хосту о событии через ответ изменяя свое
состояние в канале (обратитесь к Главе 11 для подробной информации).(The hub to
which the USB device is now attached informs the host of the event via
a reply on its status change pipe). В этой точке
устройство USB находится в присоединенном состоянии и порт, к которому оно
присоединено, заблокирован.
2.
Хост определяет точный характер
изменения, запрашивая концентратор.
3.
Теперь, когда хост знает порт, к
которому новое устройство было присоединено, хост выдает разблокирование и
команду сброса на этот порт.
4.
Концентратор поддерживает сигнал сброса
к этому порту 10 мс. Когда сигнал сброса завершен, порт разблокирован и
концентратор обеспечивает 100 мА питанием от шины устройство USB. Теперь
устройство USB во включенном состоянии. Все регистры и состояния были сброшены,
и оно отвечает на заданный по умолчанию адрес.
5. Прежде, чем устройство USB получит уникальный адрес, его создаваемый по
умолчанию канал, все еще доступен через
заданный по умолчанию адрес. Хост читает дескриптор устройства, чтобы определить,
какой фактически максимальный размер полезной нагрузки данных может
использовать создаваемый по умолчанию канал этого устройства USB.(The host
reads the device descriptor to determine what actual maximum data
payload size this USB device’s default pipe can use.)
6.
Хост назначает уникальный адрес
устройству USB, переводя устройство в адресованное состояние.
7.
Хост читает информацию конфигурации из
устройства, читая каждую конфигурацию
от нуля до n(The host reads the configuration information from the device by
reading each configuration zero to n.) Этот процесс может потребовать для
завершения несколько кадров.
8.
Базируясь на информации о конфигурации
и на том как устройство USB будет использоваться, хост назначает устройству
значение конфигурации. Устройство теперь в сконфигурированном состоянии, и все
конечные точки в этой конфигурации получили свои описанные характеристики.(The
device is now in the configured state and all of the
endpoints in this configuration have taken on their described characteristics.) Устройство USB может теперь потреблять мощность Vbus, описанную в
дескрипторе конфигурации. С точки зрения устройства оно теперь готово для
использования.
Когда устройство USB удалено, концентратор снова посылает уведомление
хосту. Отсоединение устройства отключает порт, к которому оно было
присоединено. После получения отсоединяющегося уведомления, хост модифицирует
информацию о локальной топологии.
Все устройства USB поддерживают общий набор операций.
Этот раздел описывает эти операции.
Устройства USB могут быть присоединены и удалены в любое
время. Концентратор, который обеспечивает точку присоединения или порт, ответственен за сообщение о любом изменении
в состоянии порта.
Хост разблокировывает порт концентратора, к которому
устройство присоединено после обнаружения присоединения, которое также имеет
эффект сброса устройства. Сброшенное устройство USB имеет следующие
характеристики:
·
Отвечает на заданный по умолчанию адрес
USB(Responds to the default USB address)
·
Несконфигурированный
·
Первоначально не подвешен(Is not
initially suspended)
Когда устройство удалено из порта концентратора, хосту
сообщается относительно удаления. Хост отвечает, отключая порт концентратора, к
которому было присоединено устройство.
Когда устройство USB присоединено, хост ответственен за
назначение уникального адреса устройству после того, как устройство было
сброшено хостом и порт концентратора, к которому устройство присоединено, был
разблокирован.
Устройство USB должно быть сконфигурировано прежде, чем
функция может использоваться. Хост ответственен за конфигурирование устройства
USB. Хост обычно запрашивает информацию о конфигурации от устройства USB, чтобы
определить возможности устройства.
Как часть процесса конфигурации, хост устанавливает
конфигурацию устройства и, где необходимо, устанавливает максимальный размер
пакета для конечных точек, когда требуются такие ограничения.
Внутри одной конфигурации, устройство может поддерживать
множество интерфейсов. Интерфейс -
связанный набор конечных точек, которые представляют одну возможность или
функцию устройства на хосте. Протокол используется, чтобы связаться с этим
связанным набором конечных точек, и цель каждой конечной точки внутри
интерфейса может быть определена как часть класса устройства или определена как
класс определенный продавцом.
Кроме того, интерфейс внутри конфигурации может иметь
альтернативные установки, которые переопределяют номер или характеристики
связанных конечных точек. Если дело обстоит так, устройство должно поддерживать
запросы Получение Интерфейса (Get Interface) и Установка Интерфейса (Set
Interface), чтобы сообщить или выбрать вариант специфической установки для
специфического интерфейса.
Внутри каждой конфигурации, каждый дескриптор интерфейса
содержит поля, которые идентифицируют номер интерфейса и альтернативную
установку. Интерфейсы пронумерованы от нуля до числа параллельных интерфейсов,
обеспечиваемых конфигурацией, минус один. Альтернативные установки
располагаются от нуля до числа альтернативных установок для специфического
интерфейса, минус один. Настройка по умолчанию, когда устройство первоначально
конфигурировано , ноль альтернативных установок.
В поддержку адаптивных драйверов устройства, которые
способны управлять связанной группой устройств USB, дескрипторы устройства и
интерфейса, содержат поля Класс, Подкласс, и Протокол.(In support of adaptive
device drivers that are capable of managing a related
group of USB devices, the device and interface descriptors contain Class,
SubClass, and Protocol fields.) Эти поля используются, чтобы
идентифицировать функцию(и), обеспечиваемую устройством USB и используемые
протоколы, чтобы связаться с функцией(ями) устройства. Код класса назначен
связанному классу устройств, который был определен как часть спецификации USB.
Класс устройств далее подразделен на подклассы и внутри класса или подкласса
код протокола определяет, как программное обеспечение хоста связывается с
устройством.
Данные могут быть перемещены между конечной точкой
устройства USB и хостом одним из четырех способов. Обратитесь к Главе 5 для
ознакомления с четырьмя типами передач.
Некоторые конечные точки могут быть способны к различным типам передач
данных. Однако, сконфигурированная
конечная точка устройства USB использует только один метод передачи данных.
Управление питанием на устройствах USB включает проблемы,
описанные в следующих разделах.
Для питающихся от шины устройств, мощность является
ограниченным ресурсом. Когда хост обнаруживает присоединение питающегося от
шины устройства USB, хост должен оценить требования по питанию устройства. Если
требования по питанию устройства USB превышают доступную мощность, устройство не
будет сконфигурировано.
Никакое устройство USB не может требовать более чем 100
мА когда только присоединено.
Сконфигурированное питающееся от шины устройство USB, присоединенное к
концентратору с независимым питанием может использовать до 500 мА; однако,
некоторые порты могут быть не способны обеспечить эту большую мощность и таким
образом устройство не будет пригодно для использования.
Все устройства USB должны поддерживать подвешенный режим,
который требует менее чем 500 mA. Устройство USB автоматически подвешивается, когда шина неактивна, как
описано ранее.
Удаленное пробуждение позволяет подвешенному устройству
USB сообщать хосту, который может также быть подвешенным. Оно сообщает хосту,
что устройство должно выйти из подвешенного режима, в случае необходимости, и
обслужить внешнее события, которое вызвало подвешивание устройства USB.
Устройство USB сообщает о способности поддерживать удаленное пробуждение в
дескрипторе конфигурации. Если устройство поддерживает удаленное пробуждение,
оно должно также поддерживать возможность быть разблокированным и
заблокированным, используя стандартные запросы USB.
Удаленное пробуждение выполнено, используя электрическую
передачу сигналов, описанную в другом месте в этом документа.
Все устройства USB отвечают на запросы хоста по
создаваемому по умолчанию каналу устройства. Эти запросы осуществляются,
используя передачи управления. Запрос и параметры запроса посылаются устройству
в пакете установки. Хост ответственен за установление значений, переданных в
следующих полях. Каждый пакет установки имеет восемь байтов, используемых
следующим образом:
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bmRequestType |
1 |
Растр |
Характеристики запроса D7 Данные
о направлении xfer D6..5 Тип D4..0 Получатель |
1 |
bRequest |
1 |
Значение |
Специфический запрос (обратитесь к Таблице 9-2) |
2 |
wValue |
2 |
Значение |
Поле размером в слово, которое изменяется согласно
запросу |
4 |
wIndex |
2 |
Индекс или Смещение |
Слово устанавливающее размеры поля, которое изменяется
согласно запросу - обычно используется, чтобы передать индекс или смещение |
6 |
wLength |
2 |
Значение Счетчика |
Число передаваемых байтов, если имеются фазы данных |
Это растровое поле содержит характеристики специфического
запроса. В частности это поле определяет направление передачи данных во второй
фазе передачи управления. Состояние
бита направления игнорируется, если поле wLength
равно нулю, сигнализируя что нет фаз данных.
Спецификация USB определяет ряд Стандартных запросов,
которые должны поддерживать все устройства. Кроме того, класс устройства может
определять дополнительные запросы. Продавец устройства может также определять
запросы, обеспечиваемые устройством.
Запросы могут быть направлены к устройству, интерфейсу на
устройстве, или к специфической конечной точке на устройстве. Это поле также
определяет кому предназначено получить запрос. Когда интерфейс или конечная
точка определены, поле wIndex
идентифицирует интерфейс или конечную точку.
Это поле определяет специфический запрос. Биты Тип
в поле bmRequestType изменяют
значение этого поля. Эта спецификация только определяет значения для поля bRequest,
когда биты сброшены, чтобы обнулить признак стандартного запроса (обратитесь к Таблице 9-2).
Содержание этого поля изменяется согласно запросу. Оно
используется, чтобы передать параметр специфическому устройству при запросе.(It is used to pass a parameter
to the device specific to the request.)
Содержание этого поля изменяется согласно запросу. Оно
используется, чтобы передать параметр специфическому устройству при запросе.
Это поле определяет длину данных, перемещенных в течение
второй фаза передачи управления. Направление передачи данных (от хоста на
устройство или от устройства на хост) отражено в бите Направления поля
bRequestType. Если это поле - нуль, нет фаз передачи данных.
Этот раздел описывает запросы стандартного устройства,
определенные для всех устройств USB (обратитесь к Таблице 9-2).
Устройства USB должны ответить на стандартные запросы
устройства, был ли устройству назначен
адрес не по умолчанию или устройство в настоящее время
сконфигурированно.
Таблица 9-2. Запросы Стандартного Устройства
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000000B |
CLEAR_FEATURE |
Выбор Возможностей |
Нуль |
Нуль |
Нет |
10000000B |
GET_CONFIGURATION |
Нуль |
Нуль |
Один |
Значение Конфигурации |
10000000B |
GET_DESCRIPTOR |
Тип Дескриптора и Индекс Дескриптора |
Нуль или Языковой ID |
Длина Дескриптора |
Дескриптор |
10000001B |
GET_INTERFACE |
Нуль |
Интерфейс |
Один |
Альтернативный Интерфейс |
10000000B |
GET_STATUS |
Нуль |
Нуль |
Два |
Состояние Устройства, Интерфейса, или Конечной точки |
00000000B |
SET_ADDRESS |
Адрес Устройства |
Нуль |
Нуль |
Нет |
00000000B |
SET_CONFIGURATION |
Значение Конфигурации |
Нуль |
Нуль |
Нет |
00000000B |
SET_DESCRIPTOR |
Тип Дескриптора и Индекс Дескриптора |
Нуль или Языковой ID |
Длина Дескриптора |
Дескриптор |
00000000B |
SET_FEATURE |
Выбор Возможностей |
Нуль |
Нуль |
Нет |
00000001B |
SET_INTERFACE |
Альтернативная Установка |
Интерфейс |
Нуль |
Нет |
10000010B |
synch_frame |
Нуль |
Конечная точка |
Два |
Номер Кадра |
Таблица 9-3.
Стандартные Коды Запроса
bRequest |
Значение |
GET_STATUS |
0 |
CLEAR_FEATURE |
1 |
зарезервирован для будущего использования |
2 |
SET_FEATURE |
3 |
зарезервирован для будущего использования |
4 |
SET_ADDRESS |
5 |
GET_DESCRIPTOR |
6 |
SET_DESCRIPTOR |
7 |
GET_CONFIGURATION |
8 |
SET_CONFIGURATION |
9 |
GET_INTERFACE |
10 |
SET_INTERFACE |
11 |
synch_frame |
12 |
Таблица 9-4.
Типы Дескриптора
Типы Дескриптора |
Значение |
DEVICE |
1 |
CONFIGURATION |
2 |
STRING |
3 |
INTERFACE |
4 |
ENDPOINT |
5 |
Выбор возможностей
используются при разблокировании или установки возможностей, типа удаленного
пробуждения, специфики устройства, интерфейса или конечной точки (Feature
selectors are used when enabling or setting features, such as remote wakeup,
specific to a device, interface or endpoint.)
Значения для выбора возможностей представлены ниже.
Выбор возможностей |
Получатель |
Значение |
device_remote_wakeup |
Устройство |
1 |
endpoint_stall |
Конечная точка |
0 |
Если сделан
неподдерживаемый или недопустимый запрос на устройство USB, устройство отвечает
указывая условие останова на канале, используемом для запроса. Каналы
управления, включая создаваемый по умолчанию канал, должны принять транзакцию
установки, даже если они остановлены. Запрос ClearStall используется, чтобы
очистить остановленный канал. После того, как условие останова очищено хостом,
программное обеспечение системы продолжает нормальный доступ к каналу
управления. Если по любой причине, устройство становится неспособным связаться
через создаваемый по умолчанию канал из-за условия ошибки, устройство должно
быть сброшено, чтобы очистить условие и перезапустить создаваемый по умолчанию
канал.
Этот запрос используется, чтобы очистить(clear) или заблокировать
специфическую возможность
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000000B |
CLEAR_FEATURE |
Выбор возможностей |
Нуль |
Нуль |
Нет |
Значения
выбираемых возможностей в wValue,
должны соответствовать получателю. Только значения выбираемых возможностей
устройство, могут использоваться, когда получатель - устройство, только
значения выбираемых возможностей интерфейса, могут использоваться, когда
получатель - интерфейс, и только значения выбираемых возможностей конечной
точки, могут использоваться, когда получатель - конечная точка.
Обратитесь к Разделу 9.4 для, определение тех значений выбора возможностей которые определены для каждого получателя.
Запрос ClearFeature который ссылается на возможности,
которые не могут быть очищены, или которые не существуют, вызовет останов.
Этот запрос
возвращает текущую конфигурацию устройства.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
10000000B |
GET_CONFIGURATION |
Нуль |
Нуль |
Один |
Значение Конфигурации |
Если возвращенное
значение нуль, устройство не сконфигурировано.
Этот запрос
возвращает определенный дескриптор, если дескриптор существует.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
|
||||||
|
10000000B |
GET_DESCRIPTOR |
Тип Дескриптора и Индекс Дескриптора |
Нуль или Языковой ID (обратитесь к Разделу 9.6.5) |
Длина Дескриптора |
Дескриптор |
||||||
Поле wValue определяет, что тип дескриптора
находится в старшем байте и индекс дескриптора в младшем байте (обратитесь к Таблице 9-4). Поле wIndex
определяет Языковой ID для дескрипторов строк или сброшен в нуль для других
дескрипторов. Поле wLength определяет
число возвращаемых байтов. Если дескриптор больше чем поле wLength, возвращаются только начальные байты дескриптора. Если
дескриптор короче чем wLength поле,
устройство указывает конец передачи управления, посылая короткий пакет, когда дальнейшие данные запрошены. Короткий пакет определен как пакет который
короче чем максимальный размер полезной нагрузки или пакет данных NULL
(обратитесь к Главе 5 ).
Стандартный запрос к устройству поддерживает три типа
дескрипторов: Device,
Configuration, и String.
Запрос о конфигурации дескриптора возвращает в одном запросе дескриптор
конфигурации, все дескрипторы интерфейса, и дескрипторы конечной точки для всех
интерфейсов. Первый дескриптор интерфейса немедленно следует за дескриптором
конфигурации. Дескрипторы конечной точки для первого интерфейса следуют за
первым дескриптором интерфейса. Если имеются дополнительные интерфейсы, их
дескриптор интерфейса, и дескрипторы конечной точки следуют за дескрипторами
конечной точки первого интерфейса.
Во всех устройствах должен быть предусмотрен дескриптор
устройства и по крайней мере один дескриптор конфигурации. Если устройство не
поддерживает запрошенный дескриптор, оно отвечает, останавливая канал, используемый для запроса. Ненулевое значение
первого байта дескриптора указывает, что буфер содержит допустимый дескриптор.
Этот запрос
возвращает выбранную альтернативную установку для определенного интерфейса.
BmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
10000001B |
GET_INTERFACE |
Нуль |
Интерфейс |
Один |
Альтернативная Установка |
Некоторые
устройства USB имеют конфигурации интерфейсов, которые имеют взаимо исключающие
установки. Этот запрос позволяет хосту определять выбранную в настоящее время
альтернативную установку.
Этот запрос
возвращает состояние для определенного получателя(This request returns status
for the specified recipient.)
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
10000000B |
GET_STATUS |
Нуль |
Нуль Интерфейс Конечная точка |
Два |
Состояние Устройства, Интерфейса или Конечной точки |
Биты Получателя
поля bRequestType определяют
требуемого получателя. Возвращаемые данные - это текущее состояние
определенного получателем.( The data
returned is the current status of the specified recipient.)
Запрос GetStatus к устройству возвращает следующую информацию
в порядке младшими разрядами назад: (A GetStatus request to a device returns
the following information in little-endian order)
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Зарезервировано (Сброшены в нуль) |
Удаленное Пробуждение |
Независимое Питание |
|||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
Зарезервировано (Сброшены в нуль) |
Поле Независимое Питание указывает, является
ли устройство в настоящее время питающимся от шины или с независимым питанием.
Если D0 сброшен в нуль, устройство питается от шины. Если D0 установлен в
единицу, устройство независимо питающееся. Поле Независимое Питание не может быть изменено Запросами ClearFeature
или SetFeature.
Поле Удаленное
Пробуждение указывает, возможно ли в настоящее время запросить удаленное
пробуждение устройства. Заданный по умолчанию режим для устройств, которые
поддерживают удаленное пробуждение - это заблокированный. Если D1 сброшен в нуль, способность
устройства сообщить об удаленном пробуждении заблокирована. Если D1 установлен
в единицу, способность устройства сообщить о удаленном пробуждении
разблокирована. Поле Удаленное
Пробуждение может изменяться SetFeature, и ClearFeature запрашивает
использование выбор возможностей device_remote_wakeup.
Это поле сброшено в нуль, когда устройство сброшено.
Запрос GetStatus к интерфейсу возвращает следующую
информацию в порядке младшими разрядами вперед:
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Зарезервировано (Сброшены в нуль) |
|||||||
|
|
||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
Зарезервировано (Сброшены в нуль) |
Если запрос сделан
к конечной точке, то в поле wIndex была определена конечная точка . Старший байт xIndex сброшен в нуль, и младший байт
содержит номер конечной точки как показано ниже:
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
|||
|
Направление |
Зарезервировано (Сброшены в нуль) |
Номер Конечной точки |
||||||||
Для Входных(IN)
конечных точек, D7 установлен в единицу. Для Выходных(OUT) конечных точек, D7
сброшен в нуль.
Запрос GetStatus к конечной точке возвращает следующую
информацию:
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
Зарезервировано (Сброшены в нуль) |
Останов |
||||||
|
|
|
|||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
Зарезервировано (Сброшены в нуль) |
Если в настоящее
время конечная точка остановлена, поле Останов
установлено в единицу. Иначе поле Останов сброшено в нуль. Поле Останов может быть изменено с запросами
SetFeature и ClearFeature с выбором возможностей endpoint_stall.
Когда происходит установление поля запросом SetFeature, конечная точка
проявляет то же самое поведение останова, как будто поле было установлено
аппаратным условием. Если условие вызвавшее останов было удалено, результат
очищения поля останов в конечной точке больше не возвращает конечную точку в
состояние останова.(If the condition causing a stall has been removed, clearing
the stall field results in the endpoint no longer returning a stall status.)
Для этих конечных точек, использующих переключатель данных, результатом
очищения остановленной конечной точки , будет повторное инициализирование
переключателей данных к DATA0.(For this endpoints using a data toggle, clearing
a stalled endpoint results in the data toggle being reinitialized to data0.) Это поле
сбрасывается в нуль после запроса SetInterface или SetConfiguration.
Этот запрос
устанавливает адрес устройства для всех будущих обращений к устройству.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000000B |
SET_ADDRESS |
Адрес Устройства |
Нуль |
Нуль |
Нет |
Поле wValue определяет адрес устройства используемый во всех
последующих обращениях.
Как отмечено в другом месте, фактически запросы могут
состоять их трех стадий. На первой стадии, устройству посылается пакет
установки. В необязательной второй стадия, данные перемещаются между хостом и
устройством. В заключительной стадии, перемещается состояние между хостом и
устройством. Направление данных и передачи состояния зависит от того, посылает
ли хост данные на устройство, или устройство посылает данные на хост.
Направление передача стадии состояния всегда противоположно направлению стадии
данных. Если не имеется никакой стадии данных, направление стадии состояния от
устройства к хосту.
Стадия следующая после начального пакета установки имеет
тот же самый адрес устройства как пакет установки(Stages after the initial
setup packet assume the same device address as the setup packet.) Устройство
USB не изменяет адрес устройства, пока стадия состояния этого запроса не
завершена успешно. Обратите внимание, что в этом различие между этим запросом и
всеми другими запросами. Для всех других запросов, обозначенная операция должна
быть завершена до стадии состояния.
Этот запрос
устанавливает конфигурацию устройства.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000000B |
SET_CONFIGURATION |
Значение Конфигурации |
Нуль |
Нуль |
Нет |
Поле wValue определяет требуемую конфигурацию. Это значение
должно быть нулем или соответствовать значению конфигурации из дескриптора
конфигурации. Если это значение нуль, устройство помещается в
несконфигурированное состояние.
Это
необязательный запрос. Если устройство поддерживает этот запрос, существующие
дескрипторы могут модифицироваться, или могут добавляться новые дескрипторы.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
|
||||||
|
00000000B |
SET_DESCRIPTOR |
Тип Дескриптора и Индекс Дескриптора |
Языковой ID (обратитесь к Разделу 9.6.5) |
Длина Дескриптора |
Дескриптор |
||||||
Поле wValue определяет, что тип дескриптора расположен в старшем
байте и индекс дескриптора в младшем байте (обратитесь к Таблице 9-4). Поле wIndex определяет Языковой ID для строковых дескрипторов или
сброшен в нуль для других дескрипторов. Поле wLength
определяет число байтов, которые передаются от хоста к устройству.
Этот запрос используется, чтобы устанавливать или
разблокировать специфические возможности.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000000B |
SET_FEATURE |
Выбор возможностей |
Нуль |
Нуль |
Нет |
Значения выбора
возможностей в wValue должны соответствовать
получателю. Только значения выбираемых возможностей устройства, могут
использоваться, когда получатель - устройство, только значения выбираемых
возможностей интерфейса, могут использоваться, когда получатель - интерфейс, и
только значения выбираемых возможностей конечной точки, могут использоваться,
когда получатель - конечная точка
Обратитесь к
Разделу 9.4 для, определение тех значений выбора возможностей которые определены для каждого получателя. Запрос
SetFeature который ссылается на возможность, которая не может быть установлена,
или которая не существует, вызовет останов (A SetFeature request that references
a feature that cannot be set or that does not exist causes a stall.)
Этот запрос
позволяет хосту выбирать альтернативные установки для определенного интерфейса.
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000001B |
SET_INTERFACE |
Альтернативная Установка |
Интерфейс |
Нуль |
Нет |
Некоторые
устройства USB имеют конфигурации с интерфейсами, которые имеют взаимо
исключающие установки. Этот запрос позволяет хосту выбирать требуемую
альтернативную установку.
Этот запрос используется, чтобы установить и затем
сообщать кадр синхронизации конечной точки(This request is used to set and then
report an endpoint’s synchronization frame.)
bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Данные |
00000010B |
synch_frame |
Нуль |
Конечная точка |
Два |
Номер Кадра |
Когда конечная
точка поддерживает изохронные передачи, конечная точка может также требовать
изменить размер по кадровой передачи согласно специфическому шаблону.(When an endpoint
supports isochronous transfers, the endpoint may also require per frame
transfers to vary in size according to a specific pattern.) Хост и конечная точка должен договориться о том, в каком кадре начать
повторять шаблон.(The host and the endpoint must agree on which frame the
repeating pattern begins.) Этот запрос заставляет конечную точку начинать
контролировать номер SOF кадра, чтобы проследить позицию данного кадра в
шаблоне. Номер кадра, в котором начался
шаблон, возвращается хосту. Этот тот
номер кадра, который передан конечной точке последним SOF до первого кадра
шаблона.
Это значение используется только в изохронных передачах
данных, использующих неявную синхронизацию шаблона. Если конечная точка не
изохронная или не использует этот метод, этот запрос не обеспечивается конечной
точкой и возвращает останов.
Начальный кадр сбрасывается в нуль сбросом устройства
или, конфигурируя конечную точку через
запрос SetConfiguration или SetInterface.
Устройства USB сообщают свои атрибуты, использующие
дескрипторы. Дескриптор - структура данных с определенным форматом. Каждый
дескриптор начинается с поля шириной в байт, которое содержит общее число
байтов в дескрипторе, который следует за полем шириной в байт, определяющее тип
дескриптора.
Использование дескрипторов позволяет компактно хранить
атрибуты индивидуальных конфигураций, потому что каждая конфигурация может
многократно использовать дескрипторы или части дескрипторов из других
конфигураций, которые имеют те же самые характеристики. Таким способом,
дескрипторы похожи на индивидуальные записи данных в реляционной базе данных.
В соответствующих местах, дескрипторы содержат ссылки на
строковые дескрипторы, которые предоставляют отображаемую информацию,
описывающую дескриптор, в удобной для прочтения человеком форме. Включение
строковых дескрипторов необязательно. Однако, поля ссылок внутри дескрипторов
обязательны. Если устройство не поддерживает строковые дескрипторы, в строковых
полях должны быть ссылки, сброшенные в нуль, чтобы указать, что нет доступных
строковых дескрипторов.
Если дескриптор возвращается со значением в поле длины,
которое является меньше чем определенно этой спецификацией, такой
дескриптор недопустим и должны быть
отклонен хостом. Если дескриптор возвращается со значением в поле длины,
которое является большим чем определенно этой спецификацией, дополнительные
байты, игнорируются хостом, но
следующий дескриптор размещается используя возвращенную длину, а не ожидаемую
длину.
Класс и определенные продавцом дескрипторы могу быть
получены одним из двух способов. Класс и определенные продавцом дескрипторы,
которые связаны со стандартными дескрипторами,
возвращаются в том же самом буфере данных как стандартный дескриптор
немедленно после связанного стандартного дескриптора.
Если, например, класс или определенный продавцом
дескриптор связан с дескриптором интерфейса, связанные , класс или определенный
продавцом дескриптор помещаются при возвращении в буфер между дескриптором
интерфейса и дескрипторами конечной точки интерфейса, в ответ на запрос
GET_CONFIGURATION_DESCRIPTOR. Длина
стандартного дескриптора не увеличивается, чтобы разместить расширение для
класса или определенного продавцом дескриптора. Класс или определенный
продавцом дескриптор придерживаются того же самого формата как стандартные
дескрипторы с полями длины и типа как первые два байта специфического
дескриптора.
Класс или определенный продавцом дескриптор, которые не
связаны со стандартным дескриптором, можно получить используя запросы класса
или определенные продавцом.
Дескриптор устройства описывает общую информацию
относительно устройства USB. Она включает информацию, которая применяется
устройством глобально и во всех его конфигурациях. Устройство USB имеет только один дескриптор устройства.
Все устройства USB имеют нулевую конечную точку,
используемую созданным по умолчанию каналом. Максимальный размер пакета нулевой
конечной точки устройства описан в дескрипторе устройства. Особенности
конфигурации конечной точки и интерфейса(ов) описаны в дескрипторе
конфигурации. Конфигурация и интерфейс(ы) не содержатся в дескрипторе конечной
точки для нулевой конечной точки. Отличные от максимального размера пакета, характеристики
нулевой конечной точки определяются этой спецификацией и одинаковы для
всех устройств USB.
Поле bNumConfigurations содержит количество конфигураций,
поддерживаемых устройством.
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bLength |
1 |
Number |
Размер этого дескриптора в байтах |
1 |
bDescriptorType |
1 |
Constant |
Тип дескриптора DEVICE |
2 |
bcdUSB |
2 |
BCD |
Число Характеризующее Версию Спецификации USB
Представленной в Двоично-кодированном Десятичном виде ( Т.е., 2.10 это
0x210). Это поле определяет версию
Спецификации USB, с которой согласованы устройство и дескрипторы. |
4 |
bDeviceClass |
1 |
Class |
Код Класса (назначенный USB). Если это поле сброшено в 0, каждый интерфейс внутри
конфигурации определяет собственную информацию о классе, и различные
интерфейсы функционируют независимо. Если это поле имеет значение между 1 и 0xFE,
устройство поддерживает различные спецификации класса на различных
интерфейсах, и интерфейсы не могут функционировать независимо. Это значение характеризует определение
класса, используемое для составных интерфейсов. (Например, устройство CD-ROM с интерфейсами звука и цифровых
данных, которые требуют управления передачей вынуть CD или начать его
вращение.) Если в
этом поле значение 0xFF, класс устройства - определен продавцом. |
Смещение |
Поле |
Размер |
Значение |
Описание |
5 |
bDeviceSubClass |
1 |
SubClass |
Код Подкласса (назначенный USB). Эти коды определены значением поля bDeviceClass. Если поле bDeviceClass
сброшено в 0, это поле должно также быть сброшено в 0. If the bDeviceClass Если поле
не установлено к 0xFF, все значения зарезервированы для назначения USB. |
6 |
bDeviceProtocol |
1 |
Protocol |
Код Протокола (назначенный USB). Эти коды определены значением полей bDeviceClass и bDeviceSubClass. Если устройство поддерживает протоколы определенные классом основанные на
устройстве в противоположность основанных на интерфейсе, этот код
идентифицирует протоколы, которые устройство использует как определено
спецификацией класса устройства(If a device supports class-specific
protocols on a device basis as opposed to an interface basis, this
code identifies the protocols that the device uses as defined by the
specification of the device class.) Если это поле сброшено в 0, устройство не использует
протоколы определенные классом основанные на устройстве. Однако, оно может использовать протоколы
определенные классом основанные на интерфейсе. Если значение этого поля 0xFF, устройство использует
протокол определяемый продавцом основанный на устройстве. |
7 |
bMaxPacketSize0 |
1 |
Number |
Максимальный размер пакета для нулевой конечной точки
(допустим только 8, 16, 32, или 64 ) |
8 |
idVendor |
2 |
ID |
ID продавца ( назначенный USB) |
10 |
idProduct |
2 |
ID |
ID изделия
(назначенный изготовителем) |
12 |
bcdDevice |
2 |
BCD |
Число характеризующее версию Устройства в
двоичнокодированном десятичном виде |
14 |
iManufacturer |
1 |
Index |
Индекс строкового дескриптора, описывающего
изготовителя |
15 |
iProduct |
1 |
Index |
Индекс строкового дескриптора, описывающего изделие |
16 |
iSerialNumber |
1 |
Index |
Индекс строкового дескриптора, описывающего серийный
номер устройства |
17 |
bNumConfigurations |
1 |
Number |
Число возможных конфигураций |
Дескриптор конфигурации описывает информацию о
специфической конфигурации устройства. Дескриптор содержит поле
bConfigurationValue значение которого используется как параметр в запросе Set
Configuration, заставляя устройство переходить в описанную конфигурацию.
Дескриптор описывает число интерфейсов, обеспеченных
конфигурацией. Каждый интерфейс может функционировать независимо. Например,
устройство ISDN могло бы быть сконфигурировано с двумя интерфейсами, каждый
обеспечивает 64 КБ двунаправленный канал, имеющими отдельные источники или
стоки данных на хосте. Другая
конфигурация могла бы представлять устройство ISDN как один интерфейс, соединяя
два канала в один 128 КБ двунаправленный канал.
Когда хост запрашивает дескриптор конфигурации,
возвращаются все дескрипторы относящиеся к интерфейсу и конечной точке
(обратитесь к Разделу 9.4.2).
Устройство USB имеет один или более дескрипторов конфигурации. Каждая конфигурация имеет один или более
интерфейсов, и каждый интерфейс имеет одну или более конечных точек. Конечная
точка не общая для интерфейсов внутри одной конфигурации, если конечная точка
не используется альтернативными установками того же самого интерфейса. Конечные
точки могут быть общими для интерфейсов, которые являются частью различных
конфигураций без этого ограничения.(Endpoints may be shared among interfaces
that are part of different configurations without this restriction.)
Как только устройства сконфигурированы они могут
поддерживать ограниченные установки конфигурации. Если специфический интерфейс
имеет альтернативные установки, альтернатива может быть выбрана после
конфигурации. Внутри интерфейса, максимальный размер пакета изохронной конечной
точки может быть также скорректирован.
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bLength |
1 |
Number |
Размер этого дескриптора в байтах |
1 |
bDescriptorType |
1 |
Constant |
CONFIGURATION |
2 |
wTotalLength |
2 |
Number |
Общая длина данных, возвращаемых для
этой конфигурации. Включает
объединенную длину всех дескрипторов (конфигурации, интерфейса, конечной
точки, и класса или определений продавца) возвращенных для этой конфигурации. |
4 |
bNumInterfaces |
1 |
Number |
Число интерфейсов, поддерживаемых
этой конфигурацией |
5 |
bConfigurationValue |
1 |
Number |
Значение, используемое как параметр,
Set Configuration, при выборе этой конфигурации |
6 |
iConfiguration |
1 |
Index |
Индекс строкового дескриптора,
описывающего эту конфигурацию |
7 |
bmAttributes |
1 |
Bitmap |
Характеристики конфигурации D7 Питание
от Шины Если конфигурация устройства
поддерживает удаленное пробуждение, D5 установлен в 1. |
Смещение |
Поле |
Размер |
Значение |
Описание |
8 |
MaxPower |
1 |
mA |
Максимальное
потребление мощности устройством USB от входной шины в этой специфической
конфигурация, когда устройство полностью работоспособно. Выраженный в 2 мA
модулях (т.е., 50=100 мA). (Expressed
in 2 mA units (i.e., 50 = 100 mA). Обратите
внимание: конфигурация устройства сообщает, является ли конфигурация
питающейся от шины или с независимым питанием. Состояние устройства сообщает,
является ли устройство в настоящее время с независимым питанием. Если устройство отсоединено от внешнего
источника питания, оно модифицирует состояние устройства показывая, что оно
больше не независимо питающееся. Устройство не
может увеличивать, потребляемую мощность от шины, когда оно теряет внешний
источник питания, выше сообщенного конфигурацией количества. Если устройство
может продолжать функционировать когда отсоединено от внешнего источника
питания, оно продолжает это делать. Если устройство не может продолжать
функционировать, оно отказывается от операций, которые больше не может
поддерживать. Программное обеспечение
хоста может определить причину отказа,
проверяя состояние и отмечает потерю источника питания устройства. |
Этот дескриптор описывает специфический интерфейс в
случае связанной конфигурации (This descriptor describes a specific interface
provided by the associated configuration.)
Конфигурация обеспечивает один или более интерфейсов, каждый с
собственными дескрипторами конечной точки, описывающими уникальный набор
конечных точек внутри конфигурации. Когда конфигурация поддерживает более чем
один интерфейс, конечные точки для специфического интерфейса следуют сразу за
дескриптором интерфейса в данных, возвращаемых запросом Get Configuration. Дескриптор
интерфейса всегда возвращается как часть дескриптора конфигурации. К нему
нельзя непосредственно обращаться запросом Get или Set Descriptor.
Интерфейс может включать альтернативные установки,
которые позволяют изменять конечные точки и-или их характеристики после того,
как устройство было сконфигурировано. В настройке по умолчанию для интерфейса,
альтернатива всегда установлена в нуль.
Запрос Set Interface используется, чтобы выбрать альтернативную
установку или возвратиться к настройке по умолчанию. Запрос Get Interface
возвращает выбранную альтернативную установку.
Альтернативные установки позволяют части конфигурации
устройства быть измененными, в то время как другие интерфейсы остаются в
работе. Если конфигурация имеет альтернативные установки для одного или более
интерфейсов, дескриптор отдельного интерфейса и связанные с ним конечные точки
включаются в каждую установку.
Если конфигурация устройства обеспечивает один интерфейс
с двумя альтернативными установками, дескриптор конфигурации будет
сопровождаться дескриптором интерфейса с полями bInterfaceNumber и bAlternateSetting
установленными в нуль и затем дескрипторами конечной точки для этой установки,
сопровождаться другим дескриптором интерфейса и связанными с ним дескрипторами
конечной точки. (If a device configuration supported a single interface with
two alternate settings, the configuration descriptor would be followed by an
interface descriptor with the bInterfaceNumber
and bAlternateSetting fields set to
zero and then the endpoint descriptors for that setting, followed by another
interface descriptor and its associated endpoint descriptors.) В дескрипторе
второго интерфейса поле bInterfaceNumber, было бы также установлено в нуль, но
поле bAlternateSetting дескриптора
второго интерфейса, было бы установлено в единицу.
Если интерфейс использует только нулевую конечной точки,
никакие дескрипторы конечной точки не следуют за дескриптором интерфейса, и
интерфейс определяет интерфейс запроса(the interface identifies a request
interface), который использует создаваемый по умолчанию канал, присоединенный к
нулевой конечной точки. В этом случае, поле bNumEndpoints
должно быть установлено в нуль.
Дескриптор интерфейса никогда не включает нулевую
конечную точку в число конечных точек.
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bLength |
1 |
Number |
Размер этого дескриптора в байтах |
1 |
bDescriptorType |
1 |
Constant |
Тип Дескриптора
INTERFACE |
2 |
bInterfaceNumber |
1 |
Number |
Номер интерфейса. Zero-based value, идентифицирующее
индекс в массиве параллельных интерфейсов, обеспечиваемых этой конфигурацией. |
3 |
bAlternateSetting |
1 |
Number |
Значение, используемое для выбора альтернативной
установки определяемого предшествующим полем интерфейса |
4 |
bNumEndpoints |
1 |
Number |
Число конечных точек, используемых этим интерфейсом (не
включая нулевую конечную точку). Если
это значение 0, этот интерфейс использует только нулевую конечную точку. |
5 |
bInterfaceClass |
1 |
Class |
Код Класса (назначенный USB) Если это поле сброшено в 0, интерфейс не принадлежит
никакому определенному USB классу устройств. Если это поле установлено в 0xFF, класс интерфейса
определяется продавцом. Все другие значения зарезервированы для назначения USB. |
6 |
bInterfaceSubClass |
1 |
SubClass |
Код Подкласса (назначенный USB). Эти коды определяются
значением поля bInterfaceClass. Если поле bInterfaceClass
сброшено в 0, это поле должно также быть сброшено в 0. Если поле bInterfaceClass
не установлено к 0xFF, все значения зарезервированы для назначения USB. |
Смещение |
Поле |
Размер |
Значение |
Описание |
7 |
bInterfaceProtocol |
1 |
Protocol |
Код Протокола (назначенный USB). Эти коды определяются
значением полей bInterfaceClass и bInterfaceSubClass. Если интерфейс
поддерживает запросы определяемые классом, этот код определяет протоколы,
которые устройство использует как определено спецификацией класса устройства. Если это поле сброшено в 0, устройство не использует
протокол определяемый классом на этом интерфейсе. Если это поле установлено к 0xFF, устройство использует
для этого интерфейса протокол определенный продавцом. |
8 |
iInterface |
1 |
Index |
Индекс строкового дескриптора, описывающего этот
интерфейс |
Каждая конечная точка, используемая для интерфейса имеет
собственный дескриптор. Этот дескриптор
содержит информацию, требуемую хостом, чтобы определить требования по
пропускной способности каждой конечной точки. Дескриптор конечной точки всегда
возвращается как часть дескриптора конфигурации. К нему нельзя непосредственно обращаться запросом Get или Set
Descriptor. Нет никакого дескриптора у нулевой конечной точки.
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bLength |
1 |
Number |
Размер этого дескриптора в байтах |
1 |
bDescriptorType |
1 |
Constant |
Тип дескриптора ENDPOINT |
2 |
bEndpointAddress |
1 |
Endpoint |
Адрес конечной точки на устройстве USB, описываемого
этим дескриптором. Адрес закодирован
следующим образом: Bit 0..3: Номер конечной точки |
Смещение |
Поле |
Размер |
Значение |
Описание |
3 |
bmAttributes |
1 |
Bit Map |
Это поле описывает атрибуты конечной точки, когда она
сконфигурирована, используя bConfigurationValue. Bit 0 .. 1: Тип Передачи Все другие биты зарезервированны |
4 |
wMaxPacketSize |
2 |
Number |
Максимально возможный при посылке или получении размер пакета этой
конечной точки, когда выбрана эта конфигурация. Для изохронных конечных точек, это значение используется, чтобы
резервировать время шины в расписании, требуемой на кадр полезной нагрузки
данных.(For isochronous endpoints, this value is used to reserve the bus time
in the schedule, required for the per frame data payloads.) Канал может, на
продолжающемся основании(on an ongoing basis), фактически использовать
меньшее количество пропускной способности чем зарезервированное. В случае необходимости, устройство
сообщает фактическую пропускную способность, используемую через нормальные,
не определенные USB механизмы. Конечные точки прерываний, bulk, и управления могут
посылать меньшие полезные нагрузки данных, но завершение передачи, может
потребовать а может и нет вмешательства в перезапуск. Обратитесь к Главе 5 для подробной информации. |
6 |
bInterval |
1 |
Number |
Интервал при
опросе конечной точки для передач данных. Выражен в миллисекундах. Это поле игнорируется для конечных точек bulk и
управления. Для изохронных конечных
точек это поле должно быть установлено в1. Для конечных точек прерывания, это
поле может иметь значение от 1 до 255. |
Дескрипторы строк являются необязательными. Как отмечено
ранее, если устройство не поддерживает строковые дескрипторы, все ссылки к
строковым дескрипторам внутри устройства, конфигурация, и дескрипторах
интерфейса должна быть сброшены в нуль.
Строковые дескрипторы используют кодирование UNICODE как
определено в Ñòàíäàðòå
Unicode, Международного Кодирования Символов, Версия 1.0, Тома 1 и 2, The Unicode Consortium, Addison-Wesley Publishing Company,
Reading, Штат Массачусетс. Строки в устройстве USB могут поддерживать множество языков. При
запросе строкового дескриптора, запросчик определяет требуемый язык, используя
шестнадцатиразрядный языковой ID (LANGID) определенный Microsoft для Windows как описано в Разработка Международного Программного обеспечения для Windows 95 и Windows NT, Nadine
Kano, Microsoft Press, Redmond, Вашингтон. Строковый индекс 0 для
всех языков возвращает массив двух байтных кодов LANGID поддерживаемых
устройством.(String index 0 for all languages returns an
array of two-byte LANGID codes supported by the device.) Устройство USB может опускать
все дескрипторы строк.
Дескриптор строки UNICODE - не завершается NULL. Длина
строки вычисляется вычитая два из значения первого байта дескриптора.
Смещение |
Поле |
Размер |
Значение |
Описание |
0 |
bLength |
1 |
Число |
Размер этого дескриптора в байтах |
1 |
bDescriptorType |
1 |
Константа |
Тип дескриптора STRING |
2 |
bString |
N |
Число |
Строка в формате UNICODE |
Все устройства должны поддерживать определенные выше
списки и дескрипторы. Большинство устройств обеспечивает дополнительные списки
и возможности, дескрипторы для
расширений зависящих от устройств. Кроме того, устройства могут
обеспечивать расширение сервисов, которые являются общими для группы устройств.
Чтобы определить класс устройств, нужно предоставить следующую информацию,
которая полностью определит вид и поведение класса устройства.
Если класс требует любого специфического определения
стандартных дескрипторов, определение класса должно включить такие требования
как часть определения класса(If the class requires any
specific definition of the standard descriptors, the class definition must
include those requirements as part of the class definition.) Кроме того, если класс определяет набор расширяющий стандартных дескрипторов,
они должны также быть полностью определены в определении класса(In addition, if
the class defines a standard extended set of descriptors, they must also be
fully defined in the class definition.) Любые
определения расширений дескрипторов должны придерживаться подхода,
используемого стандартными дескрипторами; например, все дескрипторы должны
начаться с поля длины.
Когда класс устройств стандартизирован, должны быть
включены в определение класса устройства интерфейсы, используемые устройствами,
и то, как используются конечные точки. Устройства могут далее расширять
определение класса частными возможностями, пока они удовлетворяют основному
определению класса.
Все запросы относящиеся к классу должны быть определены.
Модель связи USB характеризует данные и трафик управления
между хостом, и данным устройством через взаимосвязь USB. Хост и устройство
разделен на отдельные уровни, показанные на Рисунке 9-2.
Рисунок 9-2. Модель Межуровневой Связи
Фактическая связь на хосте, как обозначено вертикальными
стрелками, происходит через SPIs. Межуровневая связь на устройстве зависит от
реализации. Между хостом и устройством, в конечном счете вся связь должна
происходить с помощью физического провода USB. Однако, имеются логические
интерфейсы устройства-хоста между горизонтальными уровнями. Между клиентским
программным обеспечением, резидентным на хосте, и функцией, обеспечиваемой
устройством, связь обычно осуществляется в соответствии с соглашением,
основанным на потребностях приложения, использующего в настоящее время
устройство и возможностей обеспечиваемых устройством. Это взаимодействие клиент - функция выдвигает требования для всех
под уровней и их интерфейсов.
Этот раздел
описывает модель связи с точки зрения устройства и его уровней. Рисунок 9-3
иллюстрирует, основанный на полном просмотре, представленном в Главе 8, виде
связи устройства с хостом.
Рисунок 9-3.
Набор Связей в Устройстве
Интерфейс шины USB управляет взаимодействиями на
электрическом и протокольном уровнях (обратитесь к Главам 7 и 8). Уровень
устройства USB представляет устройство USB на хост, как однородную абстракцию.
Это тот уровень, который прежде всего описан здесь. Функциональный уровень
использует возможности, предоставляемые уровнем устройства USB, объединенные в
данном интерфейсе, поддерживает требования хост-основанного приложения. (to
support the requirements of a host-based application.)
Устройство USB действует как набор конечных точек,
которые способны обеспечить различные типы каналов. Каждый канал может
поддерживать один из следующих типов передачи одновременно:
·
Управление
·
Изохронный
·
Прерывание
·
Bulk
Эти типы передачи описаны более подробно в Главе 5. Однако, каждый из типов передачи, требует,
чтобы связанная конечная точка вела себя в некотором режиме.( Each of the
transfer types, however, requires the associated endpoint to behave in a
certain fashion.) Данная конечная точка может поддерживать ряд типов передачи.
Однако, только один канал связывается с конечной точкой, конечная точка
использует только один тип передачи. В этом разделе, при обсуждении поведения
конечной точки для данного типа передачи, принимается, что конечная точка была
связана с каналом, обеспечивающим соответствующий тип передачи. Основные
механизмы связи, используемые конечными точками это:
·
Режим Канала
·
Синхронизация Начала Кадра (SOF)
·
Квитирование
·
Переключение Данных
Режим канала указывает, является ли режимом поток данных
в канале сообщением или потоком. Устройства могут использовать SOF
сгенерированый хостом, чтобы синхронизировать свои внутренние часы. Устройства
могут использовать квитирования и переключатели данных, для реализации работы с
ошибками и управления потоком данных.
Трафик между клиентом и функцией может требовать
некоторой скорости передачи. Клиент, USB и функция будут использовать, в лучшем
случае немного различные скорости часов. Чтобы гарантировать, что, все
требуемые данные могут быть поставлены с минимальным требованием буферизации,
различные часы, должны быть синхронизированы. Обратитесь к Главе 5 для
ознакомления с параметрами синхронизации. Дополнительно, чтобы поддерживать
возможность своевременной поставки, подразумеваемую синхронизацией часов,
размер пакетов данных, которые передают между хостом и устройством будет
нормализован так, чтобы изменения в размере через какое-то время были
минимальны.(Additionally, in order to support the just-in-time delivery
capability implied by clock synchronization, the size of the data packets
transmitted between the host and the device will be normalized such that
variations in size over time are minimized.) Для
поддержания потока данных, в котором потеря данных является возможной, пока
потеря может быть точно сообщена, могут использоваться типовые заголовки хоста
и устройства, которые сообщают ожидаемые объемы передачи. Обратитесь к Главе 5
для определения типовых заголовков.
Эти базисные механизмы связи, с точки зрения устройства,
описаны более подробно далее. Каждый из различных типов передачи использует эти
базисные механизмы связи различными способами.
Этот раздел описывает более подробно базисные механизмы
связи которые обеспечиваются уровнем Устройства USB.
Канал поддерживает режимы передачи потока или сообщения.
В режиме потока, поток данных, рассматривается как однонаправленный
последовательный поток выборок. В режиме сообщения, данные доставляются как
связанный набор байтов. В режиме сообщений каналы, рассматриваются как
способные, быть двунаправленными.
В режиме потока канал всегда однонаправлен. Когда в
режиме потока, конечная точка ожидает получать маркер ей будут посланы или
данные запрашиваемые конечной точке или подготовленные для нее данные.
Количество посланных данных всегда будет меньше или равно чем текущий
MaxPacketSize для конечной точки.
Передачи сообщений начинаются командой с хоста на
устройство. Устройство может отвечать командой с данными, хост может передавать
команду с данными для устройства, или команда может требовать, чтобы данные не
передавались, в этом случае будет послан пакет данных NULL.(The device may
respond to the command with data, the host may follow the command with
data for the device, or the command may require no data to be transmitted in
which case a NULL data packet will be sent.) В режиме
сообщения, конечная точка должна следить за тем, в какой, определенной режимом
последовательности, фазе она находится. Конечная точка
ожидает первую транзакцию последовательности сообщений, которая устанавливает
последующую связь. После того, как установка получена, конечная точка обычно
ожидает маркер, запрашивающий конечную точку послать данные (маркер IN) или
приводящий ее в готовность для получения данных (OUT маркер). Конечная точка
будет знать направление последующих транзакций, из команды установки, которая
начала последовательность транзакций. Некоторые команды установки не требуют
последующих транзакций от или к конечной точке. Транзакции Установки всегда
восемь байтов или меньше. Последующие транзакции будут всегда иметь размер,
меньший или равный текущему MaxPacketSize конечной точки.
Хост выдает специальный маркер SOF на шину в регулярно
установленные интервалы. Допуск ошибки
интервала между SOFs(обратитесь к Главе 7) составляет 1
мс. Конечные точки могут использовать
этот маркер, чтобы синхронизировать свои связанные часы с часами USB. Это дает
возможность конечным точкам, согласовать свою скорость приема или выдачи данных
со скоростью хоста.
Не всем конечным точкам требуется синхронизации SOF.
Некоторые конечные точки, требующие синхронизацию имеют часы, которые не могут
быть синхронизированы с обеспечиваемыми USB 1 мс часами шины. Такие устройства
имеют две возможности. Они могут пытаться взять всю синхронизацию USB на себя
или такие устройства могут периодически корректировать свою скорость передачи,
поскольку они компенсируют различие между часами USB и своими собственными
часами.(They can attempt to have the entire USB synchronize to them or such
devices may periodically adjust their transfer rate as they compensate for the
difference between the USB clock and their own clock.)
USB предусматривает максимум одного клиента как образец
USB, для корректировки выдачи SOF хостом.(USB provides for a maximum of one
client per USB instance to adjust the host’s SOF generation.) Этот клиент
выполняет корректировку, основанную на обратной связи, обеспечиваемой связанным
устройством.( This client performs the adjustment based on feedback provided by
an associated device.) Скорость выдачи SOF маркера, все еще остается 1 мс.
Обратитесь к Главе 10 для полного рассмотрения этого механизма корректировки.
Если конечная точка не была сконфигурирована, для корректировки часов USB
используется SOF квитирование, или если конечная точка не способна к такой
корректировки часов, то конечная точка должна непрерывно корректировать поток
данных.
Следовательно, как отмечено выше, имеются три возможных
типа взаимодействия синхронизации для конечной точки касаемо SOF. Конечная точка может:
1.
Синхронизировать свои часы точно с
существующими часами USB.
2.
Корректировать часы шины.
3.
Синхронизироваться с хостом, регулируя поток данных.
Важно обратить внимание, что конечная точка, требующая
синхронизацию, которую не может выполнить тип синхронизации, описанной в (1),
но может выполнить тип, описанный в (2), должна также выполнить тип, описанный
в (3). Так происходит потому что, нельзя гарантировать что такая конечная точка
будет выбрана как конечная точка корректирующая часы шины. Только одно устройство во всей USB будет
использоваться, чтобы корректировать SOF.
Конечные точки используют фазу квитирования транзакций
USB, чтобы сообщить об ошибке и о необходимом потоке данных на хост. Конечные
точки могут также получать квитирование от хоста, которое сообщает об условии
ошибки. Типы квитирования, используемых конечной точкой изменяются согласно
обеспечиваемому типу передачи. Эти типы квитирования описаны подробно в Главе
8.
Когда происходит ошибка или в ситуации управления потоком
данных, некоторые каналы позволяют пропустить кадр, в котором произошло условие
и управление передачей данных этого кадра происходит в течение последующего
кадра. В некоторых случаях, возможно, что приемник данных указал передатчику,
что данные были успешно получены, но из-за ошибки на шине передатчик уверен,
что данные не были получены успешно. Передатчик затем повторно передаст те же
самые данные. Приемник должен иметь некоторый механизм, чтобы понять, что
данные, которые он теперь получил - это повторная передача данных, которые он
уже получил и это не новые данные.
USB предоставляет эту информацию, используя переключатели данных, которые
являются PIDs для фазы транзакций данных. В зависимости от типа передачи,
конечная точка должна распознать переключатели данных и выдавать или
обрабатывать PIDs данных соответственно. Обратитесь к Главе 8 для более полного
ознакомления с переключателями данных.
Таблица 9-5 подводит
итог механизмов связи USB.
Таблица 9-5. Механизмы Связи USB
|
Управление |
Изохронные |
Прерывание |
Bulk |
|
||
Режим Канала |
Сообщение |
Поток |
Поток |
Поток |
|||
Синхронизация |
Нет |
От шины, внешняя, или программная |
Нет |
Нет |
|||
Квитирование |
Да |
Не используется |
Да |
Да |
|||
Переключатели Данных |
Да |
Игнорируется |
Да |
Да |
|||
Требуемая Буферизация |
Минимум восемь байтов |
Двойной трафик кадра |
Одна транзакция |
Одна транзакция |
|||
Ошибка и Обработка Состояния |
Гарантируемая поставка сообщает только фатальные ошибки |
Отсутствие отчетов или разрушение данных - нет
повторений |
Гарантируемая поставка сообщает только фатальные ошибки |
Гарантируемая поставка сообщает только фатальные ошибки |
|||