web-dev-qa-db-ja.com

C ++ USBプログラミング

私はハードウェアプログラミング(特にUSB)を初めて使用するので、私と私の質問にはご容赦ください。 C++を使用していて、マイクロプロセッサボードのUSBポートとの間でデータ(バイトアレイ)を送受信する必要があります。

今、私は以前にいくつかのシリアルポートプログラミングを行ったことがあり、シリアルポートの場合、ポートを開き、セットアップし、I/Oを実行し、最後にポートを閉じる必要があることを知っています。 USBポートを使用すると思いますが、上記のように簡単ではありません。

マイクロプロセッサボード用のドライバがないため、対話できるように、Microsoftの標準ドライバを使用して、標準のWindows IOコマンドを実装したいと考えています。

標準のWindows IOコマンドを介してUSBポート(オープン、セットアップ、I/O)に「通信」するために必要な手順について誰かが私を正しい方向に向けることができれば、私は本当にそしてどうもありがとうございました。

23
JB_SO

一言で言えばUSB は、優れたバックグラウンド読み取りです。

一般的なUSBモジュールの場合は LibUSB を試してください。これには、標準デバイスと通信するいくつかの例が含まれています。 LibUSB-Win32 は、そのライブラリのWindowsポートです。

しかし、RS232ポートほど単純ではありませんnear

どのマイクロプロセッサを使用していますか? USBハードウェアに付属していますか、それともすべてソフトウェアで実装することを考えていますか(熟考する!)多くのマイクロプロセッサには、出発点として使用できるキーボード/マウスなどの単純なHID USBデバイスをエミュレートできるコードサンプルが付属しています。それが失敗した場合、おそらく いくつかの既成のオプション があり、多くの頭痛の種を節約できます:-)

17
Jon Cage

マイクロプロセッサボードで使用されているUSBチップセットを調べます。 Ftdi、Cypressなど。これらのメーカーは、通信用のドライバー、ライブラリ、サンプルプログラムを提供しています。これが最も簡単な方法です。

ボードがHIDデバイスとして設定されていない限り、「標準」ドライバー自体はありませんが、Windowsを使用している場合、Microsoftは WinUSB.sys 'generic'ドライバー を提供しています。あなたのニーズ(それはアイソクロナス転送をサポートしていません)。

4
SoftDeveloper

自身を接続するUSB​​デバイスのドライバーを作成する必要があります。ボードにUSB i/oが搭載されているチップの種類がわかっている場合、ドライバーはそのデバイス用です。

STMの場合、そのチップのドライバーはすでに存在するか、ドライバーの開発に役立つAPIがある可能性があります。おそらくカスタムデバイスですが、デバイスタイプに目を通し、デバイスに一致する既存のタイプがあるかどうかを確認する必要があります。もしそうなら、あなたが使用できるそのためのドライバーがすでにあるかもしれません。ボードに関する情報が必要です。

独自のドライバーを作成するあまり深く理解しなくても、Microsoftのドライバーモデル、ユーザーモードドライバーとカーネルモードドライバーの違い、どのドライバーノードのドライバーを学ぶ必要があります。ドライバー階層とそれらが論理的に接続する方法、さまざまなタイプのドライバー(フィルター、関数、バス)、カーネルドライバーがユーザーインターフェイスと通信する方法、ダイナミックリンクライブラリ、フレームワークとAPI、WDMフレームワーク/ API、KMDFおよびUMDF APIとこれを表しますほんの短いリストです。

[〜#〜]または[〜#〜]既存のドライバを使用できます。

USBマイクロコントローラーが提供するドライバーを使用するUSBマイクロコントローラーが使用しているファームウェアがある場合、そのファームウェアはわかりません。ファームウェアがない場合(チップが付属しているか、epromを使用してフラッシュせずに保存している場合)、チップがUSBブートローダーをサポートしているかどうかがわかっていれば、フラッシュするか、USB経由でファームウェアをロードできます。 JTAGやその他の周辺機器は必要ありません。おそらく、USBだけで地面から離れて、そこからどこへでも行くことができます。通常、これらのタイプの質問は、USBマイクロコントローラーのないボードを検討するときに発生します。

こちらは、関連性の低いドライバーへのリンクです。ほとんどのUSBマイクロコントローラーは、USB通信をUARTに切り替える目的を果たします。実際に考えてすべてを制御するほとんどのマイクロコントローラーは、USB i/oではなくUARTまたはその他のiを備えているためです。 I2CやSPIなどの/ oピン。

https://www.silabs.com/products/mcu/Pages/USBXpress.aspx

そのドライバーは、USBマイクロコントローラーのメーカーにとっては、似たようなものではないにしても実際には機能する可能性があります。ほとんど確実に仕事をします。お役に立てれば。

3
marshal craft

ハードウェアプログラミングとは、マイクロコントローラをプログラミングするということですか?その場合、「標準のWindowsドライバー」などを使用する方法はありません。

USB規格は非常に厚いです。ご覧ください こちら

これは非常に複雑なトピックであり、マイクロコントローラー用にすでに作成されているUSB実装を見つけることをお勧めします。 (あなたが私たちにもっと情報を与えたなら、私たちは見つけることができるかもしれません)

2
Earlz

どのようなマイクロプロセッサとどのようなボードですか?

多くのプロセッサはUSBポートをサポートしています。また、一部のハードウェアボードにはUSBコントローラーも付属しています。

たとえば、私のショップが使用しているプロセッサには、ハブまたはデバイスとして機能できる2つのUSBコントローラが付属しています。 USBコントローラとして機能する別のプロセッサを追加することさえします。

1
Thomas Matthews