link140 link141 link142 link143 link144 link145 link146 link147 link148 link149 link150 link151 link152 link153 link154 link155 link156 link157 link158 link159 link160 link161 link162 link163 link164 link165 link166 link167 link168 link169 link170 link171 link172 link173 link174 link175 link176 link177 link178 link179 link180 link181 link182 link183 link184 link185 link186 link187 link188 link189 link190 link191 link192 link193 link194 link195 link196 link197 link198 link199 link200 link201 link202 link203 link204 link205 link206 link207 link208 link209 link210 link211 link212 link213 link214 link215 link216 link217 link218 link219 link220 link221 link222 link223 link224 link225 link226 link227 link228 link229 link230 link231 link232 link233 link234 link235 link236 link237 link238 link239 link240 link241 link242 link243 link244 link245 link246 link247 link248 link249 link250 link251 link252 link253 link254 link255 link256 link257 link258 link259 link260 link261 link262 link263 link264 link265 link266 link267 link268 link269 link270 link271 link272 link273 link274 link275 link276 link277 link278 link279

PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

USB

Дескрипторы

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

  • дескриптор устройства, Device Descriptor (тип 1), описывающий устройство в целом (версия USB, класс, производитель, модель, протокол, число возможных конфигураций). Для HS-устройств общее описание дополняется дескриптором-квалификатором, Device Qualfier Descriptor (тип 6), в котором указывается, сколько у устройства будет конфигураций при работе на иной скорости (дескриптор устройства относится к той скорости, на которой устройство работает в данный момент);
  • дескрипторы конфигурации, Configuration Descriptor, (тип 2), описывающие число интерфейсов, атрибуты (способ питания и возможность генерации удаленного пробуждения) и мощность, потребляемую от шины в каждой конфигурации для текущей скорости. Для HS-устройств имеются и дескрипторы конфигураций для иной скорости, Other Speed Configuration Descriptor (тип 7), описывающие те же параметры с тем же форматом;
  • дескрипторы интерфейсов, Interface Descriptor (тип 4), для каждого из интерфейсов, доступных в указанной конфигурации, сообщает число прикладных конечных точек, класс и протокол интерфейса. В конфигурации может быть несколько альтернативных вариантов (alternate settings) данного интерфейса, каждому из которых соответствует свой дескриптор интерфейса. Первичным интерфейсом (primary interface) называют нулевой альтернативный вариант (alternate settings = 0);
  • дескрипторы конечных точек, Endpoint Descriptor (тип 5) определяют номер и направление точки, атрибуты (тип передач), максимальный размер поля данных и интервал обслуживания (для точек периодических передач);
  • строковые дескрипторы, String Descriptor (тип 3) — необязательные текстовые строки информации, которые могут отображаться хостом. Ссылки (однобайтные индексы) на строковые дескрипторы имеются в дескрипторах устройства, конфигураций и интерфейсов. Нулевое значение индекса означает отсутствие строкового дескриптора для данной структуры. Строки состоят из 2-байтных символов UNICODE, явного терминатора строки нет — конец определяется по длине, заявленной в заголовке дескриптора. Строковые дескрипторы могут присутствовать в устройствах на разных языках; для выбора нужного дескриптора в запросе кроме индекса указывается и 16-битный идентификатор языка (LanguageID). Строковый дескриптор, вызываемый по нулевому индексу (с любым кодом языка), в своем теле содержит список поддерживаемых идентификаторов языка. Значения LanguageID для некоторых языков:
         — русский — 0419h;
         — английский (США) — 0409h;
         — английский (Великобритания) — 0809h;
         — белорусский — 0423h;
         — украинский — 0422h;
  • специфические дескрипторы, Class-Specific Descriptor, могут использоваться в устройствах определенных классов. Так, например, для хабов имеется дескриптор интерфейса питания, Interface Power (тип 8). Специфические дескрипторы также должны начинаться с поля длины и типа.

Дескрипторы от устройств хост получает по запросам Get_Descriptor, указав тип дескриптора. Таким способом можно явно запросить дескриптор устройства (и квалификатор), дескриптор конфигурации (для текущей и иной скорости) и дескриптор строки (а также дескриптор OTG). Дескрипторы интерфейсов и конечных точек по отдельности не адресуются, они пристраиваются «хвостом» к дескриптору конфигурации. Возможность чтения всех имеющихся дескрипторов обязательна для всех устройств, дополнительно может поддерживаться и запись дескрипторов (запросом Set_Descriptor). Положительный ответ устройства на транзакцию записи дескриптора означает, что он принят и устройство будет подчиниться его свойствам.

По запросу дескриптора конфигурации устройство выдает целую цепочку дескрипторов, начинающуюся с собственно дескриптора конфигурации. За ней для каждого доступного интерфейса следует дескриптор первичного интерфейса и его конечных точек, за которым следуют все альтернативные варианты со своими конечными точками. Общая длина всего описания конфигурации заранее не известна, она указывается в поле wTotalLength дескриптора конфигурации. Так что для получения конфигурации сначала выполняют запрос, указав длину собственно дескриптора конфигурации (9, хотя достаточно и 4), а потом его повторяют с длиной, прочитанной из данного поля.

