Как Raspberry Pi может имитировать USB-устройство хранения данных?

Устройства хранения USB, такие как USB-накопители и жесткие диски, являются общими для подключения внешнего хранилища к любому компьютеру. Как может малина Pi эмулировать USB-накопитель? Самым простым приложением было прямое подключение к SD-карте через USB, но также можно было обеспечить доступ к файлам через Ethernet. Я подумал о следующем макете для USB-облака :

Компьютер <--- USB ---> | Малина Пи | & Lt; --- --- Ethernet > Cloud, NAS и т. Д.

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

Изменить: Существующие продукты с похожими, но ограниченными функциями включают Wireless Media Stick и USB-over-Network . Доступ к файлам в облаке возможен благодаря установке виртуального хранилища с помощью облачного диска или аналогичного программного обеспечения и шифрования с помощью TrueCrypt или EncFS-паролей будет храниться только на SD-карте Raspberry Pi, но можно получить доступ к хранилищу на любом компьютере без ввода парольной фразы на ненадежной машине.

44 голоса | спросил Jakob 16 J000000Monday12 2012, 03:25:33

10 ответов


12

Проблема в том, что USB-соединение Pi с ПК не имеет подключенных контактов данных - только силовые контакты. Поэтому вы не можете использовать это, чтобы говорить на USB, потому что он не подключен.

Ваш единственный вариант с Pi - это «бит взрыва» USB с помощью контактов GPIO, но это очень медленно и потенциально ненадежно. Я подозреваю, что вы действительно сможете эмулировать клавиатуру или мышь - любая более высокая пропускная способность, вероятно, будет слишком большой для процессора, с которым можно справиться, учитывая жесткие требования к времени бит, что-то вроде USB.

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

ответил Malvineous 16 J000000Monday12 2012, 07:42:46
8

Основываясь на быстром прочтении листка данных BCM2835 (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf), глава 15 выглядит, как USB OTG поддерживается в HW, поэтому теоретически это может быть вопрос SW для поддержки предлагаемой схемы. Я не эксперт по протоколу USB (или даже новичок, действительно), но было бы неплохо иметь эту функциональность.

