USB存储设备(例如USB随身碟和硬盘驱动器)通常用于将外部存储设备连接到任何类型的计算机。 Raspberry Pi如何模拟USB存储设备?最简单的应用是通过USB直接访问SD卡,但也可以通过以太网访问文件。我考虑过以下用于“ USB云棒”的布局: Raspberry Pi将充当可编程的桥梁,映射目录列表和文件访问以请求到云存储。您可以通过USB使用任何计算机(包括黑匣子媒体播放器)访问云存储主机,而无需在计算机上安装任何其他软件。 Raspberry Pi USB桥接器还应该能够即时加密/解密文件,因此人们可以将加密的文件存储在云中,并可以在任何设备(例如普通USB驱动器)上访问它们。

编辑:现有具有类似但功能有限的产品包括无线媒体棒和网络USB。通过使用云驱动器或类似软件安装虚拟存储并使用TrueCrypt或EncFS进行加密,可以访问云中的文件-密码只能存储在Raspberry Pi的SD卡上,但是无需任何操作即可使用任何计算机访问存储在不受信任的计算机上输入密码。

评论

我认为他想要的是在Pi上具有一个分区或共享文件夹,该分区或共享文件夹可以通过USB安装在其他计算机上。这个想法是,您可以将raspi插入任何计算机,并且该文件夹/分区就像闪存驱动器一样,无需任何其他软件就可以写入。
Pi仅应充当任何计算机(包括黑匣子)与Amazon云之间的网关。网关还可以动态加密文件。

废话-这将是完美的!

@AlexChamberlain-不,你不能。 USB大容量存储设备具有主机操作系统支持的特定协议。当然,您可以创建一个驱动程序,使其他东西看起来像特定操作系统上的某种存储设备,但它不是“ USB Mass Storage”设备,而是“通过USB连接的自定义存储设备”。 >
@ppumkin:因为“将驱动器映射”或“插入LAN”需要配置PC(或媒体播放器)。仅插入USB端口就不需要任何管理,也不需要向PC公开任何密码。请注意,我想从云驱动器共享存储,而该驱动器始终需要密码甚至需要安装客户端软件。

#1 楼

问题在于,Pi到PC的USB连接没有连接数据引脚,仅连接了电源引脚。因此,您不能用它来说USB,因为它没有连接。

您唯一的选择是使用GPIO引脚对USB进行“位撞击”,但这非常慢,并且可能不可靠。我怀疑您真的只能模拟键盘或鼠标-考虑到像USB之类的比特撞击的严格时序要求,任何更高的带宽可能对于CPU来说都太高了。

另一种选择是找到一种设备,该设备可让您通过USB将两台计算机连接在一起,从而构成一种网络。但是您也可以只使用以太网连接...

评论


我以前玩过GP32,即使作为客户端插入集线器,它也可以表现得像主机。如果Raspberry可以像USB端口上的主机一样工作(而不是电源端口),那么那里也应该有类似的技巧。也许USB-to-go可以做到吗?

–特尔比约恩(ThorbjørnRavn Andersen)
2012年8月1日在22:06

??您被电源适配器使用的微型USB端口弄错了。那2个合适的USB端口呢?使用某些仿真软件,可以将USB插入PC并仿真存储-例如-插入USB时为Android手机。 -但是没有理由,因为您将Pi插入网络,通过samba或其他(wifi或lan)共享“ cloud”文件夹,并且同时进行了云同步操作。局域网可以处理各种端口上的许多请求

– Piotr Kula
2012年11月13日在11:08

@ppumkin:为什么我会误认为micro USB端口?数据引脚未连接,因此无法通过它发送数据。下游的“适当” USB端口是“主机”端口,因此如果中间没有某种转换器设备,则无法将它们插入PC。由于USB协议的工作方式,软件仿真还不够。您可能会想到以太网,可以将任意两个设备连接在一起,但是USB不能像这样工作。如果您不相信我,请阅读USB规范,尤其是有关USB主机与外围设备的部分。

–马耳他
2012年11月13日23:49

只是想补充一下,“ Bit-banging” USB不是一个选择。 USB与I2C之类的东西相距很远。可能最实用的方法是使用其中内置USB设备端口的AVR微型计算机之一,然后通过Pi上的串行端口与其通信。 (例如olimex.com/Products/AVR/Proto/AVR-USB-162)

– greggo
2013年1月6日18:43



