Что такое usb девайс

Обновлено: 04.07.2024

С каждым годом возможности смартфонов и планшетов Андроид превышают своих предшественников в несколько раз, предоставляя пользователям очень интересные и полезные функции. Теперь вы можете подключить к своему мобильному гаджету разные устройства, как к компьютеру. Такую возможность предоставляет технология OTG (One-The-Go).

Из статьи вы узнаете

Что это такое?

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

  1. Во-первых, это лишнее место на корпусе телефона. Практически все компании, занимающиеся производством техники, стараются уменьшать толщину корпуса и это огромное преимущество перед конкурентами, поэтому ни один производитель не пойдет на такой шаг.
  2. Во-вторых, такой порт будет активно потреблять дополнительную энергию, а это сильно бьет по общему расходу заряда батареи.
  3. В-третьих, на продаже аксессуаров зарабатывают огромные деньги партнеры разработчиков. То есть, в Андроид добавили поддержку USB OTG, побудили интерес к своей технологии, а партнеры предоставили на рынке те самые переходники, которые необходимы для работы. В итоге выигрывают все, даже потребитель!

Какие устройства можно подключать через OTG?

Подключение различных устройств

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

Без проблем можно подключать USB-накопители до 32 Гб. Можно попробовать и больше, например, на 64 Гб, но они работают не везде.

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

Можно подключать компьютерную мышь, клавиатуру. Это очень полезно в тех случаях, когда пользователю необходимо что-то напечатать, а стандартная виртуальная клавиатура его не устраивает.

Компьютерная мышь

Если вы заядлый геймер, то сможете при помощи OTG в телефоне подключить и геймпад. Только учтите, что не все игры из Google Play поддерживают такую технологию и подобные устройства. Здесь многое зависит от самого разработчика приложения.

Геймпад

Если же у вас плохая фронтальная камера на смартфоне, то просто подключите внешнюю!

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

Но и это еще не все! Нужно срочно распечатать документы? Подключите принтер! Сюда же можно добавить еще и монитор или телевизор.

Подключение принтера к смартфону

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

Какие смартфоны поддерживают технологию?

Некоторые производители убирают эту опцию лишь затем, чтобы сэкономить заряд батареи, повысив в целом его эффективность. Но на такие шаги идут только ради бюджетных моделей. Средний и высокий классы смартфонов 100% обладают такой технологией и поддерживают большой ассортимент подключаемых устройств.

Как подключить флешку к смартфону: зачем нужна технология OTG

Хорошо, если периферию, например, принтер или клавиатуру, можно подключить к смартфону без проводов. Но если принтер старый и не поддерживает Wi-Fi, тогда других вариантов, кроме подключения по проводу, просто нет. Но нельзя просто взять и соединить два гаджета кабелем. Особенно учитывая, что у современных смартфонов нет такого количества разнообразных разъемов, а есть только стандартный USB Type-C, а то и вовсе устаревший micro-USB. К тому же нужно, чтобы устройства были совместимы между собой. Вот здесь нам и помогает технология OTG.

Что такое OTG?

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

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



Кабель-переходник InterStep с USB Type-C на USB Type-A

Оба сопрягаемых аппарата должны поддерживать OTG. Чтобы подключить их друг к другу, понадобится специальный кабель-переходник – также с поддержкой OTG. На одном конце у него коннектор USB Type-C (или micro-USB), а на другом — вход USB-А.

По OTG можно подключить сразу несколько устройств, если смартфон дает такую возможность. В этом случае понадобится хаб — специальный переходник с несколькими разъемами.

Какие смартфоны поддерживают технологию?

Многие современные Android-смартфоны поддерживают On-the-Go. Теоретически это все устройства на Android, начиная с версии 2.3. Но на практике некоторые производители хотят сделать гаджет энергоэффективнее и не устанавливают программное обеспечение для этой технологии.



Чтобы проверить, поддерживает ли смартфон OTG, можно подключить к нему флешку или мышь через переходник

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



Переходник с USB Type-C на USB 3.0

Также можно провести проверку при помощи специальных приложений, например, USB OTG Checker или Easy OTG Checker. Приложение точно скажет вам, есть ли поддержка OTG на вашем устройстве.

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

Как подключить устройства при помощи OTG?

Бывает, что технология On-the-Go поддерживается, но по умолчанию отключена — тогда нужно зайти в настройки устройства и активировать OTG. Данный пункт можно найти с помощью строки поиска в меню «Настройки».



OTG переходник-хаб с Micro USB на Micro USB и 3x USB 2.0

