題:
Raspberry Pi如何模擬USB存儲設備?
Jakob
2012-07-16 04:25:33 UTC
view on stackexchange narkive permalink

USB存儲設備(例如USB記憶棒和硬盤驅動器)通常用於將外部存儲設備連接到任何類型的計算機。 Raspberry Pi如何模擬USB存儲設備?最簡單的應用是通過USB直接訪問SD卡,但也可以通過以太網訪問文件。我考慮過“ USB雲棒”的以下佈局:

 計算機< --- USB --- > | Raspberry Pi | < ---以太網--- > Cloud,NAS等。 

計算機應該只能看到普通的USB閃存盤來讀寫文件。 Raspberry Pi將充當可編程的橋樑,映射目錄列表和文件訪問以請求到雲存儲。您可以通過USB使用任何計算機(包括黑匣子媒體播放器)通過USB訪問云存儲主機,而無需在計算機上安裝任何其他軟件。 Raspberry Pi USB橋接器還應該能夠即時加密/解密文件,因此人們可以將加密的文件存儲在雲中,並可以在任何設備(如普通USB驅動器)上訪問它們。

編輯:具有相似但有限功能的現有產品包括無線媒體棒 USB-over-Network。通過使用雲驅動器或類似軟件安裝虛擬存儲並使用TrueCrypt或EncFS進行加密,可以訪問云中的文件-密碼只能存儲在Raspberry Pi的SD卡上,但可以訪問可以在任何計算機上進行存儲,而不必在不受信任的計算機上鍵入密碼。

