Raspberry Pi bir USB depolama aygıtını nasıl taklit edebilir?


46

USB bellekler ve sabit sürücüler gibi USB depolama aygıtları, herhangi bir bilgisayara harici depolama eklemek için yaygındır. Raspberry Pi bir USB depolama aygıtını nasıl taklit edebilir? En kolay uygulama SD karta USB üzerinden doğrudan erişmek oldu, ancak bunlardan biri Ethernet üzerinden dosyalara erişim sağlayabilirdi. Bir " USB bulut çubuğu " için aşağıdaki düzen hakkında düşündüm :

Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.

Bilgisayar, dosyaları okumak ve yazmak için sadece normal bir USB çubuğu görmelidir. Ahududu Pi, bir bulut deposuna istekte bulunmak için dizin listelerini ve dosya erişimlerini eşleyen programlanabilir köprü görevi görür. Bilgisayara herhangi bir ek yazılım yüklemeniz gerekmeden bulut depolama alanlarına herhangi bir bilgisayarla (kara kutu ortam yürütücüler dahil) USB üzerinden erişebilirsiniz. Raspberry Pi USB köprüsünün de anında dosyaları şifreleyebilmesi / şifresini çözebilmesi gerekir; böylece biri bulutta şifrelenmiş dosyaları depolayabilir ve normal bir USB sürücüsü gibi herhangi bir cihazda bunlara erişebilir.

Düzenleme: Benzer ancak sınırlı işlevselliğe sahip mevcut ürünler arasında Wireless Media Stick ve Ağ Üzerinden USB bulunur . Buluttaki sanal depolama alanını bulut sürücüsü veya benzeri bir yazılımla birleştirerek ve TrueCrypt veya EncFS ile şifrelemeyle mümkün olabilir - şifreler yalnızca Raspberry Pi'nin SD kartında saklanır, ancak bir tanesi depoya herhangi bir bilgisayarla erişebilir güvenilmeyen bir makinede bir parola yazın.


1
Sanırım istediği, Pi’de başka makinelere USB ile takılabilen bir bölüm veya paylaşılan bir klasöre sahip olmak. Raspi'yi herhangi bir bilgisayara bağlayabileceğiniz ve bu klasör / bölümün bir flash sürücü gibi davranabileceği ve herhangi bir ek yazılım olmadan yazılabileceği fikri.
wmarbut

3
Pi, yalnızca kara kutular ve örneğin Amazon bulutu gibi herhangi bir bilgisayar arasındaki ağ geçidi görevi görmelidir . Ağ geçidi ayrıca dosyaları anında şifreleyebilir.
Jakob,

1
O hurda - bu mükemmel olurdu!
Alex Chamberlain,

1
@AlexChamberlain - hayır, yapamazsınız. USB Yığın Depolama aygıtları, ana bilgisayar işletim sistemi tarafından desteklenen özel bir protokole sahiptir. Elbette, belirli bir işletim sistemine bir çeşit depolama cihazı gibi görünmesi için bir sürücü oluşturabilirsiniz, ancak bu bir "USB Yığın Depolama" cihazı değil, "USB ile bağlı özel bir depolama cihazı" olurdu
Chris Stratton

1
@ppumkin: Çünkü "sürücüyü eşleştirmek" veya "LAN'a takmak" PC'yi (veya medya oynatıcıyı) yapılandırmayı gerektirdiğinden. Sadece bir USB portuna takmak herhangi bir yönetim gerektirmez ve birinin PC'ye herhangi bir şifre göstermesi gerekmez. Her zaman parola ve hatta istemci yazılımının yüklenmesini gerektiren bir bulut sürücüden depolama paylaşmak istediğimi unutmayın .
Jakob

Yanıtlar:


12

Sorun şu ki, Pi’nin PC’ye bağladığı USB bağlantısının veri pinleri bağlı değil - sadece güç pinleri. Yani bunu USB konuşmak için kullanamazsınız çünkü kablolu değildir.

Pi ile tek seçeneğiniz GPIO pinlerini kullanarak USB'yi 'bit' yapmak olacaktır, ancak bu çok yavaş ve potansiyel olarak güvenilmez. Sanırım sadece bir klavye veya fareyi taklit edebileceğinizden şüpheleniyorsunuz - yüksek bant genişliğine sahip herhangi bir şey, USB gibi birşeyin biraz zorlanmasının sıkı zamanlama gereklilikleri göz önüne alındığında CPU ile başa çıkmak için muhtemelen çok fazla olacaktır.

Başka bir alternatif, bir tür ağ oluşturmak için iki bilgisayarı USB üzerinden birbirine bağlamanıza olanak sağlayan bir cihaz bulmak olacaktır. Ama sonra Ethernet bağlantısını da kullanabilirsiniz.


