Режим usb

Содержание

Как включить отладку по USB на заблокированном телефоне Андроид

Режим usb

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

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

Давайте разберёмся, как включить отладку по USB на заблокированном телефоне Андроид.

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

  • Получение root-прав;
  • Установка другой прошивки или обновление уже имеющейся на телефоне;
  • Восстановление устройства после системного сбоя или ошибки;
  • Установка специальных приложений;
  • Управление возможностями системы;

Как видим, режим применяется во всех сферах, причём как обычными людьми, так и разработчиками. Телефон может превратиться в «кирпич», когда угодно, поэтому знать принцип включения отладки по USB желательно каждому человеку.

Когда пригодится эта инструкция

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

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

По умолчанию каждый аппарат оснащён Stock Recovery, установленным производителем с завода. Некоторые пользователи устанавливают Custom Recovery, то есть меню восстановления, содержащее ряд дополнительных функций.

Самыми распространёнными типами кастомного рекавери является TWRP и CWM.

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

Включение отладки по USB на заблокированном телефоне

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

Инструкция для Android 5.1 и ниже

Первым делом запускаем компьютер и загружаем на него два файла: «platform-tools.zip» и «QtADB-cwm_edition.zip». Скачанные архивы распаковываем в корневую папку диска С.

Для этого кликаем правой кнопкой мыши по файлу и в появившемся меню выбираем «Извлечь файлы». В строке «Путь извлечения» указываем корневую папку диска C, то есть C:\.

В конце запускаем процедуру нажатием по клавише «Ок».

Теперь в корневой директории диска С создаём папку с названием «Sqlite3_Windows».

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

Возвращаемся к смартфону. Его необходимо перевести в Recovery-режим, что в зависимости от модели и производителя делается по-разному:

  • Samsung. Одновременно зажимаем кнопку «Home», клавишу регулировки громкости вверх и кнопку включения.
  • HTC. Удерживаем кнопку питания и клавишу регулировки громкости вниз.
  • Одновременно нажимаем по кнопке включения и клавише увеличения громкости звука.
  • Удерживаем кнопку питания и клавишу увеличения громкости звука.
  • Huawei и Honor. Одновременно зажимаем кнопку питания и клавишу регулировки громкости вниз или вверх (всё зависит от модели телефона).

После загрузки смартфона в нужном режиме подключаем его к компьютеру. Для этого используем обычный кабель для зарядки. На ПК запускаем программу QtADB. Просто переходим в папку с приложением и двойным кликом открываем файл «QtADB.exe».

Если потребуется указать путь к утилитам ADB и AAPT, то нажимаем по кнопке «Обзор» и выбираем папку «platform-tools». Именно в ней находятся необходимые компоненты для запуска программы.

В приложении нажимаем по вкладке «Advanced» и убеждаемся в том, что монтирование раздела /data завершено успешно.

Теперь нажимаем по кнопке «Файлы» и в левой части программы открываем папку «Sqlite3_Windows», а в правой соответственно – «/data/data/com.android.providers.settings/databases/». Далее перемещаем объект «settings.db» из памяти смартфона на компьютер.

После завершения процедуры копирования запускаем на ПК командную строку. Для этого откройте меню «Пуск» и в поиске введите «cmd». Затем откройте первую программу из результатов поиска. Теперь в командную строку поочерёдно вводим следующие команды, после каждой из которых нажимаем по кнопке «Enter»:

  • cd C:\Sqlite3_Windows;
  • sqlite3 settings.db;
  • update secure set value=1 where name=’adb_enabled’;;
  • .quit;
