web-dev-qa-db-ja.com

USBポートの電源を制御しますか?

誰かが特定のUSBポートのUSBピンを制御する方法を知っていますか?アセンブラでは間違いなく可能だと思いますが、C++やC#はどうですか?

USBバッテリーをLEDなどの電源として使えるようにしたい。したがって、プログラムは電源を入れたり切ったりしてフラッシュさせます。

無意味に聞こえるかもしれませんが、何か素晴らしいことをする必要があります。

また、カスタムドライバーが必要になることもあります。

28
Kristina Brooks

USBはささいなものではないので、USBを使用する際に(誤)問題が発生すると思います。あなたは多くの例が利用可能で、長い間そのようなものに使用されてきた標準のシリアルポートで/ much /より良い(IMHO)でしょう。ターゲットマシンで利用可能なシリアルポートがない場合は、USB->シリアルインターフェイスケーブルを使用できます。

そうは言っても、おそらく@を見てみたいでしょう: http://sourceforge.net/projects/libusbdotnet/

LP、Dejan

7
Dejan Stanič

USBポートのピンを単純に切り替えることはできません。限目。 USBはシリアルプロトコルです。コネクタには

  1. 力。ホストは、過負荷の場合に電力を遮断できるため、電力線を制御できます。これは、USBホストドライバーによって行われるものです。つまり、PCのホストアダプターのドライバーです。これは、OSがすでにドライバーを出荷しているデバイスクラスを使用しないハードウェアに必要なカスタムデバイスドライバーを意味するものではありません。
  2. データ。データはシリアルプロトコルを介して送信されるため、USBを使用している場合、これらのピンを制御する方法はありません。

IOポートをいくつか取得したい場合は、より多くのロジックが必要です。少なくとも、USBプロトコルに従うものが必要です。つまり、ある種のマイクロコントローラー(または [〜#〜] ftdi [〜#〜] USBコントローラー。FT232とFT245は特に使いやすいです。ローエンドのマイクロコントローラーベースのソリューションの場合AVRコントローラー用の V-USBドライバー は興味深いかもしれません。

簡単なビットバンギングのためにIO PCのピンはパラレルポートを使用します。USBは実際には作られておらず、それに適していません。

10
bluebrother

によると http://www.gniibe.org/development/ac-power-control-by-USB-hub/index

USB 2.0は通常、ポートごとの電源切り替えをサポートしています。

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

悲しいことに、ハブのファームウェアはこれをサポートすると主張しているかもしれないが、製造業者は回路基板の隅を切り取ったと著者は報告している。

7
android.weasel

少なくともPCチップセットでは、USBポートの電源ピンとグランドピンをソフトウェアで制御することはできません。これは、USBコントローラによってハードウェアで処理されます。ソフトウェアでTTL=電圧を制御する必要がある場合は、USBパラレルポートアダプターの入手をご覧ください。

3
Andy Ross

USB電源のオン/オフを切り替えるのは、それほど良い方法ではないと思います。USBコントローラーがこれを実行できる可能性はありますが、「通常」のことではありません。

おそらく最も簡単な方法は、FTDI FT245 USB->パラレルチップのようなものを使用することです。点滅しているライトを点滅させようとしているだけなら、外出して標準のUSB->パラレルプリンターケーブルとそのインターフェースを購入することもできます。非常に簡単なソフトウェア制御で8ビットの出力が得られます。ほんの少しの作業でもっと。

または、独り占めしてUSBを内蔵したマイクロコントローラーを入手してください...可能性は無限大です!

3
NickZoic

USBデバイスを探していると思います。レギュレーターを配置またはブーストして5vを高くするか、レギュレーターをより低い充電電圧に駆動することにより、単純な充電器を作成できます。オンまたはオフにするには、USBデバイスが必要です。

1
kenny

may USBデバイスを「安全にハードウェアから取り外す」ときに何が起きても、デバイスの電源をオンまたはオフにすることが可能ですが、これで電源がオフになるかどうかは100%わかりません単にデバイスに信号が送信され、接続が切断されていることを通知する場合があります。これにより、デバイス自体がオフになります。

あなたがやろうとしていることに対する最善の策は、実際にコンピューターと通信するUSB​​デバイスを構築することです(おそらくカスタムドライバー経由で、おそらくHIDデバイスのような標準ドライバーを使用することもできます)。コンピュータにデバイスに「オン」または「オフ」(またはあなたが思いつく他の何か)を送信させると、信号は適切に解釈されます(おそらく、あなたが話していたLEDをオン/オフすることによって)。これは思ったほど難しくありません。 Arduinoや一部のハイエンドPICなど、オンボードのUSBインターフェイスを備えたマイクロコントローラーを購入できます。これらの種類のマイクロコントローラーの製造元の多くは、USBインターフェースを行う方法を説明するドキュメントを入手できます。

1
rmeador

実際の電源ピンとグランドピンに対してこれを行う方法はありません。そしておそらく、Wikipedia USB記事の this の部分を読んでください。

1
John D.

必要なのは、プログラム可能なI/Oピンを備えた開発ボード(別名[〜#〜] pio [〜#〜])またはUART(RS232) 。

最も簡単な方法は、LEDを送信可(CTS)およびグラウンドまたはVCCに接続することです。 CTSラインの出力は、もう一方の端がアースに接続されているかどうかに応じて、LEDをオンまたはオフにします。通常のI/Oピンcouldが使用されますが、これらはUARTでのシリアルデータ送信用です。 UARTは通常、これらのピンから8ビット文字を作成しますが、RTS(Request To Send)およびCTS値を直接渡します。

PIOを使用する場合は、変数にビットを設定し、その変数をPIOセットのアドレスに書き込むだけです。また、ビットをラッチする必要がある場合もあります。一部のPIOピンは、次の値が書き込まれる(ラッチと呼ばれる)までその値を記憶しますが、他のPIOピンは、書き込まれる限りその値を記憶します。

1
Thomas Matthews

問題は、USBのアンペア数を制御することです。ほとんどの回答では、USBのmAの変動とそれがボルトに及ぼす影響を考慮に入れていません。

一般的なUSB 1.0および2.0の出力は500 mAまたは0.5 Aに相当します。500mAに5ボルトを掛けたものは、2.5ワットの電力に相当します。

1 Aは5ワットを完全に供給し、USB 2.0はASUS Ai充電器で操作して1.2 Aまたは1200 mAを出力して6ワットを出力できます。

0
mtelesha