Обычно смартфон вступает в роли ведущего устройства (хоста), но также может стать и периферией. Например, он может быть подключен к ПК в качестве камеры или микрофона.

Что можно подключить при помощи OTG?

Итак, рассмотрим, какие устройства и зачем можно подключить к смартфону при помощи OTG.

Клавиатура и мышь

Иногда для организации домашнего офиса к смартфону нужно подключить периферию для ввода данных – клавиатуру и мышь. Конечно, вся эта конструкция не заменит вам компьютер (хотя бы в связи с маленьким размером экрана), но в некоторых случаях ее будет достаточно для работы с документами.

Здесь все просто — после сопряжения на дисплее сразу появляется курсор и ваш смартфон или планшет превратится в рабочую станцию.

Флешка

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

Как правило, флешки объемом до 32 Гбайт работают безо всяких проблем. После подключения на экране смартфона сразу отображается содержимое накопителя. С файлами можно как работать без скачивания, так и загружать их на телефон.



Флешка SanDisk Ultra Dual Type-C поддерживает фирменное приложение SanDisk Memory Zone — с его помощью можно работать с файлами

Если объем флешки больше 32 Гбайт, то некоторые смартфоны не способны сразу распознать это устройство — тогда нужно установить файловый менеджер наподобие ES File Explorer. При его запуске вы увидите список всех устройств, подключенных к смартфону — выбираете ваш носитель и получаете доступ к его файлам.

Если файловый менеджер не помогает, то, скорее всего, произошел конфликт файловых систем. Android поддерживает системы FAT 16 и FAT 32 – другие могут не распознаться. Переформатировать флешку можно с помощью системных средств Windows или дополнительного ПО.

Внешний жесткий диск или SSD

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

Также для чтения жесткого диска вам понадобится установить на гаджет файловый менеджер, например, USB OTG File Manager, Total Commander, ES проводник и т.д. Если и файловый менеджер не распознает диск, на помощь придут программы наподобие USB OTG Helper или StickMount — они находят диск и подключают его, а дальнейшие действия аналогичны работе с флешкой через файловый менеджер.

Также к смартфону можно подключить компактный внешний SSD – для него дополнительное питание не потребуется.

Кардридер

При помощи кардридера, подключенного к смартфону, можно читать карты памяти и быстро скинуть на ваш девайс фото с камеры, если у нее нет беспроводного модуля. Конечно, если оба устройства поддерживают OTG, то передавать данные получится напрямую – без использования кардридера.

DSLR-камера

Смартфон, подключенный к зеркальной камере, может не только работать с файлами, но и служить пультом управления. Иногда гораздо удобнее выполнять все действия на более крупном экране телефона, например, чтобы отойти на какое-то расстояние от камеры и все равно видеть с ее дисплея. Для использования смартфона в качестве пульта ДУ на него потребуется установить приложение – например, для камер Canon используется программа DSLR Controller для Android.

Принтер

До сих пор на рынке довольно много принтеров и МФУ без поддержки Wi-Fi. Если нет времени перенести файл на ПК и распечатать с него, то пригодится возможность подключения по OTG.



К большинству смартфонов с OTG принтеры подключаются без проблем

Если смартфон не видит принтер, то нужно воспользоваться специальным приложением, например, PrintHand. Приложение найдёт устройство, поможет настроить доступ и приступить к печати.

Геймпад

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

Проводной интернет

Казалось бы, очень странно подключать смартфон или планшет к проводной сети, ведь есть мобильный интернет или Wi-Fi. Но если вам нужно загрузить в память что-то «тяжелое», например, фильмы для долгой дороги, а Wi-Fi не тянет, то при помощи специального переходника типа USB-to-Ethernet можно подключить к смартфону обычный LAN-провод.

Другие устройства

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

Обратная передача энергии

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

Нужна ли функция OTG в современном мире?

При современном уровне развития технологий большинство устройств уже имеют возможность беспроводного соединения. Существуют даже беспроводные жесткие диски и флешки. Но до сих пор выпускается техника, которую надо подключать по проводу. Также кто-то не доверяет передаче файлов по беспроводной сети, а иногда использование флешек — просто устоявшаяся привычка. Так что об отказе от OTG думать пока рано.

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

Коротко о USB - откуда все начинается. D+ и D- это дифференциальная пара, данные передаются в противофазе с одной лишь целью уменьшить помехи. То есть линия передачи по сути одна ! Есть ведущее устройство (Хост) и ведомое (Device).