Глядя на описание BeagleBone (http://elinux.org/BeagleBone), он, похоже, поддерживает что-то подобное, хотя упоминается конкретный разъем, поддерживающий этот режим. Было бы очень жаль, если малина Pi ограничена только выбором разъема.

Надеюсь, что это будет полезно.

ответил Don Christensen 26 J000000Thursday12 2012, 05:29:04
6

Теперь это кажется возможным с помощью PiZero - см. http://pi.gbaman.info/?p=699 для более.

ответил David Walters 13 Jpm1000000pmWed, 13 Jan 2016 18:09:19 +030016 2016, 18:09:19
4

К сожалению, хотя это кажется простым, насколько я могу судить, это не было сделано. См. Эту тему и подробный ответ для более подробной информации

https://unix.stackexchange.com/questions/2683/serve-files-over -USB

И Ответ на Pi здесь: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938

ответил wmarbut 16 J000000Monday12 2012, 06:35:58
3

Если вы не особенно обеспокоены производительностью, возможно, вы получите USB-совместимый микроконтроллер с USB-накопителем (например, можно перепрограммировать интерфейс отладки STM32F103 на модуле eval-анализа STM32F0 за 10 долларов США), тщательно подключите его к последовательный порт pi в качестве задней части и выполнялся в несколько сотен километров.

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

Я уже упоминал, что я уже упоминал о передаче файлов на полке, но для этого потребуется соответствующее программное обеспечение для клиентского ПК и поддержки драйвера linux для исходного кода для конца pi.

ответил Chris Stratton 31 J000000Tuesday12 2012, 04:13:10
3

Я узнал, что Arduino может эмулировать USB-устройство, Arduino Leonardo даже из коробка. USB-стек LUFA можно использовать на Arduino, и он реализует драйвер USB-накопителя большой емкости (см. < a href = "http://www.instructables.com/id/Music-Playing-Alarm-Clock/step6/USB-Mass-Storage-with-MicroSD/" rel = "nofollow"> этот учебник ) , Эта настройка может быть использована для отображения команд USB для SCSI , таких как, например, считыватель SD-карт. Я не знаю достаточно о SCSI, но похоже, что SD-карта на Raspberry Pi и USB-via-Arduino может использоваться вместе на одном автобусе. Конечно, эта идея не является полным решением ...

ответил Jakob 2 AM000000120000005931 2012, 00:58:59
1

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

То, о чем вы говорите, это заставить два USB-хоста (Raspberry Pi и компьютер) общаться, к сожалению, просто не поддерживается стандартом USB. Есть некоторые устройства, которые могут подделать передачу данных между двумя USB-хостами, но поскольку Malvineous упомянул, что вам лучше использовать ethernet.

В вашем вопросе конкретно упоминается использование малины Pi для эмуляции USB-хранилища , но считаете ли вы настройкой малины Pi как NAS? Использование Raspberry Pi в качестве ящика NAS в основном делает именно то, что вы просили, но вместо использования USB он будет использовать вашу сеть. Вот отличные инструкции о том, как это сделать, если вы заинтересованы.

ответил Dan B 25 J000000Wednesday12 2012, 01:30:06
1

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

ответил Nyg 11 72012vEurope/Moscow11bEurope/MoscowSun, 11 Nov 2012 18:35:46 +0400 2012, 18:35:46
1

Теперь Pi Zero и Pi Zero W доступны и поддерживают интерфейс Gadget ( Kernal.org , linux-sunxi.org ), позволяющий создавать несколько различных профилей, включая USB Массовое хранение и виртуальная сеть.

Ближайшим решением для запроса OP является использование сетевого протокола между Pi и хост-компьютером, а затем другая форма сетевого протокола от Pi до облачного /сетевого провайдера. Pi Zero W имеет встроенный Wi-Fi, поэтому он может подключаться напрямую к поставщику облачных /сетевых услуг. Сетевое взаимодействие этих ссылок будет самым простым способом выполнить работу. Существует множество сетевых протоколов и облачных провайдеров.

Попытка использовать USB Mass Storage будет плохой идеей; вам придется писать или переписывать адаптацию на уровне драйвера между USB Mass Storage и Pi. Вы либо начинаете с MTP , либо завершаете что-то подобное. MTP имеет серьезные проблемы с производительностью ( Reddit , XDA , HowToGeek , Reddit ), поэтому я предлагаю сетевой подход.

В этом направлении должно быть много программ и проектов. С точки зрения Pi, он просто действует как сервер файлового сервера /синхронизации, поэтому любой подобный учебник должен вас начать. Изучая такие вещи, как Pi-based Seafile , Syncthing , SugarSync и серверы OwnCloud должны начать работу.

Несколько полезных руководств по Pi Zero в качестве USB-гаджета:

ответил YetAnotherRandomUser 5 72017vEurope/Moscow11bEurope/MoscowSun, 05 Nov 2017 05:50:20 +0300 2017, 05:50:20
0

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

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

Однако существуют расширения, USB On-The-Go , которые позволяют подключиться к USB-соединению, если он подключен к хосту или клиенту, и настроить его в зависимости от этого. Чтобы это работало, вы должны иметь поддержку в оборудовании. Я не верю, что RPi предназначен для этого.

Для получения дополнительной информации просмотрите http://www.usb.org/home или даже < a href = "http://en.wikipedia.org/wiki/Universal_Serial_Bus" rel = "nofollow"> http://en.wikipedia.org/wiki/Universal_Serial_Bus

Короче говоря, я не верю, что это можно сделать.

ответил Anders 26 J000000Thursday12 2012, 01:37:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132