Usb host mode что это

Обновлено: 07.07.2024

В недавней статье на Geektimes в комментариях возник вопрос о поддержке в ОС Android периферии, подключенной к шине USB. Действительно, большинство вендорского ПО, к примеру, для работы с принтерами и МФУ, поддерживает только подключение по сети. Однако это не означает, что в самой ОС Android нет такой возможности — это означает лишь то, что большинство устройств не имеют полноценного USB хоста, и далеко не все имеют поддержку OTG. По сети же могут работать абсолютно все без исключения.

Большинство устройств на Android при наличии порта OTG поддерживают на уровне системы (ядра Linux или стандартных компонентов Android) следующие классы устройств:

  • Устройства ввода — клавиатуры, мыши, джойстики (HID)
  • Накопители (Mass Storage)
  • Сотовые модемы
  • Сетевые адаптеры
  • Вебкамеры

Подробнее список устройств, поддерживаемых на уровне ядра Linux, можно получить в sysfs:

$ ls /sys/bus/usb/drivers

Если же модуль в принципе доступен в исходниках ядра Linux, но не включен в Android — не стоит рассчитывать на то, что его получится собрать и расставить на все целевые системы.

Однако, начиная с Android 3.1 (API 12), в системе содержатся средства, достаточные для поддержки на уровне приложения любой USB периферии. Данные средства описаны в разделе USB Host руководства по Android API. Здесь же я хочу привести примеры реальной работы с некоторыми видами устройств.

Права доступа

Как и для прочих действий, Android требует, чтобы приложение получило разрешение на доступ к USB периферии. Существует 2 способа получить такое разрешение:

  • Задекларировать список устройств в AndroidManifest
  • Явно показать пользователю диалог “разрешить”

Итак, нам необходимо добавить в манифест следующее:


А в res/xml/device_filter.xml вписать следующее:


Отмечу, что хотя общепринято указывать VID:PID в 16-ричной системе счисления, здесь они должны быть указаны в десятичной. В документации заявляется, что возможно указание только класса, без VID и PID, но у меня это не стало работать.

Принтеры


Класс предельно простой. В рамках этого класса устройство должно поддерживать:

  • Обязательный bulk out endpoind для отправки данных на принтер
  • Опциональный bulk in endpoind для получения статуса принтера
  • 3 управляющих запроса

Код, приведенный ниже, предоставляет функциональность, аналогичную устройству /dev/usb/lp в Linux. Далее нам нужен фильтр, преобразующий исходный документ в пакет данных, понятный конкретной модели принтера. Но это тема иной статьи. Как один из вариантов — можно собрать ghostscript с помощью NDK.

Для работы с устройством нам в первую очередь нужно:

1. Найти устройство. В примере для простоты я ищу первый попавшийся:


2. Получить endpoint’ы:


3. Непосредсвенно открыть устройство:


4. После этого мы можем читать и писать в устройство:


5. По завершении работы — закрыть устройство:

Преобразователи USB-Serial

1. Найти и открыть устройство:


2. Установить параметры последовательного порта:


3. Читать и писать в порт:


4. По завершении работы — закрыть порт:

Резюме

Надеюсь, что мне удалось показать, что работа с USB периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.

Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.

В чем разница между USB On-The-Go (OTG) и USB Host Mode?

Они кажутся более или менее одинаковыми. Они?

В контексте устройств Android термины часто используются взаимозаменяемо.

USB имеет два разных типа конечной точки (подключенное устройство), например интерфейс клиент-сервер. Одно устройство - это компьютер (или хост ), и оно отвечает: это сервер. Все остальные устройства ( периферийные устройства ) являются клиентами и могут взаимодействовать только с сервером. Обычно устройство может действовать только в одной из этих двух ролей: не будет смысла (скажем), чтобы клавиатура была хостом. Именно так работает протокол, и разъемы спроектированы так, чтобы облегчить его для пользователей: хосты имеют прямоугольный разъем A, а периферийные устройства имеют либо квадратный разъем B, либо мини- или микро-версию.

Режим хоста - это имя, когда устройство выступает в роли хоста. Каждое USB-соединение имеет только одно устройство в режиме хоста . ПК всегда работают в режиме хоста. (Обычно это не называют «ПК», потому что на самом деле это не «режим», а всегда так).