В приведенных ниже таблицах и описаниях перед мнемоническими названиями полей префикс b означает байт, w — двухбайтное слово, bm — битовую карту, i — целое число (однобайтный индекс), bcd — неупакованный BCD-формат, id — идентификатор (не число). Отметим, что в пакетах слово передается младшим байтом вперед, так что обращение к слову, размещенному в памяти хоста, будет естественным для процессоров x86 (младший байт по меньшему адресу) и не требует перестановки байтов.

Таблица. Дескриптор устройства

Смещение Поле Длина Содержание
0 bLength 1 Длина дескриптора (18)
1 bDescriptorType 1 Тип дескриптора (1)
2 bcdUSB 2 Версия спецификации USB в BCD-формате (0200h означает USB 2.0)
4 bDeviceClass 1 Код класса устройства
5 bDeviceSubClass 1 Код подкласса устройства
6 bDeviceProtocol 1 Код подкласса устройства
7 bMaxPacketSize0 1 Максимальный размер пакета для EP0 (8, 16, 32 или 64)
8 idVendor 2 Идентификатор производителя (Vendor ID)
10 idProduct 2 Идентификатор продукта (Product ID)
12 bcdDevice 2

Версия устройства в BCD-формате

14 iManufacturer 1 Индекс строкового дескриптора производителя
15 iProduct 1 Индекс строкового дескриптора продукта
16 iSerialNumber 1 Индекс строкового дескриптора серийного номера
17 bNumConfigurations 1 Число возможных конфигураций устройства на данной скорости

 

Таблица. Дескриптор-квалификатор устройства

Смещение Поле Длина Содержание
0 bLength 1 Длина дескриптора (10)
1 bDescriptorType 1 Тип дескриптора (10)
2 bcdUSB 2 Версия спецификации USB в BCD-формате (0200h означает USB 2.0)
4 bDeviceClass 1 Код класса устройства
5 bDeviceSubClass 1 Код подкласса устройства
6 bDeviceProtocol 1 Код подкласса устройства
7 bMaxPacketSize0 1 Максимальный размер пакета для EP0 на иной скорости
8 bNumConfigurations 1 Число возможных конфигураций устройства на иной скорости
9 bReserved 1 Резерв (0)

 

 Таблица. Дескрипторы конфигурации

Смещение Поле Длина Содержание
0 bLength 1 Размер данного дескриптора (9)
1 bDescriptorType 1 Тип дескриптора (2 или 7)
2 wTotalLength 2 Общее число байтов полного описания данной конфигурации
4 bNumInterfaces 1 Число поддерживаемых интерфейсов
5 bConfigurationValue 1 Номер конфигурации
6 iConfiguration 1 Индекс строкового дескриптора конфигурации
8 bmAttributes 1 Атрибуты (характеристики конфигурации: D7: резерв (1) D6: Selfpowered — возможность автономного питания D5: Remote Wakeup — способность генерации удаленного пробуждения D4...0: резерв (0)
9 bMaxPower 1 Максимальный ток потребления от шины в рабочем режиме в единицах по 2 мА

 

Таблица. Дескриптор интерфейса

Смещение Поле Длина Содержание
0  bLength  1  Размер данного дескриптора (9)
1  bDescriptorType  1  Тип дескриптора (4)
2  bInterfaceNumber  1  Номер интерфейса
3  bAlternateSetting  1  Номер альтернативной установки
4  bNumEndpoints  1  Число конечных точек, используемых интерфейсом (исключая EP0)
5  bInterfaceClass  1  Класс интерфейса
6  bInterfaceSubClass  1  Подласс интерфейса
7  bInterfaceProtocol  1  Код протокола
8  iInterface  1  Индекс строкового дескриптора интерфейса

 

Таблица. Дескриптор конечной точки

Смещение Поле Длина Содержание
0 bLength 1 Размер дескриптора (7)
1 bDescriptorType 1 Тип дескриптора (5)
2 bEndpointAddress 1 Адрес точки:
Биты [3:0] — номер точки;
Биты[6:4] — резерв (0);
Бит 7 — направление (игнорируется для EP0):
0 = OUT, 1 = IN
3 bmAttributes 1 Атрибуты точки:
Биты [1:0] — тип точки: 00 = Control,
01 = Isochronous, 10 = Bulk, 11 = Interrupt;
Биты [5:2] используются только для изохронных
точек, для остальных резерв (0):
Биты [3:2] — тип синхронизации: 00 = нет
синхронизации, 01 = асинхронная, 10 = адаптивная,
11 = синхронная;
Биты [5:4] — тип использования: 00 = данные,
01 = обратная связь, 10 = данные
с предоставлением неявной обратной связи,
11 = резерв
4 wMaxPacketSize 2 Биты [10:0] — максимальный размер пакета;
Биты [12:11] — число дополнительных транзакций
в микрокадре, только для широкополосных точек,
для остальных — резерв (0);
Биты [15:13] — резерв (0)
6 bInterval 1 Для точек периодических транзакций — интервал
обслуживания (см. главу 11), для HSточек
непериодического вывода — допустимая частота
посылки NAK

 

Таблица. Строковый дескриптор

Смещение Поле Длина Содержание
0 bLength 1 Размер дескриптора (N+2)
1 bDescriptorType 1 Тип дескриптора (3)
2 bString N Строка байтов