[su_note note_color=»#abdb6c» text_color=»#000000″]Обратите внимание, что каждая из команд в списке заканчивается точкой с запятой. Если знака препинания два, то значит один из них принадлежит запросу.[/su_note]

Возвращаемся в программу и перемещаем отредактированный файл «settings.db» обратно в память смартфона. Подтверждаем замену и отключаем устройство от компьютера. После завершения процедуры телефон можно запустить и убедиться, что на нём активирована отладка по USB.

Инструкция для Android 6 и выше

Если на вашем устройстве установлен Андроид 6.0 и выше, то принцип действий проще. В общем, просто следуйте указаниям пошаговой инструкции:

  1. Подключаем телефон к компьютеру в recovery-режиме. Напомним, что на смартфоне должно быть установлено кастомное рекавери.
  2. Загружаем на ПК файловый менеджер QtADB по ссылке, указанной выше. После этого запускаем его и проверяем, что монтирование раздела /data прошло успешно.
  3. Переходим в раздел «Файлы» и в правой части программы указываем адрес «/data/system/users/0/».
  4. Находим файл «settings_global.xml» и при помощи текстового редактора открываем его. В нём находим строку «adb_enabled» и изменяем параметр «value=»0″» на «value=»1″».

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

Универсальная инструкция без Recovery

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

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

При неработающем тачскрине, но целом экране, переходите к данной инструкции:

  1. Подсоединяем один конец OTG кабеля к смартфону, а другой подключаем к мыши.
  2. Включаем мышь и проверяем наличие курсора на экране.
  3. С помощью мыши заходим в настройки.
  4. Переходим в раздел «О телефоне» и несколько раз кликаем по номеру сборки или версии прошивки. В итоге должна появиться вкладка для разработчиков.
  5. Заходим во вкладку «Расширенные настройки», а после в раздел «Для разработчиков».
  6. Переводим ползунок возле пункта «Отладка по USB» вправо и подтверждаем включение режима.

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

Ответы на популярные вопросы

[su_accordion] [su_spoiler title=»Что делать, если программа QtADB не видит телефон?» open=»no» style=»default» icon=»plus» anchor=»» class=»»]Первым делом убедитесь в том, что на смартфоне установлено кастомное рекавери. После этого проверьте наличие драйверов на компьютере для конкретной модели устройства, а также осмотрите кабель на наличие повреждений.[/su_spoiler] [su_spoiler title=»Как открыть меню recovery на смартфоне LG?» open=»no» style=»default» icon=»plus» anchor=»» class=»»]Одновременно нажмите по кнопке питания и клавише увеличения громкости. После появления логотипа «LG» на экране повторите процедуру ещё раз.[/su_spoiler] [su_spoiler title=»Можно ли установить программу QtADB на Windows 10?» open=»no» style=»default» icon=»plus» anchor=»» class=»»]Да, программа работает с операционной системой Windows 10.[/su_spoiler] [/su_accordion]

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

Источник: https://GuruDroid.net/kak-vklyuchit-otladku-po-usb-na-zablokirovannom-telefone.html

Работа с устройствами USB в Android

Режим usb

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

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

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

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

Несколько реже:

  • Сотовые модемы
  • Сетевые адаптеры
  • Вебкамеры

Хабы поддерживаются при наличии полноценных хост-портов, но не поддерживаются на портах OTG. Подробнее список устройств, поддерживаемых на уровне ядра 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, но у меня это не стало работать.

Принтеры

На примере принтера я покажу, как непосредственно использовать API android.hardware.usb. На уровне передачи данных все принтеры поддерживают стандартый класс USB устройств: int UsbConstants.USB_CLASS_PRINTER = 7; Класс предельно простой. В рамках этого класса устройство должно поддерживать:

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

int GET_DEVICE_ID = 0;int GET_PORT_STATUS = 1;int SOFT_RESET = 2; Код, приведенный ниже, предоставляет функциональность, аналогичную устройству /dev/usb/lp в Linux. Далее нам нужен фильтр, преобразующий исходный документ в пакет данных, понятный конкретной модели принтера. Но это тема иной статьи. Как один из вариантов — можно собрать ghostscript с помощью NDK. Для работы с устройством нам в первую очередь нужно: 1. Найти устройство. В примере для простоты я ищу первый попавшийся: UsbDevice findDevice() { for (UsbDevice usbDevice: mUsbManager.getDeviceList().values()) { if (usbDevice.getDeviceClass() == UsbConstants.USB_CLASS_PRINTER) { return usbDevice; } else { UsbInterface usbInterface = findInterface(usbDevice); if (usbInterface != null) return usbDevice; } } return null;} UsbInterface findInterface(UsbDevice usbDevice) { for (int nIf = 0; nIf < usbDevice.getInterfaceCount(); nIf++) { UsbInterface usbInterface = usbDevice.getInterface(nIf); if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_PRINTER) { return usbInterface; } } return null;}UsbDevice mUsbDevice = findDevice();UsbInterface mUsbInterface = findInterface(mUsbDevice); 2. Получить endpoint’ы: for (int nEp = 0; nEp < mUsbInterface.getEndpointCount(); nEp++) { UsbEndpoint tmpEndpoint = mUsbInterface.getEndpoint(nEp); if (tmpEndpoint.getType() != UsbConstants.USB_ENDPOINT_XFER_BULK) continue; if ((mOutEndpoint == null) && (tmpEndpoint.getDirection() == UsbConstants.USB_DIR_OUT)) { mOutEndpoint = tmpEndpoint; } else if ((mInEndpoint == null) && (tmpEndpoint.getDirection() == UsbConstants.USB_DIR_IN)) { mInEndpoint = tmpEndpoint; }}if (mOutEndpoint == null) throw new IOException("No write endpoint: " + deviceName); 3. Непосредсвенно открыть устройство: mConnection = mUsbManager.openDevice(mUsbDevice);if (mConnection == null) throw new IOException("Can't open USB connection:" + deviceName);mConnection.claimInterface (mUsbInterface, true); 4. После этого мы можем читать и писать в устройство: public int read(final byte[] data) throws IOException { int size = Math.min(data.length, mInEndpoint.getMaxPacketSize()); return mConnection.bulkTransfer(mInEndpoint, data, size, getReadTimeout());} public int write(final byte[] data, final int length) throws IOException { int offset = 0; while (offset < length) { int size = Math.min(length - offset, mInEndpoint.getMaxPacketSize()); int bytesWritten = mConnection.bulkTransfer(mOutEndpoint, Arrays.copyOfRange(data, offset, offset + size), size, getWriteTimeout()); if (bytesWritten

Источник: https://habr.com/ru/post/277093/

Что такое USB OTG и зачем это нужно?

Режим usb

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

Со времен первых коммуникаторов смартфоны все больше стремятся к копированию функционала ноутбуков и настольных ПК.

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

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

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

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

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

В качестве примера будет рассмотрен стандартный переходник USB OTG с уже постепенно устаревающим разъемом Micro-USB. На схеме выше у Micro-USB отображены пять контактов, и именно при взаимодействии 4-го и 5-го контактов мобильное устройство получает возможность распознать то, что к нему подключено. Тогда как на первый контакт подается питания, без которого работа USB OTG также невозможна.

Почти все современные смартфоны и планшеты поддерживают USB OTG. Исключения бывают в основном среди бюджетных моделей с разъемом Micro-USB, хотя иногда встречаются и экземпляры с современным Type-C портом, к которому нельзя подключить ничего кроме кабеля (к примеру, смартфон Noa N1).

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

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

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

Однако у популярной Android OS есть множество измененных версий прошивок, и в китайских смартфонах, на которых установлены фирменные оболочки ColorOS, HiOS и Funtouch OS, перед каждым подключением нужно активировать функцию USB OTG, которая через какое-то время автоматически отключается.

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

Самый верный способ проверки — попробуйте подключить к устройству какой-нибудь гаджет — USB-флешку или что-то другое.

Также есть различные приложения, которые пытаются определить, поддерживается ли устройством «On-the-Go», но информация, отображаемая в таком софте, не всегда является достоверной.

Еще для проверки отлично подойдет любая модель USB-тестера. При подключении к мобильному устройству экран тестера сразу начнет работать, что и будет свидетельствовать о поддержке USB OTG.

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

В некоторых случаях переходник не нужен, так как есть гаджеты, подключаемые к мобильному устройству через его порт — это может быть устаревающий Micro-USB, современный Type-C или, в случае с техникой Apple, — Lightning.

Интересным примером служат флешки, у которых есть сразу несколько разъемов, и которым не нужны переходники для подключения.

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

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

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

Что еще можно подключить через USB OTG если устройство, к примеру, не поддерживает карты памяти, но информацию с них нужно перенести на смартфон, не используя при этом компьютер, то на помощь могут прийти OTG картридеры. Удобство некоторых моделей в том, что они работают не только с карточками формата microSD, но и с более крупными по размеру SD-картами.

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

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

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

Список гаджетов этим не ограничивается — подключиться также можно к принтеру или камере, или вполне реально использовать проводную гарнитуру, требующую дополнительного питания для подсветки. Еще в продаже можно найти модемы, проводные геймпады, ИК-передатчики, USB-вентиляторы, всевозможные датчики, USB-гирлянды и даже USB-увлажнители воздуха или маленькие пылесосы.

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

Источник: https://club.dns-shop.ru/blog/t-122-drugaya-periferiya/22773-chto-takoe-usb-otg-i-zachem-eto-nujno/

Интерфейс USB. Полный обзор и структура пакетов данных

Режим usb

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

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

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

  • High Speed – до 480 Мб/с
  • Full Speed – до 12 Мб/с
  • Low Speed – до 1.5 Мб/с

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

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

Источник: https://microtechnics.ru/osnovy-interfejsa-usb/

Что умеют функции USB: USB Host, USB OTG, USB PD

Режим usb

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

Быстрая зарядка через USB и ее стандарты

Самая желанная и нужная функция USB в современных смартфонах. Позволяет заряжать телефон в 2-3 раза быстрее стандартной зарядки. Как это происходит? Все ли смартфоны поддерживают? Давайте ответим на эти вопросы.

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

Для сравнения, стандартный порт USB 3.0 позволяет питать телефон током с напряжением 5 Вольт и силой тока 1A. Большинство телефонов и других устройств поддерживают также напряжение 5V и силу тока 2.4A. Для быстрой зарядки аккумулятора используется зарядной, повышающее напряжение до 5В, 9В, 12В и выше. Еще такая зарядка увеличивает силу тока до 3 А и выше.

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

Стандартов быстрой зарядки тоже есть несколько.

Стандарт быстрой зарядки USB-PD

Стандарт USB Power Delivery (USB PD) был разработан Ассоциацией USB Implementers Forum (USB-IF).  Является свободным стандартом, который любой производитель может использовать на любом устройстве с USB-портом. Его особенность – предельная мощность быстрой зарядки до 100 Вт.

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

  Поэтому одно и то же зарядное устройство USB PD может заряжать смартфон на максимальной скорости, а затем заряжать ноутбук тоже на максимальной скорости.

Различные производители по-разному используют стандарт USB PD. В Apple, например есть жесткие ограничения.

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

Быстрая зарядка работает только, если у батареи осталось от 0% до 79% своего заряда. Но, как только ваш айфон достигнет заряда 80%, быстрая зарядка отключается.

Qualcomm Quick Charge

Стандарт Quick Charge разработан компанией Qualcomm. Один из наиболее широко применяемых стандартов зарядки в смартфонах. Есть обратная совместимость со старыми версиями Quick Charge. А это значит, что ваша старая быстрая зарядка, сможет заряжать новый смартфон. Плюс есть встроенная защита от перегрева и короткого замыкания.

ПоколениеНапряжениеСила токаМаксимальная мощность
Quick Charge 1.02A10Вт
Quick Charge 2.05В/9В/12В1.67A/2A18Вт
Quick Charge 3.03.6В – 20В2.5A/4.6A18Вт
Quick Charge 4.0+5В/9В (USB PD), 3.6В – 20В3A (USB PD), 2.5A/4.6A27Вт (USB PD)

Функция автоматически поддерживается процессорами компании: Snapdragon 855, 845, 835, 820, 620, 618, 617, 430.

Но любые другие производители также могут внедрять в свои чипсеты поддержку этого стандарта.

Самый свежий стандарт быстрой зарядки Quick Charge 4.0+ становится все более популярным. Его поддержку можно найти в телефонах LG G8 ThinQ, Razer Phone 2 и Xiaomi Mi Mix 3. Такая быстрая зарядка может выдавать до 27 Вт. А вот Quick Charge 3.0 может работать с напряжением 3.6 Вольт и мощностью 18 Ватт максимум.

USB OTG

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

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

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

Не каждый Android-смартфон поддерживает USB OTG. Зависит от производителя.

Функция USB Host

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

Все функции USB в смартфонах:

Источник: https://sravnismart.ru/usb_services/

краткая шпаргалка по USB протоколу

Режим usb

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

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

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

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

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

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

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

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

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

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

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

Получается примерно такая структура [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 для хоста).

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

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

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

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

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

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

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

0.210871930,IN,0x2A,0x02,,,0x0F // запрос данных от EP20.210875190,NAK,,,,,0.210897110,IN,0x2A,0x00,,,0x0A // запрос данных от EP00.210900440,NAK,,,,,0.210902980,IN,0x2A,0x02,,,0x0F // запрос данных от EP20.210906280,NAK,,,,,0.210928120,IN,0x2A,0x00,,,0x0A // запрос данных от EP00.210931450,NAK,,,,,0.210934770,IN,0x2A,0x02,,,0x0F // запрос данных от EP20.210938030,NAK,,,,,

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

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

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

0.205299000,OUT,0x0F,0x00,,,0x030.205302350,DATA1,,,,,0x00000.205305600,NAK,,,,,0.205328000,OUT,0x0F,0x00,,,0x030.205331350,DATA1,,,,,0x00000.205334600,ACK,,,,,0.205373310,IN,0x0F,0x02,,,0x060.205376610,NAK,,,,,0.205379080,IN,0x0F,0x02,,,0x060.205382370,NAK,,,,,

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

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

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

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

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

Огромное спасибо товарищу в интернете https://mcu.goodboard.ru/viewtopic.php?id=40 . Просто , кратко и доходчиво объяснил какие регистры отвечают за USB и самое главное что с ними делать (их нюансы).

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

Итак HAL_PCDEx_SetRxFiFo / HAL_PCDEx_SetTxFiFo создает таблицу во внутренней памяти контроллера USB. Да именно контроллера USB , а не контроллера STM32.

Так как у STM32F имеется как-бы свой встроенный контроллер , отвечающий за USB.

И у него есть своя память 512К, в которой надо создать таблицу с буферами приема / передачи для каждой конечной точки.

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

#define USB_OTG_FS_PERIPH_BASE 0x50000000U [stm32f205xx.h]…………..

#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) [stm32f205xx.h]

……….

USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev){……. hpcd_USB_OTG_FS.Instance = USB_OTG_FS; void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd){ USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;

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

typedef struct{ __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register Address offset : 0x00 */ __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register Address offset : 0x04 */ __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register Address offset : 0x08 */ __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register Address offset : 0x0C */ __IO uint32_t GRSTCTL; /*!< Core Reset Register Address offset : 0x10 */ __IO uint32_t GINTSTS; /*!< Core Interrupt Register Address offset : 0x14 */ __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register Address offset : 0x18 */ __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register Address offset : 0x1C */ __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register Address offset : 0x20 */ __IO uint32_t GRXFSIZ; /* Receive FIFO Size Register Address offset : 0x24 */ __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register Address offset : 0x28 */ __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg Address offset : 0x2C */ uint32_t Reserved30[2]; /* Reserved Address offset : 0x30 */ __IO uint32_t GCCFG; /*!< General Purpose IO Register Address offset : 0x38 */ __IO uint32_t CID; /*!< User ID Register Address offset : 0x3C */ uint32_t Reserved40[48]; /*!< Reserved Address offset : 0x40-0xFF */ __IO uint32_t HPTXFSIZ; /*!< Host Periodic Tx FIFO Size Reg Address offset : 0x100 */ __IO uint32_t DIEPTXF[0x0F]; /*!< dev Periodic Transmit FIFO */}USB_OTG_GlobalTypeDef;

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

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

Но проблемка и неотправкой по IN EP2 вдруг разрешается до неприличия банальным образом.

Чтобы что-то отправить , надо что-то послать ! Ха-Ха! А кто сказал что , мы что-то посылаем? Дело в том , что функции класса устройства из структуры USBD_ClassTypeDef типа DataIn , DataOut , SOF , EP0_RxReady – ЭТО ВСЕ КОЛЛБЕК ФУНКЦИИ, то есть функции , вызываемы по факту , уже по результату команды.
А реально командой приема и отправки с девайса является USB_EP0StartXfer (USB_EPStartXfer) и отправки соответственно тоже USB_EP0StartXfer (USB_EPStartXfer) ! Смотрите еще раз внимательно стек вызовов функций:

USBD_LL_PrepareReceive HAL_PCD_EP_Receive USB_EP0StartXfer | USB_EPStartXfer. USBD_LL_Transmit HAL_PCD_EP_Transmit USB_EP0StartXfer | USB_EPStartXfer.

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

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

Простые нажатия возвращают DATA0 и DATA11 – 00 00 1E 00 00 00 00 00 00 (DATA0) 00 00 00 00 00 00 00 00 00 (DATA1)2 – 00 00 1F 00 00 00 00 00 00 (DATA0) 00 00 00 00 00 00 00 00 00 (DATA1)3 – 00 00 20 00 00 00 00 00 00 (DATA0) 00 00 00 00 00 00 00 00 00 (DATA1)

И значение у нашей клавы будет в 3 байте из 8 переданных DATA0.

SHIFT F 02 00 00 00 00 00 00 00 (DATA0) 02 00 09 00 00 00 00 00 00 (DATA1).

В общем опытным путем разобраться можно.

Беспроводная клавиатура Full Speed

Возвращает в DATA0 12 байт

01 00 00 00 00 00 00 00 00 00 00 00 (DATA0) 01 00 1E 00 00 00 00 00 00 00 00 00 (DATA1)

Значение PID читаем так : xxxxyyyyy – это первые четыре бита (x) , y это тоже самое , только наоборот.

ГруппаЗначение PIDИдентификатор пакета
Token0001OUT Token
Token1001IN Token
Token0101SOF Token
Token1101SETUP Token
Data0011DATA0
Data1011DATA1
Data0111DATA2
Data1111MDATA
Handshake0010ACK Handshake
Handshake1010NAK Handshake
Handshake1110STALL Handshake
Handshake0110NYET (No Response Yet)
Special1100PREamble
Special1100ERR
Special1000Split
Special0100Ping

Источник: https://kkmspb.ru/development/microcontrollers/USB/USB-HOST/introduction.php

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

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.