Perangkat penyimpanan USB, seperti USB stick dan harddrives, umum digunakan untuk memasang penyimpanan eksternal ke semua jenis komputer. Bagaimana Raspberry Pi meniru penyimpanan USB? Aplikasi termudah adalah secara langsung mengakses kartu SD melalui USB, tetapi orang juga bisa memberikan akses ke file melalui Ethernet. Saya memikirkan tata letak berikut untuk " USB cloud stick ":
Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.
Komputer seharusnya hanya melihat stik USB normal untuk membaca dan menulis file. Raspberry Pi akan bertindak sebagai jembatan yang dapat diprogram yang memetakan daftar direktori dan akses file untuk meminta penyimpanan cloud. Anda dapat mengakses host penyimpanan cloud dengan komputer apa pun (termasuk pemutar media kotak hitam) melalui USB tanpa harus menginstal perangkat lunak tambahan apa pun di komputer. Jembatan USB Raspberry Pi juga harus dapat mengenkripsi / mendekripsi file dengan cepat, sehingga orang dapat menyimpan file yang dienkripsi di cloud dan mengaksesnya di perangkat apa pun seperti drive USB normal.
Sunting: Produk yang ada dengan fungsi yang serupa tetapi terbatas termasuk Wireless Media Stick dan USB-over-Network . Akses ke file di cloud dapat dilakukan dengan memasang penyimpanan virtual dengan cloud drive atau perangkat lunak serupa dan enkripsi dengan TrueCrypt atau EncFS - kata sandi hanya akan disimpan pada kartu SD Raspberry Pi tetapi orang dapat mengakses penyimpanan dengan komputer apa pun tanpa harus ketik frasa sandi pada mesin yang tidak dipercaya.
sumber
Jawaban:
Masalahnya adalah bahwa koneksi USB Pi ke PC tidak memiliki pin data yang terhubung - hanya pin daya. Jadi Anda tidak dapat menggunakan ini untuk berbicara USB karena tidak terhubung.
Satu-satunya pilihan Anda dengan Pi adalah 'menggedor' USB menggunakan pin GPIO, tetapi ini sangat lambat dan berpotensi tidak dapat diandalkan. Saya menduga Anda hanya akan benar-benar dapat meniru keyboard atau mouse - bandwidth yang lebih tinggi mungkin akan terlalu banyak untuk CPU untuk mengatasinya, mengingat persyaratan waktu yang ketat untuk sedikit membenturkan sesuatu seperti USB.
Alternatif lain adalah menemukan perangkat yang memungkinkan Anda menghubungkan dua komputer bersama melalui USB, untuk membuat semacam jaringan. Tapi Anda juga bisa menggunakan koneksi Ethernet ...
sumber
Berdasarkan pembahasan cepat lembar data BCM2835 (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) bab 15, sepertinya USB OTG didukung di HW, secara teoritis, mungkin hanya masalah SW untuk mendukung skema yang diusulkan. Saya bukan ahli protokol USB (atau bahkan pemula, sungguh), tetapi akan sangat keren untuk memiliki fungsi ini.
Melihat deskripsi BeagleBone (http://elinux.org/BeagleBone), tampaknya mendukung sesuatu yang serupa, meskipun ada penyebutan khusus konektor yang mendukung mode ini. Akan sangat disayangkan jika Raspberry Pi terbatas hanya karena pemilihan konektor.
Semoga ini bermanfaat.
sumber
Ini sekarang tampaknya dimungkinkan menggunakan PiZero - lihat http://pi.gbaman.info/?p=699 untuk lebih lanjut.
sumber
Sayangnya meskipun ini tampak sederhana, sejauh yang saya tahu, itu belum dilakukan. Lihat utas ini dan jawaban yang sangat terperinci untuk perincian lebih lanjut
https://unix.stackexchange.com/questions/2683/serve-files-over-usb
Dan jawaban spesifik Pi di sini: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938
sumber
Jika Anda tidak terlalu peduli dengan kinerja, Anda mungkin bisa mendapatkan mikrokontroler yang mampu menggunakan USB dengan kode penyimpanan massal USB (misalnya, Anda dapat memprogram ulang antarmuka debug STM32F103 pada modul eval discovery STM32F0 seharga $ 10), sambungkan dengan hati-hati ke port serial pi. sebagai ujung belakang, dan berlari beberapa ratus kilobaud.
Performa yang lebih baik kemungkinan akan dimiliki dengan menghubungkan ke PC klien melalui ethernet, tetapi itu akan memerlukan driver khusus atau presentasi berbeda ke sistem operasi host - yaitu, Anda akan menjadi perangkat penyimpanan yang terhubung jaringan atau server berbagi.
Dari kabel transfer file rak saya percaya sudah disebutkan, tapi itu akan memerlukan perangkat lunak yang sesuai untuk PC klien dan dukungan driver tingkat sumber linux untuk akhir pi.
sumber
Saya menemukan bahwa Arduino dapat meniru perangkat USB, bahkan Arduino Leonardo keluar dari kotak. The lufa USB stack dapat digunakan pada Arduino dan menerapkan perangkat USB mass storage driver (lihat tutorial ini ). Pengaturan ini dapat digunakan untuk memetakan USB ke perintah SCSI seperti dipahami oleh pembaca kartu SD. Saya tidak cukup tahu tentang SCSI tetapi sepertinya kartu SD pada Raspberry Pi dan USB-via-Arduino dapat digunakan bersama di bus yang sama. Tentu ide ini bukan solusi lengkap ...
sumber
Ini datang ke bagaimana USB bekerja, Anda melihat setiap kali dua hal terhubung dengan USB ada semua cara USB host dan perangkat USB dan tidak pernah keduanya mengubah tempat. Host USB melakukan segala macam hal yang sebagian besar tidak dapat dilakukan perangkat USB untuk menyinkronkan transfer data antara semua perangkat yang terhubung ke bus USB. Lihat halaman wikipedia USB untuk informasi lebih lanjut .
Apa yang Anda bicarakan lakukan adalah memaksa dua host USB (Raspberry Pi dan komputer) untuk berkomunikasi yang sayangnya tidak didukung oleh standar USB. Ada beberapa perangkat yang dapat memalsukan transfer data antara dua host USB, tetapi seperti yang disebutkan Malvineous, Anda sebaiknya menggunakan ethernet.
Pertanyaan Anda secara khusus menyebutkan menggunakan Raspberry Pi untuk meniru penyimpanan USB tetapi apakah Anda sudah mempertimbangkan untuk mengatur Raspberry Pi sebagai NAS? Menggunakan Raspberry Pi sebagai kotak NAS pada dasarnya melakukan persis seperti yang Anda minta, tetapi alih-alih menggunakan USB, ia akan menggunakan jaringan Anda. Berikut adalah petunjuk bagus tentang cara melakukan ini jika Anda tertarik.
sumber
Saya dapat melakukannya dengan Ponsel Nokia N900 lama saya menggunakan driver gadget usb yang disertakan dengan stok Nokia kernel. Perangkat yang ditiru berperilaku persis seperti yang asli, Anda bahkan dapat mem-boot PC darinya.
sumber
Pi Zero dan Pi Zero W sekarang tersedia dan mendukung antarmuka Gadget ( Kernal.org , linux-sunxi.org ) yang memungkinkan beberapa profil berbeda, termasuk USB Mass Storage dan jaringan virtual.
Solusi terdekat dengan permintaan OP adalah dengan menggunakan protokol jaringan antara Pi dan PC host, dan kemudian beberapa bentuk protokol jaringan lainnya dari Pi ke penyedia cloud / jaringan. Pi Zero W telah membangun Wi-Fi, jadi bahkan dapat terhubung langsung ke penyedia cloud / jaringan. Jaringan kedua tautan tersebut akan menjadi cara termudah untuk menyelesaikan pekerjaan. Ada banyak protokol jaringan dan penyedia cloud yang tersedia.
Mencoba menggunakan USB Mass Storage akan menjadi ide yang buruk; Anda harus menulis atau menulis ulang adaptasi tingkat driver antara USB Mass Storage dan Pi. Anda bisa mulai dengan MTP , atau berakhir dengan sesuatu yang serupa. MTP memiliki masalah kinerja yang parah ( Reddit , XDA , HowToGeek , Reddit ) jadi saya menyarankan pendekatan jaringan.
Seharusnya ada banyak program dan proyek ke arah itu. Dari sudut pandang Pi, itu hanya bertindak seperti server server berkas / sinkronisasi, jadi setiap tutorial serupa harus membantu Anda memulai. Melihat ke hal-hal seperti server Seafile berbasis Pi , Syncthing , SugarSync , dan OwnCloud akan membantu Anda memulai.
Beberapa panduan bermanfaat tentang Pi Zero sebagai Gadget USB:
sumber
Standar USB berbasis host. Itu berarti bahwa satu perangkat harus mengendalikan semua komunikasi dengan perangkat yang terhubung. Klien dapat berupa perangkat atau hub sederhana. Hub adalah proxy host untuk klien yang terhubung ke hub, dan berkomunikasi dengan host (atau hub) yang terhubung dengannya.
Seperti desain asli USB yang terlihat, Anda tidak dapat menghubungkan dua host bersama (PC dan RPi).
Ada beberapa perluasan, USB On-The-Go , yang memungkinkan koneksi USB untuk melihat apakah terhubung ke host atau klien, dan menyesuaikan perannya tergantung pada itu. Agar ini berfungsi, Anda harus memiliki dukungan di perangkat keras. Saya tidak percaya RPi dirancang untuk melakukan itu.
Untuk informasi lebih lanjut, lihat di http://www.usb.org/home atau bahkan http://en.wikipedia.org/wiki/Universal_Serial_Bus
Singkatnya, saya tidak percaya itu bisa dilakukan.
sumber