Телефон немного другой, хотя. Иногда вы хотите, чтобы он работал как периферийное устройство: например, чтобы вы могли подключить его к ПК, чтобы ПК мог получить доступ к памяти телефона. Иногда вы хотите, чтобы он действовал как хост: например, для подключения к нему физической клавиатуры или мыши. Вот почему многие устройства Android теперь поддерживают режим USB-хоста, а также режим USB-периферии: они могут работать в любой роли. Но как сделать так, чтобы USB-разъем хоста отличался от разъема периферийного устройства?

Вот тут-то и появляется USB-на-ходу (OTG). Он добавляет дополнительный контакт к разъему micro-USB. Если вы подключите обычный USB-кабель типа A-B, устройство будет работать в периферийном режиме. Если вы подключите специальный кабель USB-OTG, к нему будет подключен контакт, а устройство на этом конце будет работать в режиме хоста.

Это может немного сбить с толку, если один кабель имеет одинаковые разъемы на обоих концах, которые делают разные вещи. Но кабели с USB-OTG на обоих концах встречаются редко: чаще используют адаптер, у которого на одном конце есть разъем USB-OTG в режиме хоста, а на другом - прямоугольное гнездо USB-A. Вы можете подключить обычный USB-кабель к этому адаптеру, и он будет работать нормально.

Названия относятся к двум различным частям технологии USB, но они очень похожи. В конце концов, если устройство «поддерживает USB-OTG», оно должно поддерживать работу в «режиме хоста». Обратное часто бывает, но не всегда. Большинство устройств Android, поддерживающих режим хоста, делают это через USB-OTG, но есть несколько контрпримеров: например, оригинальный Asus Eee Pad Transformer имеет разъемы USB-A на клавиатуре, что позволяет ему работать в режиме хоста без USB -OTG кабель. И, конечно, ПК поддерживают режим хоста без USB-OTG.

Поэтому, хотя в мире Android термины обычно означают одно и то же, могу ли я подключить USB-флешку к своему телефону? - и для большинства устройств не имеет значения, о чем вы говорите, есть различие.

Я начинаю серию справочных статей по отдельным компонентам и функциям различных электронных устройств — планшетов, ноутбуков, ридеров, плееров и так далее. Это такой своеобразный ликбез в сфере бытовой электроники. Я постараюсь сделать эти статьи понятными для максимально широкого круга людей.

Тема сегодняшней статьи — USB-host (USB-хост). Это весьма примечательная функция, которой оснащается достаточно большое количество устройств (в основном, правда, довольно дорогих), и рассказать о ней определенно стоит. Также я расскажу и о функции USB OTG — фактически, более современной разновидности USB-хоста.

Если говорить максимально просто и доступно, то наличие USB-хоста на каком-нибудь устройстве означает возможность подключения к нему различных внешних устройств — например, флэшек, внешних жестких дисков, кардридеров, плееров, фотоаппаратов и так далее. Весьма интересна возможность подключения и внешней «периферии» — клавиатур, мышек и так далее.

Устройство с функцией USB-хоста обладает полноценным портом USB и специальным программным обеспечением (в частности, драйверами), которое позволяет осуществлять работу с подключаемыми устройствами: передавать на них файлы, копировать файлы с них, использовать подключенное устройство в качестве клавиатуры и так далее.

Что интересно, к устройству с USB-хостом можно подключать также USB-хабы — устройства, которые подобны сетевым тройникам. Например, на планшетах обычно имеется только один порт USB. Подключив к нему USB-хаб (а стоит он недорого), вы получите уже два или даже четыре порта, что весьма удобно — например, к одному можно подсоединить клавиатуру, а к другому подключать флэшки.

В каких случаях USB-хост удобен и нужен? Да во многих. Согласитесь, возможность скопировать файлы на плеер, планшет или ридер без подключения его к компьютеру не может не радовать. Вам надо просто подключить к устройству флэшку или какое-либо другое устройство, с которого вам нужно перенести файлы.

Весьма приятна возможность перенести снимки с фотоаппарата на планшет или плеер с жестким диском, и тем самым освободить память фотоаппарата, сделать еще больше снимков. Подключение клавиатуры к планшету — тоже очень приятная возможность. Удобны и принтеры с наличием USB-хоста: к ним можно напрямую подключать фотоаппараты, телефоны, флэшки и печатать снимки или документы прямо с них; компьютер для этого совершенно необязателен.

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

