USB

USB без ПК — расширение On-The-Go

Протокол шины USB ориентирован на сугубо подчиненные отношения: всеми транзакциями со всеми подключенными устройствами управляет хост — как правило, это компьютер (ПК) с контроллером USB. Никакого равноправия в отношениях на шине USB быть не может, однако в ряде случаев хотелось бы обойтись и без компьютера. Так, например, напрашивается непосредственное соединение цифровой фотокамеры и фотопринтера, обеспечивающее печать снимков без участия ПК. Практически все периферийные устройства USB имеют встроенные микроконтроллеры, и функциональные возможности этих микроконтроллеров неуклонно растут. Периферийное устройство, имеющее хотя бы простейшие средства диалога с пользователем (дисплей, отображающий пару строк текста, и несколько кнопок управления), вполне может взять на себя управляющие функции в плане организации транзакций USB. Функции такого мини-хоста можно упростить, если ориентироваться на двухточечное соединение пары устройств без промежуточных хабов. В этом случае мини-хосту остается лишь идентифицировать одно подключенное устройство, и, если ему известно, как это устройство можно использовать, сконфигурировать его. Задача планирования транзакций лишь с одним устройством гораздо проще общей задачи «большого» хоста и хост-контроллера. Именно на создание таких упрощенных связей пары устройств нацелено расширение OTG (On-The-Go).

Документ On-The-Go Supplement to USB 2.0 Specification (версия 1.0 вышла в июне 2003 года) определяет дополнения к USB 2.0, необходимые для организации упрощенных соединений пары устройств. Большая часть документа посвящена описанию разъемов, и терминология OTG тоже привязана к типам разъемов (собственно, пользователь видит разъемы на устройствах и просто пытается соединить их доступными кабелями). В OTG принято следующее деление устройств:

  • устройство-A (A-Device) — устройство, в гнездо которого вставлена вилка типа A (или mini-A). Это устройство подает питание (Vbus) на шину и играет роль хоста, по крайней мере, в первое время после подключения к другому устройству. По ходу сеанса связи устройство-A может передать функции хоста своему партнеру, а само стать периферийным (в терминах USB);
  • устройство-B (B-Device) — устройство, в гнездо которого вставлена вилка типа B (или mini-B). Это устройство при подключении к другому устройству играет роль периферийного (ведомого) устройства USB. Если это устройство является двухролевым, то по ходу сеанса связи ему могут быть переданы функции хоста;
  • двухролевое устройство (Dual-role device) — устройство с единственным гнездом типа mini-AB, обеспечивающее питание шины с током не менее 8 мА, поддерживающее FS (дополнительно может поддерживать и HS, а в роли периферийного устройства — и LS). Это устройство имеет усеченные возможности хоста, список поддерживаемых периферийных устройств, средства диалога с пользователем. Для управления связью устройство должно поддерживать протоколы запроса сессий (SRP) и согласования роли хоста (HNP).

Двухролевое устройство может поддерживать и хабы (это усложняет его задачи); однако стандартные хабы USB не позволяют работать протоколам SRP и HNP.

В основной спецификации USB фигурируют три типа разъемов (гнезд и вилок): стандартные 4-контактные A и B, а также 5-контактный mini-B. Здесь допустимы кабели с вилкой A на одном конце и вилкой (mini)B на другом, а также неотсоединяемые от устройства кабели с вилкой A. В OTG введены 5-контактные вилки mini-A и универсальное 5-контактное гнездо mini-AB. Внутри вилки mini-A контакты 4 и 5 электрически соединены, в вилке mini-B контакт 4 свободен. Для облегчения различения разъемов принята цветовая маркировка: разъемы mini-A должны быть белого цвета, mini-B — черного, а гнезда mini-AB — серого.

В гнездо mini-AB двухролевого устройства может вставляться как вилка mini-A, так и вилка mini-B. При этом контакт 4 (ID) используется для идентификации типа подключенного устройства:

  • если контакт 4 (ID) соединен с линией GND (сопротивление <10 Ом), то вставлена вилка mini-A — значит, подключено устройство-B; следовательно, двухролевое устройство должно стать хостом;
  • если контакт 4 (ID) не соединен с линией GND (сопротивление >10 Ом), то вставлена вилка mini-B — значит, подключено устройство-A; следовательно, двухролевое устройство должно стать периферийным.

Протокол запроса сеанса, SRP (Session Request Protocol), предназначен для дополнительного энергосбережения: когда устройство-A не нуждается в обмене по шине, оно может снять питание Vbus. При этом устройство-B все-таки может «попросить внимания» — запросить сеанс связи. Здесь сеансом называется интервал времени, в течение которого двухролевое устройство подает достаточное (для работы) напряжение питания. Запрос может выполняться подачей положительных импульсов либо по линии Vbus, либо по сигнальным линиям (D+ или D-). Устройство-B должно использовать оба метода подачи запроса, устройство-A может распознавать любой из них (как удобнее его разработчику).

Протокол согласования роли хоста, HNP (Host Negotiation Protocol), позволяет устройству-A и устройству-B поменяться ролями во время сеанса связи (если они оба двухролевые). Протокол может быть инициирован, только если устройство-A пошлет устройству-B специальный разрешающий запрос, предварительно убедившись, что устройство-B протокол HNP поддерживает. Возможность поддержки протоколов HNP и SRP сообщается устройством-B в специальном дескрипторе OTG-устройства.

Устройство-B может запросить управление шиной (стать хостом на время), когда устройство-A прекращает активность (переводит шину в состояние покоя). Для этого устройство-B отключается от шины (отключает свой «подтягивающий» резистор от линии D+). Устройство-A расценивает это как запрос смены роли и подключает свой «подтягивающий» резистор к линии D+. Теперь устройство-B может начинать транзакции, управляя шиной. Когда оно захочет отдать управление шиной, оно прекращает активность и подключает свой «подтягивающий» резистор к линии D+. Устройство-A это расценивает как возврат управления и отключает свой «подтягивающий» резистор от линии D+ — исходные роли, определенные по типу разъема, восстановлены.

Дескриптор OTG (длина 3, тип 9) должен присутствовать во всех конфигурациях OTG-устройства, он считывается обычным запросом Get_Descriptor. Дескриптор OTG содержит лишь один байт атрибутов, в котором бит 0 указывает на поддержку SRP, бит 1 — на поддержку HNP (остальные биты — нулевые).

Убедившись в поддержке протокола HNP, устройство-A, еще до выбора конфигурации устройства-B, должно сообщить ему свое отношение к HNP. Для этого служат запросы к устройству Set_Feature (bmRequestType = 00000000b, bRequest = 3):

  • запросом Set b_hnp_enable (wValue = 3) устройство-A разрешает устройствуB запрашивать роль хоста;
  • запросом Set a_hnp_support (wValue = 4) устройство-A только информирует устройство-B о том, что оно подключено к порту, поддерживающему HNP, и запрос роли хоста может быть разрешен позже;
  • запросом Set a_alt_hnp_support (wValue = 5) устройство-A информирует устройство-B о том, что оно (устройство-B) подключено к порту, не поддерживающему HNP, но у устройства-A имеется другой порт, на котором HNP поддерживается.


Sitelinkx by eXtro-media.de
Яндекс.Метрика