Ведущее и ведомое могут одновременно что-то посылать в канал. Поэтому протокол USB очень требовательно распределяет , что ведущий и когда посылает и что (и когда) ведомый должен ответить. Иначе никак нельзя.

Вот на картинке ниже все отчетливо видно (один пакет от ведомого):

фотка 1

Сначала все просто:

Пакет всегда начинается с SYN (10000000).

Завершается пакет всегда EOP (End Of Packet ) . На картинке выше видна единственная ассиметрия в конце пакета, когда : 2 линии DP и DM различаются.

Примерная последовательность пакетов.

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

Периодические пакеты "НЕ СПАТЬ" SOF (Start Of Frame) - это примерно 1раз/1мс посылка от хоста ведомому ("не спи"). Их лучше сразу как-то отфильтровывать для понимания.

Далее остается три типа пакетов типа . Ниже их PID (Packet Identificator) , он же токен :
SETUP это служебные пакеты стандартного протокола настройки устройства
OUT это хост передает данные
IN это хост запрашивает данные от девайса

Эти пакеты вкладываются между SYNK и EOP .

фотка 2

Получается примерно такая структура [SYNC] [PID] [Address(7 бит)] [EndPoint] (4 бит) [EOP ]. На картинке выше видно как девайс отвечает NAK практически сразу и это нормально. Это означает , что девайсу надо подумать и сразу он не может ответить на команду.

PID это токен или (Program Identificator) SETUP, IN , OUT.

Address - это адрес нашего устройства на шине USB . Сначала он всегда 0 после подключения USB. Потом хост перенумеровывает все устройства на шине и присваивает каждому устройству уникальный адрес (размер всего 1 байт).

EndPoint - хост всегда общается не просто с устройством по адресу , а еще и с конкретной конечной точкой (end-point) устройства , которых может быть несколько. Как же хост узнает какие значения у конечных точек (EP) ? Правильно для этого зарезервировано значение 0 (конечная точка EP0), служебный end-point , через который хост получает первичную информацию от других конечных точках. Как всегда все просто.

Допустим наш хост уже получил всю информацию о конечных точках , интерфейсах, конфигурациях через EP0.

Как происходит дальше работа на примере обычной клавиатуры

Хост долбит периодически PID IN по адресу устройства плюс Endpoint устройства (у нас EndP 0x01), который отвечает за прием данных от клавиатуры (IN для хоста).

фотка 3

Если никакая клавиша не нажата ведомый обязан ответить и отвечает NAK. Такие пакеты хост передает примерно 1 раз в 10ms и устройство если не нажата клавиша передает NAK.

А вот когда на клавиатуре нажимается какая-нибудь клавиша, ведомый ответит сначала DATA0 пакетом и следом пакет ACK.

фотка 4

Количество передаваемых байт в DATA0 зависит от типа клавиатуры, то есть каждый решает сколько использовать байт для передачи скан кода нажатой клавиши. Клавиатура сообщает по стандартному протоколу через EP0 о своих настройках.

Тут есть нюанс , что хост всегда посылает запрос устройству на конкретный EP. Если запрос идет на EP для передачи данных (у нас EP1 ) это одно , если запрос идет на служебный EP0 - это хост хочет подключить , настроить устройство. То есть хост всегда определяет логику обмена , а девайс обязан подстраиваться под запрос.

Вообще кто есть хост? Это драйвер например клавиатура или сетевого адаптера и у каждого драйвера соответственно свой протокол , своя логика.

Таким образом если вы разрабатываете USB устройство и ПК шлет вам все пакеты на EP0 , а до других EP не доходит дело, то значит что-то еще не закончено с настройками устройства, что-то хосту не нравится.

Хост вообще говоря может ждать ответ одновременно от 2 и более конечных точек . Это абсолютно нормально. Выглядит это в логах анализатора LA1010 примерно так:

Видно как хост тупо чередует EP0 и EP2.

Если не возникает какого-то прерывания у девайса

То есть если на шине пакеты бегут, а прерывание необходимое не возникает. Например тупо не возникает прерывание IN bulk у RNDIS адаптера (DataIn у EP2). То есть на шине вижу , что девайс отсылает NAK на IN EP2, но самого прерывания в девайсе не возникает.

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

Так как у нас есть один рабочий проект но без FreeRTOS , то сначала тупо начинаем сверять регистры USB ( OTG_FS_GLOBAL и OTG_FS_DEVICE ): после инициализации , после открытия конечных точек, после приема нужного пакета и т.д. Эти регистры кстати удобно просматривать на закладке SFRS (в Atollic true Studio), тут видна их внутренняя структура. И еще с момента последней точки остановки подсвечиваются изменения.

фотка 1

В процессе сверки регистров мы находим отличия в OTG_FS_GLOBAL, исправляем, заодно изучаем назначение регистров и в какой-то момент даже ловим __HAL_PCD_IS_INVALID_INTERRUPT (на картинке выше видно). Ура хоть что-то.

На самом деле не знач - не ведая мы подошли к главному моменту. Мы наконец-то обратили внимание на USBD_LL_Init, а точнее на загадочные функции HAL_PCDEx_SetRxFiFo(..) и HAL_PCDEx_SetTxFiFo(..) .

Момент истины

И выяснилось , что мы не понимаем и половины логики работы USB . Не зная регистры вообще нет возможности понять что делать. В данном случае HAL это вред.

Итак HAL_PCDEx_SetRxFiFo / HAL_PCDEx_SetTxFiFo создает таблицу во внутренней памяти контроллера USB. Да именно контроллера USB , а не контроллера STM32. Так как у STM32F имеется как-бы свой встроенный контроллер , отвечающий за USB. И у него есть своя память 512К, в которой надо создать таблицу с буферами приема / передачи для каждой конечной точки.

Где эта таблица, где ее адреса.

А вот сама структура USB_OTG_GlobalTypeDef .

HAL - кий код становится намного прозрачнее теперь.

Опять момент истины

Дальше , если интересно немного о передаваемых скан кода клавиатуры . Проводная клавиатура Low Speed

Скан коды USB HID клавиатур это не ASCII коды и не не коды PS/2 клавы.

Интерфейс USB

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

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

Ну и для начала основные моменты и характеристики. Интерфейс USB 2.0 поддерживает три режима работы:

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

USB разъемы.

Помимо изображенных на рисунке, существуют также другие варианты исполнения USB-коннекторов, например, mini-USB и другие, ну это вы и так знаете 🙂

Отдельно стоит обсудить питание устройств USB. И тут также возможно несколько вариантов.

Во-первых устройства могут питаться от шины, тогда их можно разделить на два класса:

Разница тут заключается в том, что low-power устройства не могут потреблять больше, чем 100 мА. А устройства high-power должны потреблять не более 100 мА лишь на этапе конфигурации. После того, как они сконфигурированы хостом их потребление может составлять до 500 мА.

Кроме того, устройства могут иметь свой собственный источник питания. В этом случае они могут получать до 100 мА от шины, а все остальное забирать у своего источника.

С этим вроде бы все, давайте потихоньку переходить к структуре передаваемых данных. Все-таки это представляет для нас наибольший интерес!

Структура данных интерфейса USB.

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

Интерфейс USB, структура данных.

Каждая транзакция имеет следующий вид:

USB транзакции.

Структура Token пакета интерфейса USB.

Пакеты Token бывают трех типов:

Пакет In сообщает нашему USB-устройству, что хост готов принять от него информацию. Пакет Out, напротив, сигнализирует о готовности и желании хоста поделиться информацией. Пакет Setup нужен для использования управляющих передач. Ну а пакет Start Of Frame используется для того, чтобы инициировать начало кадра.

Тут есть еще один важный момент. PID включает в себя 4 бита, но при передаче они дополняются еще 4-мя битами, которые получаются путем инвертирования первых 4-ых бит.

Структура Data пакета.

Тут все в принципе так же, как и в пакете Token, только вместо адреса устройства и номера конечной точки здесь у нас передаваемые данные.

Осталось нам рассмотреть Status пакеты и пакеты SOF:

Структура Status пакета.

Тут PID может принимать всего лишь два значения:

И, наконец, Start Of Frame пакеты:

Структура SOF пакета.

Давайте в качестве примера рассмотрим процесс записи данных в USB-устройство. То есть рассмотрим пример структуры кадра записи.

Кадр, как вы помните состоит из транзакций и имеет следующий вид:

Кадр интерфейса USB.

Что представляют из себя все эти транзакции? Сейчас разберемся! Транзакция SETUP:

Транзакция Setup.

Транзакция Out.

Аналогично при чтении данных из USB-устройства кадр выглядит так:

Кадр USB при чтении данных.

Транзакцию SETUP мы уже видели, посмотрим на транзакцию IN:

Транзакция In.

Как видите, все эти транзакции имеют такую структуру, как мы обсуждали выше 🙂

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

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