Именно поэтому я советую перед покупкой того или иного устройства проверить, насколько качественно реализована в нем опция USB-host. Попробуйте подключить флэшку, посмотреть, насколько легко и удобно можно скопировать файлы с нее и на нее. Если у вас есть usb-клавиатура, которую вы планируете использовать вместе с покупаемым устройством, не лишним будет проверить корректность ее работы. Если же вы соберетесь купить такую клавиатуру уже после покупки самого устройства, то возьмите с собой в магазин это устройство и проверьте, насколько корректно будут с ним работать представленные в магазины клавиатуры.

Стоит отметить, что сейчас имеются в продаже устройства и с поддержкой так называемого USB OTG. Я бы сказал даже, что USB OTG сейчас встречается в устройствах довольно часто, чаще, чем классический USB-хост. В чем основное отличие USB OTG? В том, что USB OTG не предполагает наличие отдельного классического полноразмерного порта USB. Для подключения периферийных устройств используется порт microUSB или miniUSB, который, вообще говоря, служит главным образом для связи устройства с компьютером. На устройстве с USB OTG этот порт фактически совмещает в себе функции USB-host (подключение периферии) и USB-device (подключение к компьютеру).

Чтобы к miniUSB/microUSB порту с поддержкой OTG подключить флэшку или, скажем, клавиатуру, необходимо приобрести специальный переходник, который стоит порядка 500 рублей (при желании его можно найти по более низкой цене или же вовсе сделать самому — в интернете есть инструкции). Затем нужно вставить этот переходник в порт miniUSB/microUSB, а к соответствующему выходу переходника подключить нужное вам периферийное устройство.

И тут опять же стоит отметить, что не на всех устройствах USB OTG реализовано хорошо. Где-то поддержка USB OTG может быть заявлена, но ввиду отсутствия необходимого программного обеспечения она не работает. Пример — ридеры Onyx Boox. Также стоит отметить, что внешние жесткие диски по протоколу USB OTG подключить вряд ли удастся: они потребляют слишком много энергии; планшет «прокормить» их просто не в состоянии.

Так мы плавно переходим к основному недостатку USB-хоста (как классического, так и USB OTG): его активное использование способствует быстрой разрядке устройства. Конечно, клавиатура много энергии пожирать не будет, а вот постоянно подключенная и использующаяся флэшка — будет.

Но USB OTG не лишен и недостатков, главным из которых является необходимость покупки переходника и постоянной его переноски с собой.

17 Replies to “Что такое USB-host и USB OTG”

Кстати: может сделать небольшой обзор- справочник по кабелям? Что такое AM-AF, AM-BM и прочие абревиатуры. Для чего они нужны, полезны и т.д
Можно сюда и HDMI добавить. Сейчас в продаже как минимум три разновидности(модификации) этих кабелей. Последняя, самая дорогая позволяет использовать этот кабель для всего- вплоть до передачи интернета. Т.е из него пытаются сделать универсальный стандарт.

Увы, я совершенно не разбираюсь кабелях, во всех этих AM-AF, AM-BM и тому подобных разновидностях.

Самое оригинальное применение AM-AF : если пользуетесь модемом от сотового оператора, то при плохом приеме удлинить соединение с помощью этого кабеля и подвесить модем к потолку или выкинуть в форточку. 😉

Спасибо за информацию и ссылку! Сейчас сам удивляюсь, с чего взял, что нельзя подключить юсб-хаб к устройству с OTG:)
Убрал соответствующее предложение.

А в программном отношении USB OTG это просто USB или нет?

Зачем вообще эта глупость на планшетах? Обычный порт вполне бы подошёл как на нетбуках. Как и для usb типа В, так и для типа А есть варианты и мини, и микро. Через тип А нельзя подключать устройство к компу, но зачем вообще это надо? Мы же не подключаем нетбуки к компу через USB и не паримся по этому поводу. USB otg больше нужен телефонам, но планшет всё же ближе к нетбуку, чем к телефону.

Добрый день. при подключении планшета через USB OTG к ПК насколько свободно можно оперировать фалами на планшете?

