USB-устройства хранения данных, такие как USB-накопители и жесткие диски, обычно используются для подключения внешнего хранилища к любому типу компьютеров. Как Raspberry Pi может эмулировать USB-накопитель? Самым простым приложением был прямой доступ к SD-карте через USB, но можно также обеспечить доступ к файлам через Ethernet. Я подумал о следующем макете для « USB-флешки »:
Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.
Компьютер должен видеть только обычную флешку для чтения и записи файлов. Raspberry Pi будет выступать в качестве программируемого моста, который отображает списки каталогов и доступ к файлам для запроса в облачное хранилище. Вы можете получить доступ к хостерам облачного хранилища с любого компьютера (включая медиаплееры черного ящика) через USB, не устанавливая на компьютер никакого дополнительного программного обеспечения . USB-мост Raspberry Pi также должен иметь возможность шифровать / дешифровать файлы на лету, чтобы можно было хранить файлы, зашифрованные в облаке, и получать к ним доступ на любом устройстве, например на обычном USB-накопителе.
Изменить: Существующие продукты с аналогичными, но ограниченными функциями включают Wireless Media Stick и USB-через сеть . Доступ к файлам в облаке может быть возможен путем подключения виртуального хранилища с помощью облачного диска или аналогичного программного обеспечения и шифрования с помощью TrueCrypt или EncFS - пароли будут храниться только на SD-карте Raspberry Pi, но доступ к хранилищу можно получить с любого компьютера без необходимости введите пароль на ненадежном компьютере.
источник
Ответы:
Проблема в том, что USB-соединение Pi с ПК не имеет подключенных контактов данных - только контакты питания. Таким образом, вы не можете использовать это, чтобы говорить по USB, потому что он не подключен.
Ваша единственная опция с Pi - «бит бит» USB с помощью выводов GPIO, но это очень медленно и потенциально ненадежно. Я подозреваю, что вы действительно сможете эмулировать клавиатуру или мышь - все, что с более высокой пропускной способностью, вероятно, будет слишком большим для процессора, учитывая жесткие временные требования, предъявляемые к битам, например USB.
Другой альтернативой было бы найти устройство, которое позволит вам соединить два компьютера вместе через USB, чтобы создать своего рода сеть. Но тогда вы можете просто использовать соединение Ethernet ...
источник
Основываясь на кратком ознакомлении с таблицей данных BCM2835 (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf), похоже, что USB OTG поддерживается в HW, так что теоретически, это может быть просто вопросом SW, чтобы поддержать предложенную схему. Я не эксперт по протоколу USB (или даже новичок), но было бы неплохо иметь такую функциональность.
Глядя на описание BeagleBone (http://elinux.org/BeagleBone), кажется, что он поддерживает нечто подобное, хотя есть конкретное упоминание о разъеме, который поддерживает этот режим. Было бы прискорбно, если Raspberry Pi ограничен только из-за выбора разъема.
Надеюсь, это полезно.
источник
Теперь это представляется возможным с помощью PiZero - см. Http://pi.gbaman.info/?p=699 .
источник
К сожалению, хотя это кажется простым, насколько я могу судить, это не было сделано. Смотрите эту тему и очень подробный ответ для более подробной информации
https://unix.stackexchange.com/questions/2683/serve-files-over-usb
И конкретный ответ Pi здесь: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938
источник
Если вас не особо беспокоит производительность, вы, возможно, могли бы получить микроконтроллер с поддержкой USB с кодом USB-накопителя (например, вы можете перепрограммировать интерфейс отладки STM32F103 на модуле eval обнаружения STM32F0 за 10 долл.), Осторожно подключив его к последовательному порту pi. в качестве задней части, и работает на несколько сотен килобод.
Скорее всего, лучшая производительность будет достигнута за счет взаимодействия с клиентским ПК через Ethernet, но для этого потребуется пользовательский драйвер или другое представление для операционной системы хоста, т. Е. Вы будете подключенным к сети устройством хранения или общим сервером.
Полагаю, что уже были упомянуты готовые кабели для передачи файлов, но для этого потребовалось бы соответствующее программное обеспечение для клиентского ПК и поддержка драйвера linux на уровне источника для pi-конца.
источник
Я узнал, что Arduino может эмулировать USB-устройство, Arduino Leonardo даже из коробки. Стек USB LUFA может быть использован на Arduino и реализует драйвера запоминающего устройства USB (см этот учебник ). Эту настройку можно использовать для сопоставления команд USB и SCSI, например, для считывателя SD-карт. Я не знаю достаточно о SCSI, но похоже, что SD-карта на Raspberry Pi и USB-через-Arduino могут использоваться вместе на одной шине. Конечно, эта идея не является полным решением ...
источник
Это сводится к тому, как работает USB, вы видите, что когда с USB связаны две вещи, есть все способы, чтобы USB-хост и USB-устройство никогда не переключались между собой. USB-хост делает все, что не могут делать устройства USB, в основном для синхронизации передачи данных между всеми устройствами, подключенными к шине USB. Проверьте страницу википедии USB для получения дополнительной информации .
Вы говорите о том, чтобы заставить два USB-хоста (Raspberry Pi и компьютер) общаться, что, к сожалению, просто не поддерживается стандартом USB. Есть некоторые устройства, которые могут имитировать передачу данных между двумя USB-хостами, но, как упомянул Malvineous, вам лучше использовать Ethernet.
В вашем вопросе конкретно упоминается использование Raspberry Pi для эмуляции USB-накопителя, но рассматривали ли вы возможность настройки Raspberry Pi в качестве NAS? Использование Raspberry Pi в качестве устройства NAS в основном делает то, что вы просили, но вместо использования USB оно будет использовать вашу сеть. Вот отличные инструкции о том, как это сделать, если вы заинтересованы.
источник
Я могу сделать это со своим старым телефоном Nokia N900, используя драйвер USB-гаджета, входящий в состав стандартного ядра Nokia. Эмулируемое устройство ведет себя точно так же, как реальное, вы даже можете загрузить с него ПК.
источник
Pi Zero и Pi Zero W теперь доступны и поддерживают интерфейс гаджетов ( Kernal.org , linux-sunxi.org ), позволяющий использовать несколько различных профилей, включая USB Mass Storage и виртуальные сети.
Наиболее близкое решение для запроса OP состоит в том, чтобы использовать сетевой протокол между Pi и хост-ПК, а затем некоторую другую форму сетевого протокола от Pi до поставщика облачных / сетевых услуг. Pi Zero W имеет встроенный Wi-Fi, поэтому может даже напрямую подключаться к облачному / сетевому провайдеру. Объединение в сеть этих двух ссылок будет самым простым способом выполнить работу. Есть много сетевых протоколов и облачных провайдеров.
Попытка использовать USB Mass Storage была бы плохой идеей; вам придется написать или переписать адаптацию на уровне драйвера между USB Mass Storage и Pi. Вы либо начинаете с MTP , либо получаете что-то подобное. MTP имеет серьезные проблемы с производительностью ( Reddit , XDA , HowToGeek , Reddit ), поэтому я предлагаю сетевой подход.
В этом направлении должно быть много программ и проектов. С точки зрения Pi, он просто действует как сервер файлового сервера / синхронизации, поэтому любой подобный учебник должен помочь вам начать. Изучите такие вещи, как серверы Seafile , Syncthing , SugarSync и OwnCloud на основе Pi .
Несколько полезных руководств по Pi Zero в качестве USB-гаджета:
источник
Стандарт USB основывается на хосте. Это означает, что одно устройство должно контролировать всю связь с подключенными устройствами. Клиенты могут быть простым устройством или концентратором. Концентратор является прокси-сервером для клиентов, подключенных к концентратору, и связывается с хостом (или концентратором), к которому он подключен.
Как выглядит оригинальный дизайн USB, вы не можете соединить два хоста вместе (ваш компьютер и RPi).
Тем не менее, существуют расширения USB On-The-Go , которые позволяют USB-подключению видеть, подключено ли оно к хосту или клиенту, и в зависимости от этого регулировать его роль. Чтобы это работало, вы должны иметь поддержку в оборудовании. Я не верю, что RPi предназначен для этого.
Для получения дополнительной информации, смотрите http://www.usb.org/home или даже http://en.wikipedia.org/wiki/Universal_Serial_Bus
Короче говоря, я не верю, что это можно сделать.
источник