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

USB

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 Строка байтов


Контроллер хаба. Повторитель

Контроллер хаба является программно-видимым устройством USB, взаимодействуя с которым хост управляет конфигурированием устройств и соединениями на шине. Как и всякое устройство USB, контроллер хаба имеет набор дескрипторов, его описывающих. Для хабов определен специальный класс устройств (класс 09, подкласс 00). Интерфейс хаба (кроме обязательной нулевой контрольной точки) содержит конечную точку типа Interrupt-IN для информирования хоста о смене состояния. Управление хабом в целом и его портами выполняется с помощью специальных запросов к точке EP0. Их описание в табл.

Повторитель хаба обеспечивает динамические соединения между портами для трансляции пакетов и сигналов возобновления. В состоянии покоя повторителя все порты работают на прием и ожидают признака начала кадра или сигнала возобновления. По этим событиям устанавливается то или иное соединение портов (см. рисунок ниже).

В трансляции пакетов участвуют только разрешенные порты (восходящий разрешен всегда). Если какой-либо разрешенный порт обнаружил начало пакета, то устанавливается соединение в соответствии с рисунком б или в, и повторитель транслирует пакет, дожидаясь его конца (признака EOP). По концу пакета повторитель опять переходит в состояние покоя. Из рисунков видно, что нисходящий трафик транслируется широковещательно. Восходящий трафик транслируется сугубо направленно, так, что его «видят» только хабы, расположенные в цепочке от устройства к хосту, но не другие устройства.

Сигнал возобновления (resume) транслируется несколько иначе. С восходящего порта сигнал resume транслируется во все нисходящие порты, кроме запрещенных и селективно приостановленных. Сигнал resume, обнаруженный на нисходящем разрешенном порте, подхватывается хабом и транслируется в восходящий порт и во все нисходящие порты (включая и порт-источник сигнала), кроме запрещенных и селективно приостановленных. С селективно приостановленного порта сигнал возобновления подхватывается и транслируется обратно только в этот же порт, после чего хаб завершает сигнализацию возобновления (LS-EOP) и переводит порт в разрешенное состояние.



«Открытый» хост-контроллер — OHC

Спецификация интерфейса «открытого» хост-контроллера OpenHCI (OHCI) разработана компаниями Compaq, Microsoft и National Semiconductor и описана в документе «Open Host Controller Interface Specification for USB». Версия 1.0a этого документа опубликована в 1999 году. Контроллер OHC, как и UHC, предназначен для поддержки скоростей FS/LS. Однако аппаратные средства OHC берут на себя большую часть забот планирования, разгружая ЦП от рутины постоянной обработки дескрипторов. Контроллер OHC оперирует дескрипторами конечных точек и дескрипторами передач.

Дескрипторы конечных точек ED (Endpoint Descriptor) создаются для всех сконфигурированных конечных точек всех подключенных устройств. Эти дескрипторы размещаются в памяти и связываются между собой; конфигурация связей задает порядок их обслуживания хост-контроллером. Дескриптор конечной точки описывает ее полный адрес и направление, тип, допустимый размер пакета, скорость, состояние точки и дескриптора, указатели на очереди передач, связанных с данной точкой, указатель на дескриптор следующей точки. Для всех точек управления (Control) и всех точек передач массивов (Bulk) создаются отдельные цепочки ED, на начала этих цепочек указывают специальные регистры OHC. Дескрипторы точек периодических передач организуются в «поваленное» двоичное дерево (см. рисунок ниже), в «ветвях» которого размещаются дескрипторы точек прерываний, а в «стволе» — дескрипторы точек прерываний с минимальным интервалом обслуживания и все дескрипторы точек изохронных передач. У дерева имеются 32 конечных ветви, проход по дереву осуществляется от конечных ветвей к стволу. В каждом из 32 смежных кадров вход осуществляется со своей ветви. Для этого в OHC имеется регистр базового адреса HCCA (Host Controller Communication Area, область коммуникаций хост-контроллера), указывающий на ветвь с номером 0, и счетчик кадров, 5 младших бит которого задают номер ветви входа для очередного кадра. Таким образом, через каждую ветвь пятого уровня (конечного) обработчик дескрипторов проходит 1 раз за 32 кадра (T = 32 мс), четвертого — 1 раз за 16 кадров (T = 16 мс), для третьего уровня — T = 8 мс, для второго — T = 4 мс, для первого — T = 2 мс, для нулевого (ствола) — T = 1 мс.

Дескрипторы передач TD (Transfer Descriptor), в отличие от TD UHC, для OHC действительно описывают передачи USB. Каждая передача может разбиваться на несколько транзакций, и это разбиение выполняет хост-контроллер исходя из размера пакета, установленного в дескрипторе конечной точки. Буфер данных для передачи может располагаться в одной или двух физических страницах памяти, возможно, разрозненных. В виртуальном пространстве логических адресов буфер должен быть непрерывной областью. Размер передачи может достигать 8 Кбайт, но если буфер начинается не с начала страницы, то допустимый размер передачи сократится (в худшем случае до 4097 байт). Дескрипторы передач собираются в очереди, которые прикрепляются к дескрипторам конечных точек.