Салют,Колян! Ну вот я тоже пользовался флешками для передачи данных с телефона на планшет(и обратно).
Пока телефон перестал запускаться с флешкой.Теперь собрал один кабель,соединив по цветам два конца(папа-папа) с микроЮСБ,так как в продаже оного нет:-(.Не пойму,почему планшет на видит телефон,не появляется даже значок ЮСБ соединения.Может,что не правильно делаю?

Где можно приобрести нужные драйвера для отг?

Думаю, что в первую очередь стоит проверить сайт производителя гаджета, к которому нужны драйвера. Если там их нет, стоит связаться с их техподдержкой.

Некоторые устройства Android могут выступать в роли USB-хоста, чтобы вы могли использовать другие USB-устройства, подключенные к ним. Например, просмотрите или импортируйте фотографии, хранящиеся на камере с телефона, или скопируйте файлы на карту памяти USB, прикрепленную к планшету, подключите полноразмерную USB-клавиатуру или мышь к планшету или используйте внешний GPS-приемник или устройство Wi-Fi .

Как узнать, может ли мое устройство сделать это?

1 ответ

Чтобы использовать подключенное USB-устройство, вам необходимо:

  • Кабель USB OTG (USB On-The-Go)
  • Драйверы режима USB Host, загруженные на ваше устройство.
  • Версия операционной системы Android, загруженной на это устройство, поддерживающее режим USB Host
  • Android-устройство (например, телефон или планшет), имеющее встроенную аппаратную поддержку режима USB Host
  • И, наконец, на вашем устройстве должны быть драйверы, для любого устройства USb, которое вы подключаете.

Операционная система

Поддержка режима хоста USB была представлена ​​в Android версии 3.1 (сотовый ) , поэтому, если на вашем устройстве установлен Android 3.1 или новее, то у вас должна быть необходимая поддержка в вашей ОС, Android 4 также добавит дополнительную поддержку USB и OTG. Кроме того, многие сторонние ПЗУ добавляют поддержку режима хоста USB к телефонам, которые имеют аппаратную поддержку, но не имеют необходимой поддержки ОС или драйверов в официальной версии операционной системы.

Драйверы режима хоста

Большинство устройств, имеющих как аппаратную поддержку, так и новую достаточно ОС, будут иметь необходимые драйверы, загружаемые для включения режима USB Host, но некоторые из них этого не делают. Приложения для драйверов в Play Store можно найти в некоторых моделях, не имеющих встроенных драйверов. Некоторые модели с сторонними инструкциями и доступными драйверами:

Кабель

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

A USB OTG ( USB On-The-Go ) - это то, что используется для указания устройству в качестве хоста, это похоже на обычный USB-кабель, но у него есть один из внутренних контактов, соединенных с землей на одном конце, чтобы сообщить этому устройству, что он должен действовать как хост (технически контакты 4 и amp , 5 закорочены на землю в кабеле OTG).

Кроме того, поскольку большинство телефонов имеют гнезда micro-USB, но большинство USB-ключей имеют «полноразмерные» USB-штекеры, так как ниже у многих кабелей OTG есть мужской микро-B USB-разъем на одном конце, а сам USB-A подключите к другому, чтобы конвертировать между разъемами различного размера.

Motorola USB OTG кабель)


Комплект подключения Motorola Camera, который является USB Кабель OTG

Кабели USB OTG можно купить достаточно дешево в таких местах, как eBay или на рынке Amazon, а также во многих небольших магазинах электроники. Вы также можете обнаружить, что производитель вашего устройства продает официальную фирменную, часто называемую «набор для подключения камеры» или «USB-кабель для подключения карты памяти». Если вы храбры, вы также можете найти различные руководства в Интернете о том, как сделать свой собственный кабель OTG со стандартного USB-кабеля.

Драйверы USB-устройств

Когда вы подключаете USB-устройство к телефону или планшету Android, ему нужно знать, что это за устройство USB и что с ним делать. Для обычных устройств, таких как USB-накопители или камеры, поддерживающие PPTP или USB Mass Storage, они часто уже встроены в ОС. Для других USB-устройств, таких как Wifi, 3G или Bluetooth-ключи, в ОС могут не быть встроенные драйверы или только драйверы для определенных определенных устройств.

Как проверить все вместе

