USB slave
Материал из Xgu.ru
USB slave — управляемое устройство.
Многие компьютеры умеют загружаться с USB. Если бы можно было не записывать загрузочный образ на flash-диск, а передавать его прямо с одного компьютера на другой, это позволило бы ускорить процедуру инсталляции операционной системы на компьютер, особенно для тех систем, которые не поддерживают инсталляцию по PXE. LiveCD тоже можно было бы загружать без записи на диск.
Теоретически, это можно было бы сделать, если соединить два компьютера при помощи host-to-host-кабеля USB, такого как тот, что используется при поднятии сети usbnet.
Похоже, что сейчас нет софта, который позволяет это сделать, но (опять же, теоретически), его можно было бы смастерить на основе кода usbnet и прочего кода usb-gadget.
Пример использования g_file_storage из usb-gadget:
Можно указать ещё опцию removable=y, тогда файл backing_file можно менять через sysfs-интерфейс.
Если есть поддержка USB-slave, то всё работает. Но в том-то всё и дело, что в обычных компьютерах её нет!
Например, для телефона Nokia N900, такое организовать очень просто.
Ниже описывается пример использования, в котором мы создаём загрузочный файл, который телефон отдаёт как загрузочное устроство. Понятно, что в данном случае быстрее было бы использовать обычную флэшку, но здесь важно то, что загрузка выполняется с файла, который лежит на устройстве. И на его месте могло быть всё, что угодно (образ диска с другого компьютера, iSCSI-устройство, образ виртуального диска машины или что-нибудь ещё).
[править] Пример подготовки загрузочного файла для эскпорта по USB
Ключевая часть. Отдаём файл как блочное устройство для компьютера [1] :
Проинциализируем на нём таблицу разделов, отформатируем и проинсталлируем загрузчик:
Устанавливаем загрузчик grub4dos, который умеет выполнять загрузку с ISO-образов:
Table of Contents:
Разъемы USB следуют за отношениями ведущего и подчиненного. Это означает, что одно устройство, обычно персональный компьютер, выполняет роль главного, управляя информацией, поступающей в порт USB и из него. Периферийное устройство USB, например небольшая флешка, действует как подчиненное устройство. Им может управлять только мастер или он не будет работать. В этом отношении некоторые USB-слэйвы бесполезны, если они не подключены к главному устройству.
USB-ведомые могут содержать только данные и не работать как анонимные блоки.
USB Рабы
Термин «ведомые устройства USB» охватывает весь спектр периферийных устройств. Одной из наиболее распространенных форм USB-слэйва является флэш-накопитель или флэш-накопитель. Эти небольшие устройства подключаются к USB-концентраторам на компьютерах, предлагая куски внешнего хранилища размером от 256 МБ до 16 ГБ и более. Тем не менее, USB-устройства также включают такие устройства, как веб-камеры, принтеры или сканеры. В каждом случае устройству требуется главный компьютер для полной функциональности, хотя некоторые USB-устройства, такие как камеры, будут работать независимо. Некоторые периферийные устройства, такие как смартфоны, не являются строго подчиненными устройствами, хотя они действуют как таковые при подключении к компьютеру.
взаимодействие
Истинные USB-ведомые не могут взаимодействовать друг с другом, только с главным устройством. Таким образом, веб-камера USB не будет подключаться к игровому контроллеру USB. Большинство устройств, выпущенных после 2000 года, используют для связи USB 2.0, что является более быстрой спецификацией, чем у оригинальных USB-устройств с большей пропускной способностью. Некоторые USB-порты после 2010 года теперь используют USB 3.0, хотя по состоянию на июль 2011 года это относится только к высококлассному оборудованию. USB 3.0 обеспечивает скорость передачи 5 гигабит в секунду, что значительно выше, чем скорость USB 2.0 480 мегабит в секунду.
соединение
Многие USB-устройства подключаются к главному компьютеру с помощью соединительного кабеля. Большинство USB-кабелей имеют стандартный разъем на одном конце, предназначенный для подключения к классическому USB-порту на персональных компьютерах и аналогичных устройствах. Однако разъем на другом конце может отличаться в зависимости от типа USB-устройства. Например, на другом конце он может иметь микро-разъем для подключения к мобильному телефону или меньшему устройству.
Простые вопросы: что такое шрифт и что такое семейство шрифтов?
Что такое шрифт? Что такое семейство шрифтов? Когда были впервые изобретены шрифты? Каковы характеристики шрифта? Как хранятся шрифты в Windows?
Что такое 802.11ax, 802.11ad, 802.11ac и 802.11n? что такое Wi-Fi 6, Wi-Fi 5 и так далее?
Что такое Wi-Fi 6, Wi-Fi 5 или Wi-Fi 4? Что такое 802.11ax, 802.11ac или 802.11n? Что означают эти аббревиатуры? Что такое 802.11ad?
Что такое стекло гориллы? что такое 2.5d стекло? как они сравниваются?
Что такое Gorilla Glass? Что это значит? Что такое 2.5D стекло? Есть ли разница? Какое стекло лучше или долговечнее?
USB slave
Материал из Xgu.ru
USB slave — управляемое устройство.
Многие компьютеры умеют загружаться с USB. Если бы можно было не записывать загрузочный образ на flash-диск, а передавать его прямо с одного компьютера на другой, это позволило бы ускорить процедуру инсталляции операционной системы на компьютер, особенно для тех систем, которые не поддерживают инсталляцию по PXE. LiveCD тоже можно было бы загружать без записи на диск.
Теоретически, это можно было бы сделать, если соединить два компьютера при помощи host-to-host-кабеля USB, такого как тот, что используется при поднятии сети usbnet.
Похоже, что сейчас нет софта, который позволяет это сделать, но (опять же, теоретически), его можно было бы смастерить на основе кода usbnet и прочего кода usb-gadget.
Пример использования g_file_storage из usb-gadget:
Можно указать ещё опцию removable=y, тогда файл backing_file можно менять через sysfs-интерфейс.
Если есть поддержка USB-slave, то всё работает. Но в том-то всё и дело, что в обычных компьютерах её нет!
Например, для телефона Nokia N900, такое организовать очень просто.
Ниже описывается пример использования, в котором мы создаём загрузочный файл, который телефон отдаёт как загрузочное устроство. Понятно, что в данном случае быстрее было бы использовать обычную флэшку, но здесь важно то, что загрузка выполняется с файла, который лежит на устройстве. И на его месте могло быть всё, что угодно (образ диска с другого компьютера, iSCSI-устройство, образ виртуального диска машины или что-нибудь ещё).
[править] Пример подготовки загрузочного файла для эскпорта по USB
Ключевая часть. Отдаём файл как блочное устройство для компьютера [1] :
Проинциализируем на нём таблицу разделов, отформатируем и проинсталлируем загрузчик:
Устанавливаем загрузчик grub4dos, который умеет выполнять загрузку с ISO-образов:
Собирая стерео фото-, видео- аппарат
В этой статье аккумулирован опыт, включая определенные нюансы при создании стереоприбора на базе stereopi первой модели. С помощью «изделия» возможно делать стерео фото- и видео- картинки, смотреть на мир в стерео режиме, используя мобильный телефон и несложную vr гарнитуру(тот же cardboard). Прилагается образ для stereopi первого поколения для быстрого развертывания и использования.

Что такое stereopi
Об этой разработке неоднократно уже писалось как на Хабре (пост, пост), так и в других источниках. Но если коротко: stereopi — это compute module v.3 с обвесом в виде usb портов, выходом на hdmi, ethernet и, разумеется, 2-х синхронизированных csi камер для raspberry pi.
*На подходе уже обновленная версия второго поколенияstereopi v.2, но она пока не доступна, по крайней мере мне.
В принципе, на сайте stereopi представлена достаточно подробная инструкция, что куда втыкать и что куда загружать. Однако, несмотря на то, что все разжевано до мелочей, подводные камни начинают возникать по мере приближения к заветной цели — созданию стереоприбора — буквально на этапе подключения wi-fi. Кроме того, поместив compute module в stereopi и пришвартовав две камеры, становится непонятно как и куда это все поместить, «чтобы не торчало во все стороны».
Поэкспериментировав достаточно с usb донглами, корпусами и прочими аксессуарами, и был выработан определенный рабочий концепт, речь о котором и пойдет далее.
Как всё работает
Софт-начинка (основной образ для stereopi) представлен разработчиками stereopi, и надо признаться, что после обновления он стал достаточно прогрессивным. Доработанный web-интерфейс дополнен многочисленными опциями, которые делают жизнь удобнее. Добавлены кнопки создания фото-, видео- прямо из web-интерфейса, которых лично мне так не хватало. Помимо прочего, сам web-интерфейс оптимизирован и нет подвисаний при работе с тем же файловым менеджером даже при относительно не быстром wi-fi.
*Ранее автором самостоятельно предпринимались попытки доработать web-интерфейс, а также оптимизировать его загрузку, но это не пошло в мэйнстрим.
**Кроме того были проблемы с apt-get update, которые вызывали слишком много вопросов.
Итак, после запуска stereopi, она подключается к сети wifi, получает ip адрес. Далее к этому адресу можно подключиться как со стационарного ПК, так и со смартфона. Причем на последнем можно выбрать режим «без иконок» и наслаждаться стерео.
С чего начать собирать?
C корпуса конечно. Его можно напечатать на 3d принтере, а можно просто купить коробочку из дерева в каком-нибудь специализированном магазине. Данные коробочки, как правило, продаются для изготовителей шкатулок.
Например подойдет вот такая деревянная заготовка размерами — 10x10x6 см (в Москве продается в «Лео… до»:
Несколько слов о usb-донглах
Несмотря на то, что в самом compute module уже есть встроенный wi-fi, но его качество оставляет желать лучшего. Поэтому лучше приобрести внешний usb-свисток и желательно, чтобы он не сильно выпирал из корпуса.
На известном китайском ресурсе есть на любой вкус и цвет. Но самое интересное начинается, когда пытаешься установить driver на linux систему stereopi. Большинство usb-донглов от китайцев работают из коробки только для систем на базе windows.
Тем не менее, эта проблема зачастую преодолима, и при установке драйверов на stereopi необходимо не забывать про то, что система работает в режиме read-only и ее перед любыми изменениями необходимо перемонтировать — ссылка.
В данном проекте используется Wi-Fi адаптер TP-LINK Archer T2U Nano и под него уже установлен драйвер на прилагаемом к статье образе.
Несколько слов о держателях для аккумуляторов 18650B
Здесь нет ничего особенного и можно использовать как держатель на 4 аккумулятора, так и на меньшее количество, главное помнить, что stereopi необходимо 5V питания.
Но все же, стандартный пластиковый держатель для батарей неудобен — батареи приходится выковыривать из него острым предметом, нет контроллера переразряда, да и сами батареи прилегают неплотно в держателях. Тем не менее главное преимущество — цена и незначительный вес.
И все же мой совет — использовать нормальные держатели, немного переплатив за них:
Например, ссылка на товар. В них также предусмотрены контроллеры, защищающие от переразряда, а также тумблер питания, который в данном проекте вынесен отдельно.
Собрать все вместе
Для камер потребуется просверлить отверстия в лицевой части коробки. Разместить камеры на расстоянии 65 мм, закрепив их на болтики m2.
*Вообще для разного режима стереосъемки разработчики продают отдельно держатели для камер с уже выверенными размерами (ссылка). Но для меня это показалось дороговато для нескольких кусочков фанеры.
Точно также крепится держатель для батарей снизу корпуса — на болты m2, длины которых вполне хватает чтобы оставить еще зазор для выдуваемого из корпуса воздуха:
К днищу корпуса внутри крепится cooler, а также размещается понижающий преобразователь:
Stereopi крепится опять же на болты m2 с противоположной стороны лицевой панели коробочки.
Заливаем образ
Чтобы запустить аппарат, сперва необходимо загрузить образ на stereopi.
Небольшая ремарка — необходимо уточнить, что никакой sd карты не требуется, так как образ заливается непосредственно во встроенную память compute module через stereopi.
Образ можно взять из данной статьи либо скачать образ, который предлагается на сайте разработчиков stereopi. Но в последнем случае потребуется самостоятельно искать и устанавливать драйвер для usb dongle, а также править параметры wi-fi сети.
Двигаясь далее, предварительно потребуется установить на ПК rpiboot — программу, позволяющую общаться со stereopi.
Далее — поставить перемычку-джампер в usb-slave, подключить кабель mini-usb, соединив stereopi с ПК.
*В данном случае stereopi работает в режиме slave и при подключении определится как обычная usb-флэшка (после заливки образа).
Перенесение образа на stereopi можно производить разными программами, но я по-старинке использую win32diskimager.
После заливки образа можно изменить параметры wi-fi сети, к которой будет подключаться stereopi, сделав это в файле cosmostreamer.conf:
*Для этого необходимо еще раз запустить stereopi с установленным джампером на usb-slave.
После заливки образа, необходимо выключить stereopi, вытащить джампер и далее загружаться как обычно.
Как обычно — это подавая питание на 5V VCC вход stereopi, а не через mini-usb кабель.
Также, что важно, при питании сoolerа необходимо помнить, что на stereopi v.1 gpio гребенка представлена реверсивно, то есть расположение пинов не так как у стандартной raspberry pi.
Этот вопрос также обсуждался автором на форуме здесь.
После прогрузки залитого образа stereopi будет искать сети boss либо boss1 (пароль одинаковый — 1234554321) и пытаться к ним подключиться.
Фото и видео создается при нажатии прямо на экране соответствующих кнопок.
Далее результаты попадают в папку /mnt/DCIM, до которой можно дотянуться прямо из браузера, воспользовавшись встроенным tiny file manager:
И, что самое приятное, скачать на пк или смартфон прямо из браузера:
В заключение
Сваять свой стерео фото-, видео- аппарат, собрав по пути несколько интересных шишек, дорогого стоит.
Тем не менее, несмотря на рабочую модель, остаются моменты над которыми придется подумать. Например, как видно на фото, камеры даже из одной серии дают разные цветовые оттенки. Размещение камер на дефолтном расстоянии 65мм дают небольшие искажения при сведении изображений. Видимо, придется поработать с крепежами камер либо все же купить anycase для богатых, о котором упоминалось в статье.
Также интересно как поведет себя stereopi с образом предустановленного opencv и элементами дополненной реальности. Но это, как говорится, совсем другая история.
Образ для stereopi — скачать (2 Гб, после распаковки 15,3 Гб).
Варианты аппаратной реализации USB Type-C, или Когда не требуется Power Delivery
Когда мы в SberDevices делаем новое устройство, работаем над его аппаратной частью, перед нами встаёт вопрос выбора интерфейсов. Важным моментом при выборе является их доступность и совместимость с другими устройствами.
В своих устройствах мы не могли пройти мимо интерфейса USB-C. Помимо того, что он очень популярен в современных девайсах, он серьёзно расширил функциональность USB по сравнению со своими предшественниками. Давайте расскажу о нём поподробнее.
Краткий обзор особенностей USB TYPE-C
Стандарты USB существуют много лет, развиваются и совершенствуются по мере увеличения технологических потребностей и возможностей. Несмотря на свою универсальность, которая следует из аббревиатуры, привычный USB перестал удовлетворять по объему своей функциональности. В частности, не может решить задачу по обеспечению питания многих современных устройств, потребление которых серьёзно увеличилось. Первая версия USB TYPE-C появилась в 2013 году. Помимо возможностей USB 2.0 и USB 3.0, USB-C стал поддерживать существенно более энергоёмкие профили питания, а также альтернативные режимы работы. В альтернативных режимах контакты разъёма используются для передачи данных высокоскоростных стандартов, таких как Display Port, Thunderbolt, HDMI, Mobile High-Definition Link (MHL). Недавно была опубликована новая реализация стандарта — USB4, которая также ориентируется на спецификацию USB-C.
Описание и назначение контактов разъёма
Разъём включает в себя 24 контакта. Такое большое число контактов по сравнению с привычными разъёмами USB связано как с добавлением новых контактов, расширяющих функциональность, так и с дублированием контактов на противоположную часть разъёма. Так группы сигналов USB 2.0 и USB 3.0 задублированы, разъем стал симметричным, поэтому теперь его можно вставлять любой стороной.
Рассмотрим группы сигналов USB-C соединителя:
| Группа | Цепи |
|---|---|
| Питание | VBUS (4 контакта), GND (4 контакта) |
| USB 2.0 | DP (2 контакта), DN (2 контакта) |
| USB 3.0 | TX1+, TX1-, TX2+, TX2-, RX1+, RX1-, RX2+, RX2- |
| Конфигурационные контакты | CC1, CC2 |
| Дополнительные (Альтернативный режим) | SBU1, SBU2 |
Видно, что под питание заложено 4 пары контактов. Это намекает на то, что через разъём стала возможна доставка существенно большей энергии для питания устройства. Через контакты питания возможна передача до 100 Ватт в нагрузку.
Профили питания доступные через USB TYPE-C:
| USB 2.0 | 5 В 500 mA |
| USB 3.0/USB 3.1 | 5 В 900 mA |
| USB BC 1.2 | 5 В, до 1.5 А |
| USB Type-C Current 1.5A | 5 В 1.5 A |
| USB Type-C Current 3.0A | 5 В 3.0 A |
| USB Power Delivery | до 20 В, до 5A |
Режим питания зависит от того, какая функциональность USB-C используется. Появившиеся контакты CC позволяют установить требуемый режим питания и открывают некоторые дополнительные возможности, но об этом позже.
Чтобы иметь возможность использовать профиль питания с большим током, при установке соединения нужно воспользоваться конфигурационными контактами CC.
Конфигурационные контакты СС
С помощью конфигурационных контактов CC (Configuration channel) происходит подключение двух устройств, установка параметров соединения, профилей питания, а также информационный обмен протокола USB Power Delivery. Функционально CC1- и CC2-пины решают следующие задачи:
Источник (он же DFP) подтягивает линии CC к плюсу через резисторы Rp или использует источники тока. Потребитель (UFP) в свою очередь через резисторы Rd подтягивает линии CC к минусу.
Выставляя определённый номинал Rp (или создавая определённый ток на линии СС), host сообщает, какой ток для питания устройства он может обеспечить. Измеряя падение напряжения на Rd, потребитель понимает, какой Rp используется на противоположном конце и, следовательно, определяет ток питания, который может обеспечить host. Без использования USB Power Delivery по такой схеме возможно установить соединение c током до 3А с единственно возможным напряжением 5В.
Экономичный вариант реализации без USB PD
Как видно выше, спецификация USB-C поддерживает широкий спектр стандартов передачи данных и профилей электропитания, но это не означает, что разработчик обязан использовать всю функциональность. Минимальный набор USB TYPE-C может включать в себя USB 2.0 с контактами CC и единственным напряжением питания 5V. В такой конфигурации можно обеспечить потребителю до 15 Вт (5 В, 3А), что значительно больше, чем может дать стандартный порт USB 3.0 – 4,5 Вт (5В, 900 мА).
Чтобы реализовать логику подключения между DFP и UFP, можно использовать микросхему контроллера конфигурации CC, например, PTN5150. Этот вариант значительно проще и дешевле навороченных контроллеров, поддерживающих USB Power Delivery. Структурная схема выглядит так:
Как видно, основные узлы представляют собой: монитор напряжений на СС контактах, набор источников тока, резисторов для переключения состояния выводов, модуль управления ролями устройства.
Микросхема имеет интерфейс I2C, с его помощью можно определить или изменить роль устройства (DFP, UFP, DRP).
Когда выбирается роль DFP, устройство предполагается как Power Source, для которого есть возможность выбрать 3 профиля питания. После выставления соответствующих бит в регистре управления, происходит подключение соответствующего источника тока на линию CC.
| Ток на СС-линии | Режим питания |
|---|---|
| 80 uA | 5V / 0.9 A |
| 180 uA | 5V / 1.5 A |
| 330 uA | 5V / 3 A |
В случае определения микросхемы в качестве UFP, контакты CC подключаются через резистор 5,1 кОм на землю. Монитор измеряет падение напряжения на этом резисторе и в статусный регистр заносится текущий режим питания.
Также возможно установить роль Dual Role Power (DRP), в этом режиме микросхема последовательно изменяет состояние СС-контактов от “pull-up Rp” до “pull-down Rd” и обратно до тех пор, пока не будет установлено соединение. Соединение возможно только между одним источником (Power Source) и одним потребителем (Power Sink). Таким образом, когда микросхема находится в режиме DRP и монитор напряжения CC-контактов замечает понижение напряжения на противоположном конце (подключён “pull-down Rd”), устройство понимает, что подключено к Sink, и начинает играть роль Source. Такой режим полезен в том случае, когда заранее неизвестно, в каком режиме должно работать устройство.
Рассмотрим пример использования контроллера
Кроме описанных выше СС-пинов и I2C-шины стоит отдельно отметить контакты ID, CON_DET, PORT. Контакт ID отображает режим, в котором в данный момент находится контроллер. Когда устройство определило себя в качестве DFP, ID примет значение LOW. Контакт CON_DET находится в HIGH, когда соединение установлено, LOW — в обратном случае. Эти два логических сигнала будем использовать далее для включения (когда мы DFP) и отключения (UFP) питания подключённого устройства.
Port — это вход, которым задаётся начальный режим устройства после включения питания. В случае, когда используется “pull-up”, контроллер становится DFP, если “pull-down” — UFP. Если нога осталась «висеть в воздухе», будет использоваться режим Dual Role, и устройство будет ждать подключения, чтобы определиться со своей ролью. Это состояние может быть изменено позднее, после конфигурирования по I2C или изменения уровня напряжения на PORT. Таким образом можно управлять режимами работы без использования I2C.
Нужно управлять питанием внешнего устройства, для этого можно воспользоваться дополнительной микросхемой логики и ключом.
Наша задача подавать питание на разъём USB-C только в том случае, когда к нам подключён UFP. ID в таком случае примет значение LOW, CON_DET — значение HIGH. Для того, чтобы открыть ключ высоким уровнем HIGH, надо реализовать функцию Y = CON_DET& (NOT ID). Таким образом, если снаружи подключён UFP, он от нас питается, если DFP, то напряжение на разъём не подаётся и не происходит конфликта двух источников.
В случае, если нет задачи менять роль устройства в процессе работы, а также не требуется определения ориентации кабеля, можно выполнить вариант проще, без микросхемы вообще. Допустим, ваше устройство играет строго одну роль — UFP/Power Sink, например, это флешка. В таком случае достаточно выводы СС1 и СС2 на разъёме подключить через 5,1 кОм на землю.
В случае, если ваше устройство играет только роль DFP/Power source и оно должно подключаться к устройству USB-C Dual Role, также можно обойтись резисторами. В этом случае подбираем номиналы в зависимости от напряжения источника, к которому подключаем резисторы.















