25.3. Информация об устройстве USB

25.3.1. Информация о конфигурации устройства

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

Внутри каждого интерфейса может быть задано 0 или большее количество конечных точек. Конечные точки являются однонаправленными точками доступа для коммуникации с устройством. Они предоставляют буферы для временного хранения получаемых и передаваемых от устройства данных. Каждая конечная точка в конфигурации имеет уникальный адрес, номер конечной точки плюс ее направление. Конечная точка, используемая по умолчанию, конечная точка 0, не является частью никакого интерфейса и доступна во всех конфигурациях. Она управляется уровнями услуг и драйверам устройств непосредственно не доступна.

Level 0 Level 1 Level 2 Slot 0

Slot 3 Slot 2 Slot 1

(Показаны только 4 из 32 слотов)

Такая иерархически организованная информация о конфигурации описана в устройстве стандартным набором дескрипторов (обратитесь к разделу 9.6 спецификации USB [ 2]). Они могут быть получены через запрос на получение дескриптора (Get Descriptor Request). Слой услуг кэширует эти дексипторы для избежания ненужных передач по шине USB. Доступ к дескрипторам дается через вызовы функций.

  • Дескрипторы устройства: Общая информация об устройстве, такая, как Производитель, Наименование продукта и Новер версии, поддерживаемый класс устройств, подкласс и протокол, если это имеет смысл, максимальный размер пакета для конечной точки, используемой по умолчанию, и так далее.

  • Дескрипторы конфигурации: Количество интерфейсов в этой конфигурации, поддержка функциональность приостанова и продолжения работы, а также требования по электропитанию.

  • Дескрипторы интерфейса: класс интерфейса, подкласс и протокол, если он уместен, количество альтернативных настроек для интерфейса и число конечных точек.

  • Дескрипторы конечной точки: Адрес конечной точки, ее направление и тип, максимальный поддерживаемый размер пакета и частота посылки запросов, если конечная точка имеет тип прерывание. Для конечной точки, используемой по умолчанию (конечная точка 0) дескриптора не существует и он никогда не считается как дескриптор интерфейса.

  • Строковые дескрипторы строк: В других дескрипторах для некоторых полей даются строковые индексы. Они могут использоваться для получения описательных строк, возможно, на нескольких языках.

Определения класса могут добавлять свои собственные типы дескрипторов, которые доступны через запрос на получение дескриптора.

Конвейерное общение с конечными точками устройства происходит через так называемые каналы. Драйверы отдают передачи к конечным точкам в канал и дают callback-функцию для вызова при окончании или сбое передачи (асинхронные передачи) или ожидают окончания (синхронные передачи). Передачи в конечную точку ставятся в очередь в канале. Передача может быть завершена, либо произойти с ошибкой либо остановиться по таймауту (если он был задан). Для передач существуют два типа таймаутов. Таймауты могут возникнуть из-за задержек на шине USB (миллисекунды). Эти задержки видятся как сбои и могут появиться по причине отключения устройства. Второй тип задержки реализован в программном обеспечении и появляется, когда передача не завершена в течение заданного периода времени (секунды). Они появляются, когда устройство отвечает отрицательно (NAK) на запросы передачи пакетов. Причиной этого является неготовность устройства к приему данных, переполнение или заполнение буфера или ошибки протокола.

Если передача по каналу превышает максимальный размер пакета, указанный в соответствующем дескрипторе кончной точки, то хост-контроллер (OHCI) или драйвер HC (UHCI) будет разбивать передачу на пакеты максимального размера, с последним пакетом, возможно, меньшим, чем максимальный размер пакета.

Иногда для устройства не является проблемой возвратить меньше данных, чем запрошено. К примеру, запрос на передачу от модема может запросить 200 байт данных, но модем сейчас имеет только 5 байт. Драйвер может задать признак короткого пакета (SPD). Это позволяет хост-контроллеру принять пакет, даже если количество передаваемых данных меньше, чем запрошено. Этот флаг имеет смысл только для входящих передач, так как объем пересылаемых устройству данных всегда известен заранее. Если в устройстве во время передачи произошла неисправимая ошибка, то канал теряется. Перед тем, как любые дополнительные данные будут подтверждены или переданы, драйверу нужно выяснить причину потери и сбросить условие потери конечной точки при помощи посылки запроса на очистку конечной точки и сброса устройсва по каналу, используемому по умолчанию. Конечная точка, используемая по умолчанию, никогда не должна теряться.

Имеются четыре различных типа конечных точек и соответствующих каналов: - управляющий канал / канал, используемый по умолчанию: Имеется один управляющий канал на устройство, подключенный к конечной точке, используемой по умолчанию (конечная точка 0). Канал содержит запросы устройства и соответствующие данные. Различие между передачами по каналу, используемому по умолчанию и другими каналами заключается в том, что протокол для передач описан в спецификации USB [ 2]. Эти запросы используются для сброса и настройки устройства. Базовый набор команд, который должен поддерживаться всеми устройствами, дан в главе 9 спецификации USB [ 2]. Команды, поддерживаемые в этом канале, могут быть расширены спецификацией класса устройств для поддержки дополнительной функциональности.

  • Канал передачи потока: Это USB-эквивалент для среды передачи без обработки.

  • Канал прерываний: Хост посылает запрос на передачу данных устройству, и если в устройстве нет данных для передачи, она посылает NAK на пакет данных. Передачи прерываний планируются на частоте, задаваемой при создании канала.

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

Доступность необходимой пропускной способности вычисляется во время создания канала. Передачи планируются в кадрах продолжительностью 1 миллисекунда. Выделение пропускной способности внутри кадра описано в спецификациях USB, раздел 5.6 [ 2]. Изохронным передачам и передачам прерываний разрешено использовать до 90% пропускной способности кадра. Пакеты для управления и обычных передач планируются после всех изохронных пакетов и пакетов прерываний и будут занимать всю оставшуюся пропускную способность.

Дополнительная информация о планировании передач и корректировке пропускной способности может быть найдена в главе 5 спецификаций USB [ 2], разделе 1.3 спецификации UHCI [ 3] и разделе 3.4.2 спецификации OHCI [4].