Хост-контроллер OHC имеет таймеры, с помощью которых он осуществляет планирование транзакций в кадре. После SOF контроллер начинает обход цепочки ED для управляющих передач и выполняет столько из них, сколько успеет за время T1. Далее он начинает обход дерева периодических передач, от n-й конечной ветви до ствола, пока не пройдет по всем встретившимся ED. Если у него еще остается время в кадре, он снова берется за непериодические передачи (Bulk и Control). Отработанные (успешно или снятые по превышению порога ошибок) дескрипторы контроллер собирает в специальную очередь обработанных дескрипторов Done Queue, откуда их без труда извлекает драйвер. Контроллер может вырабатывать прерывания по завершению обработки TD, причем с заданной (для каждого TD) задержкой (или не вырабатывать запрос). Контроллер OHC имеет регистр для подстройки частоты кадров. В контроллер входит и корневой хаб на 2 или более порта.

Контроллер OHC, как и UHC, обычно является активным устройством PCI (Bus Master), но по сравнению с UHC наделен большим интеллектом. В контроллере предусмотрена поддержка контроллера клавиатуры и мыши (KBC) с помощью прерываний SMI, но, в отличие от UHC, в OHC имеются и специальные регистры, упрощающие задачу эмуляции.



Аудиоустройства

Аудиоустройства с точки зрения USB представляют собой, как правило, композитные устройства, содержащие набор независимых интерфейсов. Путь любого аудиосигнала в аудиоустройстве начинается с входного терминала (Input Terminal) и заканчивается на выходном терминале (Output Terminal). Между терминалами могут находиться различные модули (Unit), осуществляющие какие-то преобразования и соединения.

Терминалы могут быть различных типов:

  • USB-терминал — подключение к шине USB, с помощью которого через конечные точки (как правило, изохронные) осуществляется доставка потоков аудиоданных от хоста к устройству (входной терминал) или от устройства к хосту (выходной терминал). Для интерфейсов USB-терминалов определен подкласс 02 — AUDIOSTREAMING со своими специфическими дескрипторами, описывающими способ доставки (и синхронизации) и формат потока;
  • входные (оконечные) терминалы: устройства для записи звуков — встроенные в устройства или внешне подключаемые микрофоны различных типов, наборы микрофонов для пространственной записи (каждой разновидности назначен свой код типа)
  • выходные (оконечные) терминалы: устройства для воспроизведения звуков — колонки разных типов, наушники;
  • двунаправленные (оконечные) терминалы: телефонные трубки и головные телефонные гарнитуры, без эхоподавления и с ним;
  • телефонные терминалы: устройства подключения к телефонной сети и миниАТС;
  • внешние терминалы: аналоговые и цифровые входы и выходы различных стандартов и форматов, включая интерфейсы S/PDIF и потоки аудиоданных, передаваемые по шине IEEE 1394;
  • встроенные терминалы: проигрыватели грампластинок, CD, DVD, звуковое сопровождение TV и видеомагнитофонов, приемники (радио, телевизионные, спутниковые), устройства аналоговой и цифровой звукозаписи, радиопередатчики, синтезаторы, измерительные генераторы сигналов.

Всеми этими терминалами требуется управлять по шине USB; для них имеются дескрипторы, описывающие их управляемые свойства.

Модули (units), которые располагаются пути аудиосигнала, могут выполнять самые разнообразные функции: коммутация, регулировка уровня, микширование, панорамирование, фильтрация, реверберация и все возможные эффекты, которые стали легко реализуемыми с применением цифровой формы обработки сигналов. Для этих модулей введен подкласс 01 — AUDIOCONTROL, тоже со своими специфическими дескрипторами и запросами.

С аудиоустройствами тесно связаны и MIDI-устройства, являющиеся приемниками или источниками потоков MIDIсообщений. Для них введен подкласс 03 — MIDISTREAMING со своими специфическими дескрипторами и запросами. MIDIустройство USB может выступать как в роли простого конвертора интерфейсов (выполнять доставку сообщений между хостом и MIDI-разъемами на устройстве), так и MIDI-синтезатора, преобразующего MIDI-сообщения в аудиопотоки. При этом обрабатываться могут сообщения как с внешних разъемов, так и с шины USB. Синтезатор MIDI с точки зрения аудиоустройства является встроенным входным терминалом. Он поставляет аудиопоток, дальнейший путь которого определяется аудиоустройством (через интерфейсы подклассов 01 и 02).



Транзакции прерываний и передач массивов

Транзакции прерываний и передач массивов на шине выглядят одинаково. Здесь используются все механизмы управления потоком, надежной доставки и сигнализации, описанные выше. Инициализация переключателей (Toggle Bit) в устройстве и конечной точке контроля последовательности пакетов выполняется следующим образом:

  • для конечных точек передачи массивов любое связанное с ней событие конфигурирования (установка конфигурации, интерфейса, обработка ошибки) устанавливает переключатели в положение DATA0. Подача нового запроса передачи (IRP) инициализации переключателей не вызывает;
  • в транзакциях прерываний для обычных конечных точек используются только пакеты DATA0, поскольку для них в микрокадре возможна передача лишь одного пакета, а период опроса известен;
  • в транзакциях прерываний для широкополосных конечных точек в микрокадре первым идет пакет данных DATA0, последующие пакеты в том же микрокадре идут с чередованием типов DATA1-DATA0.

Отметим, что по спецификациям USB транзакции прерываний могут использоваться как для ввода данных, так и для их вывода по запросу. Правда, случаи вывода по прерываниям рассматриваются не так подробно, как это имеет место для более привычного ввода. Ввод/вывод через транзакции Interrupt привлекателен возможностью получения и почти гарантированной скорости (не принимая в расчет ошибок передачи), и гарантированной доставки.

 



Подкатегории