1
Daha önce bir istemci olarak hub'a takılıyken bile bir ana bilgisayar gibi davranabilen bir GP32 ile oynamıştım. Ahududu, USB bağlantı noktalarındaki bir ana bilgisayar gibi davranabiliyorsa (güç olanı değil), benzer bir numara da mümkün olmalıdır. Belki USB-to-go yapabilir?
Thorbjørn Ravn Andersen

2
Ha? Güç adaptörü için kullanılan mikro usb portu ile yanılıyorsunuz. 2 uygun USB portu ne olacak? Bazı öykünme yazılımlarıyla, bu usb'i bir PC'ye bağlamak ve USB aygıtını taktığınızda Depolama - örneğin - Android telefonu taklit etmek mümkün olabilir. - Ama bunun sebebini Pi'yi ağınıza bağladığınızdan, "bulut" klasörünüzü samba ya da her neyse (wifi ya da lan) paylaşacağınız için bir neden yok - ve aynı zamanda ne yapmak istediğinizi senkronize ediyor . LAN çeşitli limanlarda pek çok isteği yerine getirebilir
Piotr Kula 11

2
@ ppumkin: Neden mikro USB portundan yanıldım? Veri pinleri bağlı değil, bu yüzden üzerinden veri gönderemezsiniz. Aşağı doğru "uygun" USB bağlantı noktaları "ana bilgisayar" bağlantı noktalarıdır, bu nedenle ortada bir tür dönüştürücü aygıt olmadan bunları bir PC'ye bağlamak mümkün değildir. USB protokolünün çalışması nedeniyle yazılım öykünmesi yeterli değil. İki cihazı birbirine bağlayabileceğiniz Ethernet düşünüyor olabilirsiniz, ancak USB bu şekilde çalışmaz. Bana inanmıyorsanız, USB spesifikasyonunu, özellikle de USB host ve çevre birimleri hakkındaki parçaları okuyun.
Malvineous

1
Sadece "Bit-vurarak" USB'nin bir seçenek olmadığını eklemek istedim. USB, I2C gibi bir parçaya çarptırabilecek uzun ve uzun bir yoldur. Muhtemelen en pratik yaklaşım, içinde bir USB aygıt portu bulunan AVR mikroskoplarından birini kullanmak ve Pi'deki seri port üzerinden iletişim kurmaktır. (örn. olimex.com/Products/AVR/Proto/AVR-USB-162 )
greggo

1
@Malvinöz 12 MHz'de mi yoksa sadece 1.5 mi? Saatin süresi 12 Mhz için [83.33 +/- 0.2 us] ve 1.5 MHz için [666.6 +/- 10 us]. Alışta olduğunuz saati kurtarmanız gerektiğini unutmayın; bu, muhtemelen saat hızının en az 5 - 10 katı örnekleme anlamına gelir. Bu uygulamalar USB cihazlarla konuşurken kesintilere izin veriyor mu?
greggo

8

BCM2835 veri sayfasının hızlı bir şekilde incelenmesine dayanarak (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) bölüm 15, USB OTG destekli görünüyor HW, teorik olarak, önerilen programı desteklemek sadece bir SW meselesi olabilir. Ben bir USB protokol uzmanı değilim (ya da gerçekten acemiler bile), ancak bu işlevselliğe sahip olmak çok iyi olurdu.

BeagleBone'un (http://elinux.org/BeagleBone) açıklamasına baktığımızda, bu modu destekleyen bir bağlayıcıdan söz edilmesine rağmen, benzer bir şeyi desteklediği görülüyor. Ahududu Pi sadece bağlayıcı seçimi nedeniyle sınırlı ise, bu talihsiz olurdu.

Umarım bu yardımcı olur.