@Malvineous在12 MHz或仅1.5?对于12 Mhz,时钟周期为[83.33 +/- 0.2 us],对于1.5 MHz,时钟周期为[666.6 +/- 10 us]。请记住,您需要恢复接收时的时钟,这大概意味着采样至少是时钟速率的5-10倍。这些实现在与USB设备通信时是否允许中断?

– greggo
13年1月17日在22:48

#2 楼

根据对BCM2835数据表(http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf)的快速阅读,第15章似乎支持USB OTG。硬件,因此从理论上讲,支持提议的方案可能只是软件问题。我不是USB协议专家(或者甚至不是新手),但是拥有此功能会很酷。 / BeagleBone),它似乎支持类似的功能,尽管其中特别提到了支持此模式的连接器。如果Raspberry Pi仅由于选择了连接器而受到限制,那将是不幸的。

希望这很有帮助。

评论


即使SOC支持,模型B上的LAN9512集线器设备也可能会妨碍在设备模式下“向后”运行USB端口。在型号A上(或者如果卸下该型号并安装R37和R38),则可以将SOCs USB端口连接到外部插孔-但是,您将没有以太网,只有sdcard进行潜在的存储。

–克里斯·斯特拉顿(Chris Stratton)
2012年7月31日在0:08



#3 楼

现在似乎可以使用PiZero进行操作-有关更多信息,请参见http://pi.gbaman.info/?p=699。

评论


欢迎来到Raspberry Pi!尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。

–加纳马♦
16年1月13日在19:31

#4 楼

不幸的是,尽管这看起来很简单,但据我所知,还没有完成。有关更多详细信息,请参见此线程和非常详细的答案

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

和一个Pi此处的具体答案:http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938

评论


感谢您的链接。看起来这台设备可能满足了我的要求,但是它是专有的,只能在一个方向上工作(虚拟只读USB存储设备)。

–雅各布
2012年7月17日下午6:58

#5 楼

如果您不特别关注性能,则可能会获得带有USB大容量存储代码的具有USB功能的微控制器(例如,您可以在价格为10美元的STM32F0发现评估模块上对STM32F103调试接口进行重新编程),将其小心地连接到pi的串行端口作为后端,并且运行在几百千波特。

通过以太网与客户端PC连接可能会获得更好的性能,但这需要自定义驱动程序或对主机操作系统的不同表示-例如,您将是网络连接的存储设备或共享服务器。

我已经提到了现成的文件传输电缆,但是需要用于客户端PC和源代码级的适当软件pi端的linux驱动程序支持。

评论


对。另请参阅olimex.com/Products/AVR/Proto/AVR-USB-162

– greggo
2013年1月6日19:11

#6 楼

我发现Arduino可以仿真USB设备,甚至可以直接使用Arduino Leonardo。 LUFA USB堆栈可在Arduino上使用,并实现USB大容量存储设备驱动程序(请参阅本教程)。此设置可用于将USB映射到SCSI命令,例如SD卡读取器可以理解的命令。我对SCSI不太了解,但是看起来Raspberry Pi上的SD卡和USB-via-Arduino可以在同一总线上一起使用。确定这个想法不是完整的解决方案...

评论


-1因为主题是关于Raspberry Pi而不是Arduino。

–user46
2012年8月1日23:03

我知道,这个答案不是完整的解决方案!我希望有关Raspberry Pi作为工具而不是目的本身的问题能够引起人们的关注,并将其扩大到相关项目的视野会有所帮助。在这种情况下,我发现了本教程如何将SD卡用作USB大容量存储设备。也许有人可以使用Arduino或另一ATMEGA32U4将USB连接到SIP总线,Raspberry Pi也提供该总线?

–雅各布
2012年8月2日在8:13

不,除了通过电气开关,您不能真正共享对sdcard的访问。一次只能有一个主机“装载”给定的文件系统(对于卡上使用的文件系统的类型-网络文件系统在这方面是不同的)。

–克里斯·斯特拉顿(Chris Stratton)
2012年8月2日,12:47



#7 楼

Pi Zero和Pi Zero W现已上市,并支持Gadget界面(Kernal.org,linux-sunxi.org),允许几种不同的配置文件,包括USB Mass Storage和虚拟网络。 OP的要求是使用Pi与主机PC之间的网络协议,然后使用从Pi到云/网络提供商的其他某种形式的网络协议。 Pi Zero W内置了Wi-Fi,因此甚至可以直接连接到云/网络提供商。将这两个链接联网将是完成工作的最简单方法。有许多可用的网络协议和云提供商。

尝试使用USB Mass Storage是一个坏主意;您将不得不在USB Mass Storage和Pi之间编写或重写驱动程序级别的适配。您要么从MTP开始,要么结束于类似的事情。 MTP存在严重的性能问题(Reddit,XDA,HowToGeek,Reddit),所以我建议采用网络方法。

应该在这个方向上有很多程序和项目。从Pi的角度来看,它就像文件服务器/同步服务器一样,因此任何类似的教程都可以帮助您入门。研究基于Pi的Seafile,Syncthing,SugarSync和OwnCloud服务器之类的内容应该可以帮助您入门。

关于Pi Zero作为USB小工具的一些有用指南:
带电源开关的Raspberry PI零加密狗
多个USB小工具的Raspberry Pi零加密软件
Raspberry Pi零USB加密狗
为Pi零USB,以太网和USB串行接口
>将Raspberry PI Zero转换为USB小工具
Raspberry Pi Zero零OTG模式
Raspberry Pi Zero –通过USB编程! (第1部分)


#8 楼

这归结为USB的工作原理,您可以看到,只要有两件事与USB连接,USB主机和USB设备就可以通过各种方式连接,并且永远不会切换位置。 USB主机执行USB设备通常无法做的所有事情,以同步连接到USB总线的所有设备之间的数据传输。请查看USB维基百科页面以获取更多信息。

您要说的是要强制两个USB主机(Raspberry Pi和一台计算机)进行通信,不幸的是,USB标准根本不支持。有些设备可以伪造两个USB主机之间的数据传输,但是正如Malvineous提到的,最好使用以太网。考虑过将Raspberry Pi设置为NAS?使用Raspberry Pi作为NAS盒基本上可以满足您的要求,但是如果不使用USB,它将使用您的网络。如果您有兴趣,这是有关如何执行此操作的重要说明。

评论


感谢您的指导。所以我的问题是关于如何使用Raspberry Pi实现USB设备。但是,NAS并非此问题的答案。

–雅各布
2012年7月25日在7:12

如果您希望Raspberry Pi能够成为USB设备,我建议您在ftdichip.com上对产品进行更多的研究,您可能会为使用Pi的GPIO引脚连接FTDI芯片的电路板布线这将为您提供USB设备功能。您可能还需要编写驱动程序才能与FTDI设备通信。

– Dan B
2012年7月25日在13:36

如果它们是USB OTG设备,则“吐温将切换位置” ...

–克里斯·斯特拉顿(Chris Stratton)
2012年7月31日,0:10

#9 楼

我可以使用旧的诺基亚N900附带的usb小工具驱动程序使用旧的诺基亚N900手机来实现此功能。
仿真设备的行为与真实设备完全相同,您甚至可以从中启动PC。

评论


您能提供一些细节吗?您不是在谈论像大多数其他智能手机一样通过USB在手机上提供存储设备吗?据我了解,USB小工具驱动程序仅提供从SCSI到USB的映射,因此仍然需要将SCSI映射到某些云存储API。

–雅各布
2012年11月13日在8:59

#10 楼

USB标准基于主机。这意味着一个设备必须控制与所连接设备的所有通信。客户端可以是简单的设备或集线器。集线器是连接到集线器的客户端的主机代理,并与其连接的主机(或集线器)进行通信。

如USB的原始设计一样,您不能连接两个主机(您的PC和RPi)一起使用。角色取决于。为此,您必须在硬件方面获得支持。我不相信RPi是专为实现这一目的而设计的。 Wiki / Universal_Serial_Bus

总之,我不相信可以做到。

评论


另一个答案与您缺乏OTG支持的说法相矛盾。

–亚历山大·张伯伦
2012年7月26日19:44

@Alex,看看日期戳。 Anders于2012年在Pi Zero或A +发布之前发布了此消息。

–YetAnotherRandomUser
17年11月5日,下午2:56

@YetAnotherRandomUser,看看日期戳。在安德斯发表评论的第二天,我发表了自己的回应。

–亚历山大·张伯伦
17年12月1日在12:59

@AlexChamberlain,在2012年,Raspberry和Rasbperian(或我所知的任何其他软件)不支持该功能。是的,在那个时间范围内,我是对的。 RPi Zero诞生了很多年……现在我们为RPi Zero提供了支持,正如您所写的那样,在另一篇文章中也提到了。

–安德斯
17 Dec 4'在10:50