Есть несколько приложений, которые могут помочь вам проверить, есть ли у вас все необходимое аппаратное и программное обеспечение, например Диагностика хоста USB . Использование его для тестирования возможностей вашего устройства очень просто

  • Установите Диагностика хоста USB из Play Маркета
  • Запустить его
  • Нажмите ссылку «Начать диагностику», и в соответствии с указаниями сначала убедитесь, что у вас нет ничего подключенного к USB на вашем устройстве, а затем подключите устройство (например, флэш-накопитель USB) при появлении запроса

Диагностика хоста USB

Если все работает, вы должны получить итоговый экран, похожий на этот, с указанием, в первую очередь, нескольких деталей о вашем устройстве и операционной системе, а затем сообщить вам, указывает ли ваше устройство, что оно поддерживает режим USB Host, а затем весь важный окончательный вердикт, который позволяет вам знатьнезависимо от того, работал ли доступ к рабочему режиму хоста:

Экран результатов диагностики USB-хоста

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

Android поддерживает разные периферийные устройства USB и аксессуары USB для Android (Android USB accessories, специальные аппаратные устройства, поддерживающие протокол аксессуаров Android). При этом Android может работать в 2 режимах: как аксессуар USB (т. е. устройство USB) и как хост USB (т. е. главный на шине USB, который управляет USB-устройствами). В режиме аксессуара USB внешняя аппаратура USB работает как хост USB (обычно в такой роли выступает компьютер, в порт USB которого подключено портом USB устройство Android). Примерами таких аксессуаров могут служить роботизированные контроллеры, док-станции, диагностическое и музыкальное оборудование, киоски, картридеры, и многое другое. Это дает устройствам на основе Android, не имеющим возможностей хоста, средство взаимодействовать с аппаратурой USB. Аксессуары Android USB должны быть разработаны так, чтобы чтобы они могли работать с устройствами Android, с поддержкой протокола обмена аксессуаров Android (Android accessory communication protocol, см. [2]). В режиме хоста Android-устройство работает как хост. В этом режиме оно может обмениваться данными с таким устройствами USB, как цифровые камеры, клавиатуры, мыши и игровые контроллеры. Устройства USB, которые были разработаны для широкого спектра применения, все еще могут взаимодействовать с приложениями Android.

На рисунке 1 показаны различия между этими двумя режимами. Когда Android-устройство работает в режиме хоста (USB host), оно становится хостом на шине USB, и подает питание на шину USB. Когда Android работает в режиме аксессуара USB (USB device, USB accessory mode), подключенная снаружи аппаратура USB работает как хост и подает питание на шину.

Android-USB-host-and-accessory

Рис. 1. Android: режимы USB хоста и аксессуара (устройства) USB.

Оба режима, и USB accessory, и USB host напрямую поддерживаются в Android 3.1 (API level 12) или также на более новых платформах. USB accessory mode также портирован и на платформу Android 2.3.4 (API level 10) в виде добавочной библиотеки (add-on library), чтобы поддержать широкий спектр устройств. Производители устройств сами решают - нужно ли добавлять эту библиотеку в конечный образ системы устройства.

Примечание: поддержка режимов USB host и USB accessory полностью зависит от аппаратуры устройства, независимо от уровня платформы (т. е. независимо версии OS Android, установленной на устройстве, и наличия библиотеки). Вы можете отфильтровать устройства, которые поддерживают USB host и accessory с помощью элемента < uses-feature >. Подробности см. в документации про USB accessory [3] и USB host [4].

[Кое что о режиме отладки]

Когда отлаживаете приложения, которые используют фичи USB accessory или USB host, вероятно Вам понадобиться подключить к своему Android через USB некую аппаратуру USB. Это соединение не позволит работать мосту adb через соединение USB (см. [5]). Но Вы все еще можете соединиться с сервером adb через сеть. Вот что нужно сделать, чтобы разрешить работу adb через сетевое соединение:

1. Подключите Android-устройство через USB к Вашему компьютеру.
2. Из каталога platform-tools/ Вашего SDK выполните команду adb tcpip 5555 .
3. Введите команду adb connect < device-ip-address >:5555 . После этого Вы подключитесь к adb через сеть, и можете выдавать другие команды adb наподобие adb logcat .
4. Чтобы установить Ваше устройство на прослушивание шины USB, выполните команду adb usb .

Читайте также: