Urządzenia pamięci USB, takie jak pamięci USB i dyski twarde, są często używane do podłączania pamięci zewnętrznej do dowolnego rodzaju komputera. W jaki sposób Raspberry Pi może emulować pamięć USB? Najłatwiejszą aplikacją było uzyskanie bezpośredniego dostępu do karty SD przez USB, ale można również zapewnić dostęp do plików przez Ethernet. Pomyślałem o następującym układzie „ pamięci USB w chmurze ”:
Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.
Komputer powinien widzieć tylko zwykłą pamięć USB do odczytu i zapisu plików. Raspberry Pi działałby jak programowalny most, który odwzorowuje katalogi i dostęp do plików na żądanie do magazynu w chmurze. Możesz uzyskać dostęp do hostingu w chmurze z dowolnego komputera (w tym odtwarzaczy multimedialnych Black Box) przez USB bez konieczności instalowania dodatkowego oprogramowania na komputerze. Mostek USB Raspberry Pi powinien również być w stanie szyfrować / deszyfrować pliki w locie, aby można było przechowywać pliki zaszyfrowane w chmurze i uzyskiwać do nich dostęp na dowolnym urządzeniu, takim jak zwykły dysk USB.
Edycja: Istniejące produkty o podobnych, ale ograniczonych funkcjach to Wireless Media Stick i USB-over-Network . Dostęp do plików w chmurze może być możliwy poprzez zamontowanie wirtualnej pamięci za pomocą dysku w chmurze lub podobnego oprogramowania i szyfrowanie za pomocą TrueCrypt lub EncFS - hasła byłyby przechowywane na karcie SD Raspberry Pi tylko, ale można było uzyskać dostęp do pamięci z dowolnego komputera bez konieczności wpisz hasło na niezaufanym komputerze.
źródło
Odpowiedzi:
Problem polega na tym, że połączenie USB Pi z komputerem PC nie ma podłączonych styków danych - tylko styki zasilania. Nie możesz więc używać tego do mówienia przez USB, ponieważ nie jest podłączony.
Jedyną opcją w przypadku Pi byłoby „bit bang” USB za pomocą pinów GPIO, ale jest to bardzo wolne i potencjalnie zawodne. Podejrzewam, że naprawdę byłbyś w stanie emulować tylko klawiaturę lub mysz - cokolwiek o wyższej przepustowości prawdopodobnie byłoby zbyt duże, aby procesor mógł sobie z tym poradzić, biorąc pod uwagę ścisłe wymagania czasowe bit banging coś takiego jak USB.
Inną alternatywą byłoby znalezienie urządzenia, które pozwala połączyć dwa komputery razem przez USB, aby stworzyć rodzaj sieci. Ale równie dobrze możesz po prostu użyć połączenia Ethernet ...
źródło
W oparciu o szybkie przejrzenie arkusza danych BCM2835 (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) rozdział 15 wygląda na to, że USB OTG jest obsługiwany w HW, więc teoretycznie może to być kwestia SW, aby wesprzeć proponowany program. Nie jestem ekspertem od protokołu USB (a nawet nowicjuszem, naprawdę), ale fajnie byłoby mieć tę funkcjonalność.
Patrząc na opis BeagleBone (http://elinux.org/BeagleBone), wydaje się on obsługiwać coś podobnego, chociaż jest konkretna wzmianka o złączu obsługującym ten tryb. Byłoby niefortunne, gdyby Raspberry Pi był ograniczony tylko z powodu wyboru złącza.
Mam nadzieję, że to jest pomocne.
źródło
Wydaje się to teraz możliwe przy użyciu PiZero - więcej informacji można znaleźć na stronie http://pi.gbaman.info/?p=699 .
źródło
Niestety, choć wydaje się to proste, najlepiej jak mogę stwierdzić, nie zostało to zrobione. Zobacz ten wątek i bardzo szczegółową odpowiedź, aby uzyskać więcej informacji
https://unix.stackexchange.com/questions/2683/serve-files-over-usb
I odpowiedź na konkretne pytanie tutaj: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938
źródło
Jeśli nie martwisz się szczególnie wydajnością, prawdopodobnie możesz uzyskać mikrokontroler obsługujący USB z kodem pamięci masowej USB (możesz na przykład przeprogramować interfejs debugowania STM32F103 na module ewaluacyjnym STM32F0 za 10 USD), ostrożnie podłącz go do portu szeregowego pi jako zaplecze i przebiegają z prędkością kilkuset kilobaud.
Lepszą wydajność zapewne uzyskałby interfejs z komputerem klienckim za pośrednictwem sieci Ethernet, ale wymagałoby to niestandardowego sterownika lub innej prezentacji dla systemu operacyjnego hosta - tzn. Byłbyś urządzeniem pamięci masowej lub serwerem współużytkowanym w sieci.
Sądzę, że gotowe kable do przesyłania plików już wspomniano, ale wymagałoby to odpowiedniego oprogramowania dla komputera klienckiego i obsługi sterowników linux na poziomie źródłowym dla końcówki pi.
źródło
Dowiedziałem się, że Arduino może emulować urządzenie USB, Arduino Leonardo nawet po wyjęciu z pudełka. LUFA stos USB może być używany na Arduino i realizuje sterownik urządzenia pamięci masowej USB (patrz samouczek ). Tego ustawienia można użyć do odwzorowania poleceń USB na SCSI, takich jak czytnik kart SD. Nie wiem wystarczająco dużo o SCSI, ale wygląda na to, że karta SD na Raspberry Pi i USB-przez-Arduino mogą być używane razem na tej samej magistrali. Pewnie ten pomysł nie jest pełnym rozwiązaniem ...
źródło
Sprowadza się to do tego, jak działa USB. Widzisz, że kiedy dwie rzeczy są połączone z USB, host USB i urządzenie USB mogą być używane na różne sposoby. Host USB wykonuje wszelkiego rodzaju rzeczy, których urządzenia USB nie są w stanie zrobić, głównie w celu zsynchronizowania transferu danych między wszystkimi urządzeniami podłączonymi do magistrali USB. Sprawdź stronę wikipedii USB, aby uzyskać więcej informacji .
Mówisz o zmuszeniu dwóch hostów USB (Raspberry Pi i komputera) do komunikacji, co niestety po prostu nie jest obsługiwane przez standard USB. Istnieje kilka urządzeń, które mogą sfałszować transfer danych między dwoma hostami USB, ale jak wspomniał Malvineous, lepiej byłoby korzystać z Ethernetu.
Twoje pytanie wyraźnie wspomina o użyciu Raspberry Pi do emulacji pamięci USB, ale czy zastanawiałeś się nad skonfigurowaniem Raspberry Pi jako NAS? Używanie Raspberry Pi jako urządzenia NAS w zasadzie robi dokładnie to, o co prosiłeś, ale zamiast korzystania z USB, używałby twojej sieci. Oto świetne instrukcje, jak to zrobić, jeśli jesteś zainteresowany.
źródło
Mogę to zrobić z moim starym telefonem Nokia N900 za pomocą sterownika gadżetu USB dołączonego do standardowego jądra Nokia. Emulowane urządzenie zachowuje się dokładnie tak, jak prawdziwe, można nawet uruchomić z niego komputer.
źródło
Pi Zero i Pi Zero W są teraz dostępne i obsługują interfejs gadżetu ( Kernal.org , linux-sunxi.org ), umożliwiając korzystanie z kilku różnych profili, w tym pamięci masowej USB i sieci wirtualnej.
Najbliższym rozwiązaniem żądania OP jest użycie protokołu sieciowego między Pi a komputerem PC, a następnie innej formy protokołu sieciowego od Pi do dostawcy chmury / sieci. Pi Zero W ma wbudowane Wi-Fi, więc może nawet łączyć się bezpośrednio z dostawcą chmury / sieci. Połączenie obu tych łączy w sieć będzie najłatwiejszym sposobem na wykonanie zadania. Dostępnych jest wiele protokołów sieciowych i dostawców usług w chmurze.
Próba użycia pamięci masowej USB byłaby złym pomysłem; musiałbyś napisać lub przepisać adaptację na poziomie sterownika między USB Mass Storage a Pi. Zaczynasz albo od MTP , albo kończysz na czymś podobnym. MTP ma poważne problemy z wydajnością ( Reddit , XDA , HowToGeek , Reddit ), więc sugeruję podejście sieciowe.
W tym kierunku powinno być wiele programów i projektów. Z punktu widzenia Pi działa on jak serwer plików / serwer synchronizacji, więc każdy podobny samouczek powinien zacząć. Zajrzyj do takich serwerów opartych na Pi , Seafile , Syncthing , SugarSync i OwnCloud , aby zacząć.
Kilka przydatnych przewodników po Pi Zero jako gadżet USB:
źródło
Standard USB jest oparty na hoście. Oznacza to, że jedno urządzenie musi kontrolować całą komunikację z podłączonymi urządzeniami. Klienci mogą być prostym urządzeniem lub koncentratorem. Koncentrator jest hostem proxy dla klientów podłączonych do koncentratora i komunikuje się z hostem (lub koncentratorem), z którym jest połączony.
Jak wygląda oryginalna konstrukcja USB, nie można połączyć dwóch hostów (komputera i RPi).
Istnieją jednak rozszerzenia, USB On-The-Go , które pozwalają połączeniu USB sprawdzić, czy jest ono podłączone do hosta lub klienta, i dostosować jego rolę w zależności od tego. Aby to zadziałało, musisz mieć wsparcie sprzętowe. Nie wierzę, że RPi jest do tego przeznaczone.
Aby uzyskać więcej informacji, odwiedź att http://www.usb.org/home lub nawet http://en.wikipedia.org/wiki/Universal_Serial_Bus
Krótko mówiąc, nie wierzę, że da się to zrobić.
źródło