web-dev-qa-db-fra.com

Contrôler l'alimentation du port USB?

Est-ce que quelqu'un sait comment contrôler les broches USB sur un certain port USB? Je pense que c'est certainement possible en assembleur, mais qu'en est-il du C++ ou du C #?

Je veux pouvoir utiliser une batterie USB comme source d'alimentation pour une LED ou quelque chose comme ça. Alors, un programme l'allumerait et l'éteindrait, le faisant clignoter.

Je sais que cela semble inutile, mais je dois le faire pour quelque chose de génial.

Je sais aussi que cela peut nécessiter un pilote personnalisé.

28
Kristina Brooks

L'USB n'est pas anodin, alors je suppose que vous aurez quelques problèmes à l'utiliser. Vous seriez/bien/mieux loti (IMHO) avec des ports série standard, utilisés depuis des lustres pour ce genre de choses, avec de nombreux exemples disponibles. Si vous n'avez pas de port série disponible sur votre machine cible, vous pouvez utiliser un câble d'interface USB-> Série.

Cela étant dit, vous voudrez probablement jeter un coup d'œil @: http://sourceforge.net/projects/libusbdotnet/

LP, Dejan

7
Dejan Stanič

Vous ne pouvez pas simplement basculer les broches sur un port USB. Période. USB est un protocole série. Le connecteur contient

  1. Puissance. L'hôte peut contrôler les lignes électriques car il peut couper le courant en cas de surcharge. Ceci est effectué par le pilote USB de l'hôte, ce qui signifie le pilote de l'adaptateur de l'hôte du PC. Cela ne signifie en aucun cas un pilote de périphérique personnalisé dont vous pourriez avoir besoin pour du matériel qui n'utilise aucune des classes de périphérique pour lesquelles le système d'exploitation fournit déjà des pilotes.
  2. Les données. Les données sont envoyées via un protocole série. Il n’ya donc aucun moyen de contrôler ces broches si vous utilisez USB.

Si vous voulez obtenir quelques IO ports, vous avez besoin de plus de logique. Il faut au moins quelque chose qui suive le protocole USB, c’est-à-dire une sorte de microcontrôleur (ou un contrôleur de périphérique USB spécial tel que les contrôleurs FTDI USB. Les FT232 et FT245 sont particulièrement agréables à utiliser). Pour une solution bas de gamme basée sur un microcontrôleur, le pilote V-USB pour les contrôleurs AVR peut être intéressant.

Pour brancher les bits IO sur le PC, utilisez le port parallèle. L'USB n'est vraiment ni fabriqué ni adapté à cela.

10
bluebrother

Selon http://www.gniibe.org/development/ac-power-control-by-USB-hub/index

USB 2.0 prend en charge nominalement la commutation d'alimentation par port:

Hub Descriptor:
[...]
  wHubCharacteristic 0x0089
    Per-port power switching
[...]

Malheureusement, l’auteur rapporte que, même si le microprogramme de certains hubs prétend le prendre en charge, les fabricants ont pris des raccourcis sur le circuit imprimé.

6
android.weasel

Il n’existe aucun logiciel permettant de contrôler les broches d’alimentation et de terre d’un port USB, du moins sur les jeux de puces pour PC. Cela est géré matériellement par le contrôleur USB. Si vous souhaitez un contrôle logiciel sur les tensions TTL, obtenez un adaptateur de port parallèle USB.

3
Andy Ross

Essayer de mettre en marche et d’éteindre l’USB n’est pas une excellente façon de le faire: il est possible que votre contrôleur USB soit capable de le faire, mais ce ne serait pas une chose "normale".

Le moyen le plus simple consiste probablement à utiliser quelque chose comme une puce parallèle FTDI FT245 USB>. Si vous essayez simplement de faire clignoter des lumières clignotantes, achetez peut-être un câble d’imprimante parallèle USB -> standard et une interface avec celle-ci ... vous obtiendrez une sortie en 8 bits avec un contrôle logiciel très simple, et beaucoup plus avec seulement un peu de travail.

Ou allez-y tout le monde et obtenez un microcontrôleur avec USB intégré ... les possibilités sont infinies!

3
NickZoic

Je pense que vous cherchez un périphérique USB. Un simple chargeur pourrait être fabriqué, en plaçant ou en augmentant le régulateur pour augmenter le niveau supérieur de 5 V ou le régulateur pour obtenir une tension de charge inférieure. L'activation ou la désactivation nécessiterait un périphérique USB. 

1
kenny

Il peut être possible d’allumer et d’éteindre l’appareil en faisant ce qui se passe lorsque vous "retirez du matériel en toute sécurité" un périphérique USB, mais je ne suis pas sûr à 100% que cela coupe un signal à l'appareil lui dit qu'il est déconnecté, ce qui le fait s'éteindre tout seul.

La meilleure solution consiste à créer un périphérique USB capable de communiquer avec l'ordinateur (éventuellement via un pilote personnalisé, mais vous pouvez probablement également utiliser un pilote standard, tel qu'un périphérique HID). Votre ordinateur enverrait un "allumé" ou un "éteint" (ou tout ce dont vous pourriez rêver) à votre appareil, ce qui interpréterait les signaux à votre guise (probablement en allumant et en éteignant le voyant dont vous parlez). Ce n'est pas aussi difficile que cela puisse paraître. Vous pouvez acheter des microcontrôleurs dotés d'interfaces USB, tels que l'Arduino, ou certains des PIC haut de gamme. De nombreux fabricants de ces types de microcontrôleurs disposent de documents expliquant comment utiliser l'interface USB avec eux.

1
rmeador

Il n'y a aucun moyen de le faire pour les broches d'alimentation et de terre réelles. Et vous devriez probablement lire this une partie de l’article Wikipedia sur USB.

1
John D.

Vous avez besoin d’une carte de développement avec des broches d’E/S programmables (a.k.a.PIO) ou d’un UART (RS232).

La méthode la plus simple consiste à connecter le voyant au Clear To Send (CTS) et à la masse ou au VCC. La sortie sur la ligne CTS allumera ou éteindra la LED selon que l’autre extrémité est connectée à la terre ou non. Les broches d’E/S normales pourraient être utilisées, mais elles servent à la transmission de données série dans l’UART. Le UART construit généralement un caractère 8 bits à partir de ces pins; mais passe directement les valeurs RTS (Request To Send) et CTS.

Lorsque vous utilisez un PIO, il vous suffit de définir un bit dans une variable et d'écrire cette variable à l'adresse du jeu PIO. Vous devrez peut-être aussi verrouiller les bits. Certaines broches PIO garderont cette valeur en mémoire jusqu'à ce que la valeur suivante soit écrite (appelée verrouillée), d'autres se souviendront de la valeur tant qu'elle sera écrite.

1
Thomas Matthews

La question est de contrôler l’ampérage de l’USB. La plupart des réponses n’ont pas tenu compte de la variété de mA en USB et de son effet sur les volts.

Les sorties USB 1.0 et 2.0 communes sont égales à 500 mA ou 0,5 A. 500mA fois 5 volts équivalent à 2,5 watts de puissance.

1 A vous donnera les 5 watts complets et l'USB 2.0 peut être manipulé par ASUS Ai Charger pour produire une sortie de 1,2 A ou 1200 mA pour une sortie de 6 watts.

0
mtelesha