因此,您所需要的只是一種在Pi和計算機之間共享文件的方法?
我認為他想要的是在Pi上具有一個分區或共享文件夾,該分區或共享文件夾可以通過USB安裝在其他計算機上。這樣的想法是,您可以將raspi插入任何計算機,並且該文件夾/分區的作用類似於閃存驅動器,無需任何其他軟件即可寫入。
Pi只能用作*任何*計算機(包括黑匣子)與Amazon雲之間的網關。網關還可以動態加密文件。
我們確實需要一個FTDI擴展板!
廢話-[this](http://www.ftdichip.com/Products/Cables/RPi.htm)將是完美的!
@AlexChamberlain如果TTL-232R-RPi調試電纜是為調試而設計的,則需要使用自定義驅動程序來仿真USB設備。 FTDI出售的RPi集線器模塊似乎旨在將USB設備連接到RPi。
他們將其作為調試電纜出售,但它只是FTDI芯片。不確定是否可以說服它模擬存儲設備tbh。
@AlexChamberlain-不,您不能。 USB海量存儲設備具有主機操作系統支持的特定協議。您當然可以創建一個驅動程序,使其他東西看起來像特定操作系統的存儲設備,但是它不是“ USB Mass Storage”設備,而是“通過USB連接的自定義​​存儲設備”
這是一件很奇怪的事情嗎?我不明白為什麼要將Pi作為SD卡插入計算機,然後將Pi的共享共享到LAN / WAN。您對USB的迷戀阻礙了您對其他解決方案的看法。好像有點奇怪。只需在LAN上共享一個文件夾並在雲事物繼續運行的同時在您的PC中映射驅動器即可。為什麼要使用USB電纜?許多媒體播放器都需要插入局域網-您可以在局域網上映射您的Pi,它也將獲取所有文件,就像其他任何映射網絡資源的PC一樣。為什麼需要USB電纜?
@ppumkin:因為“映射驅動器”或“插入LAN”需要配置PC(或媒體播放器)。只需插入USB端口就不需要任何管理,也不需要向PC公開任何密碼。請注意,我想從雲驅動器共享存儲,而云驅動器“總是”需要密碼,甚至需要安裝客戶端軟件。
哦,您想通過USB仿真將CLOUDS文件共享到媒體播放器。我現在明白了。您的問題使我有些困惑。雖然非常有趣的概念。
[看起來很有趣...](http://www.armadeus.com/wiki/index.php?title=USB_Gadget)
如果Pi上的USB芯片支持在主機/從機之間切換,那麼您就有機會了。我找不到任何數據。否則,您可能會忘記它-由於硬件控制的協商,因此沒有軟件可以模擬這一點。正在考慮使用支持此功能的附加USB芯片。但是您將如何代理數據呢?通過UART?非常慢!撞到USB?更慢!許多開發套件使用這種USB控制器來測試附加設備。一些硬盤使用SATA-> USB芯片。那可以幫助解決問題-也許Pi可以在媒體讀取數據時也通過USB存儲數據?
十 答案:
Malvineous
2012-07-16 08:42:46 UTC
view on stackexchange narkive permalink

問題在於Pi與PC的USB連接沒有連接數據引腳-僅連接了電源引腳。因此,您不能用它來說USB,因為它沒有連接。

Pi的唯一選擇是使用GPIO引腳對USB進行“位撞擊”,但這非常慢,並且可能不可靠。 。我懷疑您真的只能模擬鍵盤或鼠標-考慮到像USB之類的比特撞擊的嚴格時序要求,任何更高的帶寬可能對於CPU來說都無法應付。

另一種選擇是找到一種設備,該設備可以讓您通過USB將兩台計算機連接在一起,從而形成一種網絡。但是您也可以只使用以太網連接...

我以前玩過GP32,即使作為客戶端插入集線器,它也可以像主機一樣工作。如果Raspberry可以像USB端口上的主機一樣工作(而不是電源端口),那麼那裡也應該有類似的技巧。也許USB-to-go可以做到嗎?
@ThorbjørnRavnAndersen:絕對值得調查,儘管如果您要將硬件端口切換到OTG,則根據以下答案,它可能會阻止以太網工作。除非OTG支持集線器,且下游端口雙向運行?
我不知道。希望有人會嘗試看看會發生什麼
??您被電源適配器使用的微型USB端口弄錯了。那2個合適的USB端口呢?使用某些仿真軟件,可以將USB插入PC並仿真存儲-例如-插入USB時為Android手機。 -但是沒有理由,因為您將Pi插入網絡,通過samba或其他(wifi或lan)共享“ cloud”文件夾,並且同時進行了云同步操作。局域網可以處理各種端口上的許多請求
@ppumkin:為什麼我會誤認為微型USB端口?數據引腳未連接,因此無法通過它發送數據。下游的“適當” USB端口是“主機”端口,因此如果中間沒有某種轉換器設備,則無法將它們插入PC。由於USB協議的工作方式,軟件仿真還不夠。您可能會想到以太網,可以將任意兩個設備連接在一起,但是USB不能像這樣工作。如果您不相信我,請閱讀USB規範,尤其是有關USB主機與外圍設備的部分。
-1
@ppumkin:哦,對,您回答了我的帖子,所以我認為您是在說我說的話,而不是OP所說的話!
只是想補充一下,“ Bit-banging” USB不是一個選擇。 USB與I2C之類的東西相距很遠。可能最實用的方法是使用其中內置USB設備端口的AVR微型計算機之一,然後通過Pi上的串行端口與其通信。 (例如https://www.olimex.com/Products/AVR/Proto/AVR-USB-162/)
@greggo:您是說不是一般選擇USB還是只能在Pi上使用位撞擊USB? Google的快速搜索顯示了許多成功地使USB 1.1脫穎而出的項目。
@Malvineous在12 MHz還是僅1.5?對於12 Mhz,時鐘週期為[83.33 +/- 0.2 us],對於1.5 MHz,時鐘週期為[666.6 +/- 10 us]。請記住,您需要恢復接收時的時鐘,這大概意味著採樣至少是時鐘速率的5-10倍。這些實現在與USB設備通信時是否允許中斷?
@Malvineous,好的,看著一個。這似乎是1.5兆赫茲(不確定),是在asm上完成的,該機器的指令執行時間是完全可預測的,因此要進行限定,“不是在Pi上,可能不是在基本上不致力於的任何事情上USB實現”(直到我再次糾正:-)此外,我在許多Google命中中都提到了通過FT232芯片或類似設備通過* USB慢速撞擊某些東西。無論如何,這裡的“可能”和“實用”之間有很大的區別,但是感謝您指出這一點。
Don Christensen
2012-07-26 06:29:04 UTC
view on stackexchange narkive permalink

根據對BCM2835數據表的快速瀏覽(http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf),第15章看起來像USB OTG在硬件中支持該功能,因此從理論上講,支持所提出的方案可能只是軟件問題。我不是USB協議專家(或者甚至不是新手),但是擁有此功能會很酷。

請看一下BeagleBone的描述(http://elinux.org/ BeagleBone),它似乎支持類似的功能,儘管其中特別提到了支持此模式的連接器。如果Raspberry Pi僅由於選擇了連接器而受到限制,那將是不幸的。

希望這會有所幫助。

即使SOC支持,模型B上的LAN9512集線器設備也可能會妨礙在設備模式下“向後”運行USB端口。在型號A上(或者如果卸下該型號並安裝R37和R38),則可以將SOCs USB端口連接到外部插孔-但是您將沒有以太網,只有sdcard進行潛在的存儲。
David Walters
2016-01-13 21:09:19 UTC
view on stackexchange narkive permalink

現在似乎可以使用PiZero進行操作-有關更多信息,請參見 http://pi.gbaman.info/?p=699

歡迎來到Raspberry Pi!從理論上講,這可能可以回答問題,但是[更可取的是](// meta.stackoverflow.com/q/8259)在此處包括答案的基本部分,並提供鏈接以供參考。
wmarbut
2012-07-16 07:35:59 UTC
view on stackexchange narkive permalink

不幸的是,儘管這看起來很簡單,但據我所知,它尚未完成。有關更多詳細信息,請參見此線程和非常詳細的答案

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

還有一個 Pi特定答案,在這裡: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938

感謝您的鏈接。看起來[此設備](http://hsti.com/wirelessmediastick/overview)可以滿足我的要求,但它的專有功能只能在一個方向上起作用(虛擬只讀USB存儲設備)。
Chris Stratton
2012-07-31 05:13:10 UTC
view on stackexchange narkive permalink

如果您不特別關注性能,則可能會獲得具有USB大容量存儲代碼的具有USB功能的微控制器(例如,您可以在價格為10美元的STM32F0發現評估模塊上對STM32F103調試接口進行重新編程),然後小心地將其連接至pi的串行端口作為後端,並且運行在幾百千波特。

通過以太網與客戶端PC連接可能會獲得更好的性能,但這需要自定義驅動程序或向主機進行不同的顯示操作系統-即您將是網絡連接的存儲設備或共享服務器。

我已經提到了現成的文件傳輸電纜,但這需要用於客戶端PC和源的適當軟件, pi端的高級linux驅動程序支持。

對。另請參閱https://www.olimex.com/Products/AVR/Proto/AVR-USB-162/
Jakob
2012-08-02 01:58:59 UTC
view on stackexchange narkive permalink

我發現Arduino甚至可以直接仿真USB設備,即 Arduino Leonardo LUFA USB堆棧可以在Arduino上使用,它實現了USB大容量存儲設備驅動程序(請參見本教程)。此設置可用於將 USB映射到SCSI命令,例如SD卡讀取器可以理解的。我對SCSI不太了解,但是看起來Raspberry Pi上的SD卡和USB-via-Arduino可以在同一總線上一起使用。確定這個想法不是完整的解決方案...

-1因為主題是Raspberry Pi而非Arduino。
我知道,這個答案不是完整的解決方案!我希望有關Raspberry Pi作為工具而不是目的本身的問題能夠引起人們的關注,並擴大對相關項目的看法。在這種情況下,我發現[本教程](http://elasticsheep.com/2010/04/teensy2-usb-mass-storage-with-an-sd-card/)如何將SD卡用作USB大容量存儲設備。也許有人可以使用Arduino或另一ATMEGA32U4將USB連接到SIP總線,Raspberry Pi也提供該總線?
不,除了通過電氣開關之外,您無法真正共享對sdcard的訪問權限。一次只能有一個主機“裝載”給定的文件系統(對於卡上使用的文件系統的類型-網絡文件系統在這方面是不同的)。
YetAnotherRandomUser
2017-11-05 08:50:20 UTC
view on stackexchange narkive permalink

Pi Zero和Pi Zero W現在可用,並支持Gadget接口( Kernal.org linux-sunxi.org),該接口允許幾個不同的配置文件,包括USB大容量存儲和虛擬網絡。

最接近OP請求的解決方案是在Pi和主機PC之間使用網絡協議,然後再使用從Pi到雲/網絡的其他某種形式的網絡協議。提供者。 Pi Zero W內置了Wi-Fi,因此甚至可以直接連接到雲/網絡提供商。將這兩個鏈接聯網將是完成工作的最簡單方法。有許多可用的網絡協議和雲提供商。

嘗試使用USB Mass Storage是一個壞主意;您將不得不在USB Mass Storage和Pi之間編寫或重寫驅動程序級別的適配。您可以從 MTP開始,或者以類似的方式結束。 MTP存在嚴重的性能問題( Reddit XDA HowToGeek Reddit),所以我建議採用網絡方法。 / p>

在該方向上應該有很多程序和項目。從Pi的角度來看,它就像文件服務器/同步服務器一樣工作,因此任何類似的教程都可以幫助您入門。研究基於Pi的 Seafile Syncthing SugarSync OwnCloud服務器之類的東西,應該會讓您入門。 / p>

關於將Pi Zero用作USB小工具的一些有用指南:

Dan B
2012-07-25 02:30:07 UTC
view on stackexchange narkive permalink

這取決於USB的工作方式,您可以看到,只要有兩件事都與USB連接,USB主機和USB設備就會以各種方式相繼發生,並且永遠不會切換位置。 USB主機執行USB設備通常無法做的所有事情,以同步連接到USB總線的所有設備之間的數據傳輸。請查看 USB維基百科頁面

您正在談論的是強迫兩個USB主機(Raspberry Pi和一台計算機)進行通信,不幸的是USB標準根本不支持這些主機。有些設備可以偽造兩個USB主機之間的數據傳輸,但是正如Malvineous提到的,最好使用以太網。

您的問題特別提到了使用Raspberry Pi模擬 USB存儲,但您是否考慮過將Raspberry Pi設置為NAS?將Raspberry Pi用作NAS盒基本上可以滿足您的要求,但是如果不使用USB,它將使用您的網絡。 如果您有興趣,這裡有很好的說明

感謝您的指導。所以我的問題是關於*如何使用Raspberry Pi實現USB設備*。但是,NAS並非此問題的答案。
如果您希望Raspberry Pi能夠成為USB設備,我建議您在http://www.ftdichip.com/上對產品進行更多的研究,您可能會為使用Pi的GPIO的電路板接線引腳與FTDI芯片接口,這將為您提供USB設備功能。您可能還需要編寫驅動程序才能與FTDI設備通信。
如果它們是USB OTG設備,則“吐溫將切換位置” ...
Nyg
2012-11-11 20:35:46 UTC
view on stackexchange narkive permalink

我可以使用舊的諾基亞N900手機使用附帶的諾基亞內核附帶的usb小工具驅動程序來完成此操作。該仿真設備的行為與真實設備完全相同,甚至可以從中啟動PC。

您能提供一些細節嗎?您不是在談論像大多數其他智能手機一樣通過USB在手機上提供存儲空間嗎?據我了解,USB設備驅動程序僅提供[從SCSI到USB的映射](http://en.wikipedia.org/wiki/USB_Attached_SCSI),因此仍然需要將SCSI映射到某些雲存儲API。
Anders
2012-07-26 02:37:26 UTC
view on stackexchange narkive permalink

USB標準基於主機。這意味著一個設備必須控制與所連接設備的所有通信。客戶端可以是簡單的設備或集線器。集線器是連接到集線器的客戶端的主機代理,並與其連接的主機(或集線器)進行通信。

按照USB的原始設計,您不能將兩個主機連接在一起(您的PC和RPi)。

不過還有擴展, USB On-The-Go ,它允許USB連接查看它是否已連接到主機或主機。客戶,並據此調整其角色。為此,您必須在硬件方面獲得支持。我不相信RPi是設計用來做到這一點的。

有關更多信息,請查看 http://www.usb.org/home甚至 http ://en.wikipedia.org/wiki/Universal_Serial_Bus

總之,我不相信可以做到這一點。

另一個答案與您缺乏OTG支持的說法相矛盾。
@Alex,查看日期戳。 Anders於2012年在Pi Zero或A +發布之前發布了此消息。
@YetAnotherRandomUser,看看日期戳。在安德斯發表評論的第二天,我發表了自己的回應。
@AlexChamberlain,在2012年,Raspberry和Rasbperian(或我所知的任何其他軟件)均不支持該功能。是的,在那個時間範圍內,我是對的。 RPi Zero誕生了很多年……現在,我們為RPi Zero提供了支持,正如您所寫的那樣,在另一篇文章中也提到了。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...