Pi en tant que client USB

16

Je cherche un moyen pour que le Pi agisse comme un client USB et se fasse passer pour un lecteur flash.

J'ai vu beaucoup de suggestions, mais la plupart d'entre elles sont maintenant anciennes (1+ ans) et vagues / incomplètes - je voudrais demander un rafraîchissement quant à ce qui a fonctionné, ce qui n'a pas fonctionné, etc.

Il existe également de nombreuses suggestions pour utiliser le Pi comme périphérique de type NAS à la place. Cela ne fonctionnera pas pour mes besoins, car j'ai un hôte "stupide" qui ne peut accepter que des lecteurs flash (et je veux utiliser le Pi pour le rendre "plus intelligent")

résumé des suggestions que j'ai déjà vues:

  1. émuler un client USB via les broches GPIO
  2. émuler une connexion série via GPIO, puis utiliser les câbles existants pour passer de série à USB
  3. en utilisant un modèle A, utilisez un logiciel pour convaincre le pi d'agir comme un client
  4. en utilisant un câble USB d'hôte à hôte (je ne suis pas sûr d'en avoir vu qui prennent en charge Linux ..)

quelqu'un pourrait-il expliquer plus en profondeur certaines de ces solutions proposées?

PS - Je n'ai pas besoin ni ne m'attends à des performances élevées avec cette configuration, les vitesses USB 1.1 seraient suffisantes.

edit: Je serais également intéressé par toutes les alternatives qui pourraient fournir cette fonctionnalité, mais je n'ai encore vu aucune clé USB "intelligente" ou variante android-on-a-stick qui le puisse.

user2813274
la source
1
Il existe certainement des câbles pris en charge par Linux; cela fait partie de l'objectif avec le usbnetconducteur. Ils ont une page en mentionnant certains; il semble obsolète, il y en a peut-être plus maintenant. Avant d'acheter quoi que ce soit, vérifiez autour.
goldilocks
Quelques remarques spécifiques au modèle A à ce sujet ici
goldilocks
Vous pouvez également trouver des projets tels que usbip: stackoverflow.com/a/19689740/544721 ou linux-usb.org/gadget utiles dans l'assemblage de la solution.
Grzegorz Wierzowiecki

Réponses:

6

Vous auriez de la chance si les ports USB du PI étaient OTG et non USB Host.

Vous devriez peut-être envisager un autre appareil car aucune des solutions qui vous ont été suggérées ne peut être pratique:

émuler un client USB via les broches GPIO: En théorie, il est possible d'émuler l'USB en utilisant le bit-banging des broches. Cela peut entraîner une surcharge logicielle assez importante en termes de développement logiciel. La solution sera relativement difficile à mettre en œuvre. En théorie, c'est possible, mais vous devez faire l'analyse coûts / avantages.

émuler une connexion série via GPIO, puis utiliser les câbles existants pour passer de série à USB: cette solution ne servira pas votre objectif car vous (plutôt votre hôte DUMB) voudriez une émulation "Mass Storage Device" (type de périphérique 0x08) et non un Émulation de périphérique "Communications and CDC Control" (type de périphérique 0x02).

en utilisant un modèle A, utilisez un logiciel pour convaincre le pi d'agir comme un client: ne savez pas ce qui vous a été suggéré

en utilisant un câble USB d'hôte à hôte (je ne suis pas sûr d'en avoir vu qui prennent en charge Linux ..): Dans ce cas, les deux appareils verront un périphérique de stockage de masse connecté à leur contrôleur hôte. En utilisant cette méthode, votre Raspberry pi apparaîtra comme un périphérique de stockage de masse exportant le stockage basé sur votre carte SD. Avec cette solution, vous pouvez envisager le type de stockage que vous souhaitez exporter vers l'hôte DUMB. Votre hôte DUMB peut ne pas s'exporter en tant que périphérique de stockage de masse. À ce stade, vous aurez d'autres options USB autres que Raspberry Pi.

Chetan Bhargava
la source
Quels types d'autres appareils recommanderiez-vous? (J'espère quelque chose avec le wifi et la possibilité d'exécuter dropbox ou une synchronisation bittorente ou quelque chose de similaire)
user2813274
Vos besoins concernant l'entretien de l'hôte DUMB ne sont pas très clairs. Plus de clarté est requise.
Chetan Bhargava
2
OK, aujourd'hui, j'ai une clé USB dans ma voiture qui lit des mp3 - chaque fois que je veux changer la musique dessus, je dois déplacer physiquement la clé USB - je voudrais juste avoir un appareil synchronisé avec quelque chose sur mon bureau, et présenter une interface USB pour la voiture - également, le port USB sur le modèle A Pi est une puce OTG (et sur le modèle B, mais le port Ethernet désactive cette fonctionnalité) - source
user2813274
Passons au chat (Bakery) pour ne pas encombrer le post de commentaires :-)
Chetan Bhargava
2

Il existe maintenant une variante Pi zéro, qui peut faire ce que je voulais, et Adafruit en a fait un tutoriel:

https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/overview

Le nom officiel de ceci semble être "système de gadget USB", et nécessite simplement un câble OTG.

Je n'ai pas pu tester cela, car les Pi Zero sont en rupture de stock à peu près partout, mais je pense que c'est actuellement la meilleure voie

user2813274
la source