2
SOC desteklese bile, B modelindeki LAN9512 hub cihazı, büyük olasılıkla USB modunda cihaz modunda "geriye" dönme biçimini alıyor. A modelinde (veya bunu kaldırır ve R37 & R38'i kurarsanız), SOC USB portunu harici prize takabilirsiniz - ancak daha sonra ethernetiniz olmazdı ve yalnızca potansiyel depolama için sdcard olurdu.
Chris Stratton,


4

Maalesef bu basit gibi görünse de, söyleyebileceğim en iyi şekilde, yapılmamıştır. Daha fazla ayrıntı için bu konuya ve çok ayrıntılı cevaba bakınız.

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

Ve burada Pi'ye özgü bir cevap : http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938


1
Bağlantılar için teşekkürler. Görünüşe göre bu cihaz istediklerimin bir bölümünü yapıyor olabilir, ancak tescilli ve sadece bir yönde çalışıyor (salt okunur sanal USB depolama birimi).
Jakob,

3

Özellikle performans konusunda endişe duymuyorsanız, USB yığın depolama kodlu USB özellikli bir mikrodenetleyici (örneğin, 10 dolarlık bir STM32F0 keşif değerlendirme modülünde STM32F103 hata ayıklama arayüzünü yeniden programlayabilirsiniz) alabilirsiniz. arka uç olarak ve birkaç yüz kilobaudda koşun.

İstemci bilgisayara ethernet üzerinden arabirim verilerek daha iyi performans elde edilebilirdi, ancak bu, ana bilgisayar işletim sistemine özel bir sürücü veya farklı bir sunum gerektirecektir - yani, ağa bağlı bir depolama aygıtı veya paylaşım sunucusu olacaksınız.

Raftan dosya aktarma kablolarının daha önce bahsedildiğine inanıyordum, ancak bu istemci PC için uygun yazılım ve pi ucu için kaynak düzeyinde linux sürücüsü desteği gerektiriyordu.



3

Arduino'nun bir USB aygıtını taklit edebileceğini öğrendim, Arduino Leonardo kutudan çıktı bile. Lufa USB yığın Arduino kullanılabilir ve bir yığın depolama aygıt sürücüsü (bkz uygulayan bu yazının ). Bu kurulum USB'yi SD kart okuyucusu tarafından anlaşıldığı gibi SCSI komutlarıyla eşlemek için kullanılabilir . SCSI hakkında yeterince bilgim yok ama Raspberry Pi'deki SD kart ve USB üzerinden Arduino aynı veriyolunda birlikte kullanılabilir gibi görünüyor. Elbette bu fikir tam bir çözüm değildir ...


-1 Konu Ahududu Pi ile ilgili ve Arduino ile ilgili olmadığından.

1
Biliyorum, bu cevap tam bir çözüm değil! Umarız Raspberry Pi ile ilgili bir amaç yerine araç olarak kullanılabilecek sorular konudur ve ilgili projeye bakış açısının genişletilmesine yardımcı olur. Bu durumda, bu eğitimde bir SD kartın USB yığın depolama aygıtı olarak nasıl kullanılacağını buldum . Belki bir tanesi Arduino veya başka bir ATMEGA32U4'ü kullanarak Raspberry Pi'de de mevcut olan SIP veriyolunu USB'ye bağlayabilir?
Jakob

2
Hayır, elektrik anahtarlaması dışında, sd kartına erişimi gerçekten paylaşamazsınız. Aynı anda yalnızca bir ana bilgisayar belirli bir dosya sistemini "bağlayabilir" (kartlarda kullanılan dosya sistemleri türleri için - ağ dosya sistemleri bu açıdan farklıdır).
Chris Stratton

1

Bu, USB'nin nasıl çalıştığıyla ilgilidir, iki şey USB'ye ne zaman bağlanırsa görsün, bir USB ana bilgisayarı ve bir USB cihazı vardır ve hiçbir zaman yer değiştiremez. Bir USB ana bilgisayarı, USB veri yoluna bağlı tüm cihazlar arasında veri aktarımını senkronize etmek için USB cihazlarının çoğunlukla yapamayacağı her türlü şeyi yapar. Check out daha fazla bilgi için USB wikipedia sayfasını .

Yapmakta olduğunuz şey, ne yazık ki sadece USB standardı tarafından desteklenmeyen iki USB ana bilgisayarını (Ahududu Pi ve bir bilgisayar) zorlamak. İki USB ana bilgisayarı arasında veri transferini taklit edebilecek bazı cihazlar var, ancak Malvineous'un da bahsettiği gibi, ethernet kullanmaktan daha iyi olursunuz.

Sorunuz özellikle USB depolama alanını taklit etmek için Raspberry Pi kullanmaktan bahsediyor, ancak Raspberry Pi'yi NAS olarak ayarlamayı düşündünüz mü? Raspberry Pi'yi NAS kutusu olarak kullanmak temelde tam olarak istediğinizi yapar ancak USB kullanmak yerine ağınızı kullanır. İlgileniyorsanız, bunun nasıl yapılacağı hakkında harika talimatlar .


İşaretçiler için teşekkürler. Bu yüzden benim sorum, bir Ahududu Pi kullanarak bir USB cihazının nasıl uygulanacağıyla ilgili . Bir NAS, bu sorunun cevabı değildir.
Jakob

3
Raspberry Pi'nin bir USB aygıtı olma yeteneğine sahip olmasını istiyorsanız, ftdichip.com adresindeki ürünleri muhtemelen araştırmanız gerektiğini öneririm , FTDI yongasıyla arabirim yapmak için Pi'nin GPIO pinlerini kullanan bir kartı bağlayabilirsiniz. ve bu size USB cihaz yeteneği verecektir. Muhtemelen FTDI cihazıyla iletişim kurmak için bir sürücü de yazmanız gerekecektir.
Dan B,

USB OTG cihazları ise "twain yerleri değiştirmeli" dışında ...
Chris Stratton

1

Eski Nokia N900 Telefonum ile Nokia çekirdeğinde bulunan USB aygıtını kullanarak yapabilirim. Öykünülmüş aygıt tam olarak gerçek bir şekilde davranıyor, hatta ondan bir bilgisayarı önyükleyebilirsiniz.


1
Biraz detay verebilir misin? Diğer birçok akıllı telefonun yapabildiği gibi telefonunuzda depolamayı sadece USB üzerinden sağlamaktan bahsetmiyorsunuz, değil mi? Anladığım kadarıyla, bir USB aygıtı sürücüsü yalnızca SCSI'dan USB'ye bir eşleme sağlar , bu yüzden hala bir SCSI'yı bir bulut depolama API'siyle eşlemek gerekir.
Jakob

1

Pi Zero ve Pi Zero W artık kullanılabilir durumda ve USB Yığın Depolama ve sanal ağ dahil olmak üzere birçok farklı profile izin veren Gadget arabirimini ( Kernal.org , linux-sunxi.org ) destekliyor .

OP'nin isteğine en yakın çözüm Pi ile ana bilgisayar arasında bir ağ protokolü kullanmak ve ardından Pi'den bulut / ağ sağlayıcısına kadar başka bir ağ protokolü biçimi kullanmaktır. Pi Zero W'nin yerleşik Wi-Fi özelliği var, doğrudan bulut / ağ sağlayıcısına bile bağlanabilir. Her iki bağlantıyı da birbirine bağlamak, işin yapılmasının en kolay yolu olacaktır. Mevcut birçok ağ protokolü ve bulut sağlayıcı vardır.

USB Yığın Depolama'yı kullanmaya çalışmak kötü bir fikirdir; USB Yığın Depolama ile Pi arasında bir sürücü düzeyinde adaptasyon yazmanız veya yeniden yazmanız gerekir. Ya MTP ile başlayabilir ya da benzer bir şeyle başlayabilirsiniz . MTP'nin ciddi performans sorunları var ( Reddit , XDA , HowToGeek , Reddit ) bu yüzden ağ oluşturma yaklaşımını öneriyorum.

Bu yönde birçok program ve proje olmalı. Pi'nin bakış açısına göre, sadece bir dosya sunucusu / eşitleme sunucusu gibi davranıyor, bu nedenle benzer bir öğretici çalışmaya başlamanız gerekir. Pi tabanlı Seafile , Syncthing , SugarSync ve OwnCloud sunucuları gibi şeyleri araştırmaya başlamanız gerekir.

Pi Zero'da USB Gadget'ı olarak kullanabileceğiniz birkaç faydalı rehber:


0

USB standardı ana bilgisayar tabanlıdır. Bu, bir cihazın bağlı cihazlarla tüm iletişimi kontrol etmesi gerektiği anlamına gelir. İstemciler basit bir cihaz veya hub olabilir. Hub, hub'a bağlı istemciler için bir ana bilgisayar proxy'sidir ve bağlı olduğu ana bilgisayar (veya hub) ile iletişim kurar.

Orijinal USB tasarımı göründüğü için, iki bilgisayarı birbirine bağlayamazsınız (PC'niz ve RPi).

Yine de, bir USB bağlantısının bir ana bilgisayara mı yoksa bir istemciye mi bağlı olduğunu görmesini sağlayan ve buna bağlı olarak rolünü ayarlayan USB On-The-Go . Bunun için donanımda desteğe sahip olmalısınız. RPI'nin bunun için tasarlandığına inanmıyorum.

Daha fazla bilgi için http://www.usb.org/home veya hatta http://en.wikipedia.org/wiki/Universal_Serial_Bus adresini ziyaret edin.

Kısacası, bunun yapılabileceğine inanmıyorum.


Başka bir cevap OTG desteği konusundaki eksikliğinizle çelişiyor.
Alex Chamberlain,

1
@Alex, tarih pullarına bakın. Anders bunu 2012'de Pi Zero veya A + mevcut olmadan önce gönderdi.
HenüzAnotherRandomUser

@YetAnotherRandomUser, tarih pullarına bakın. Cevabımı Anders'in görüşünü yazmasından bir gün sonra gönderdim.
Alex Chamberlain,

@AlexChamberlain ve 2012'de, Ahududu ve Ahududu (ya da bildiğim herhangi bir yazılım) için destek yoktu. Yani evet, bu zaman dilimi içinde haklıydım. RPi Zero, yıllar sonra geldi ... Şimdi yazdığınız gibi, başka bir yazıda belirtilen RPi Zero için desteğimiz var.
Anders
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.