2011-08-11 16 views
3

特定のUSBポートからの読み取り/書き込みが可能ですか?そのUSBハンドシェイクのすべてを避けてください。C++でシリアルポートのようなUSBポートからI/Oを実行する方法

私がやりたいことは、USB経由でボード上にUSBドライバを持っていないマイクロコントローラなどと通信することです。私は私のC++アプリケーションが特定のUSBポート経由でデータを送信し、その後同じUSBポートからデータを受信できるようにしたい。

基本的には、そのUSBポートをシリアルポートのように扱いたいと思っています。これは可能ですか?私が使用できる回避策はありますか?

ありがとうございます。

PS:私はこれがuCとの通信に最適な方法ではないことを知っていますが、何らかの理由でこのようにしなければならないとしましょう。

編集:ところで、私は、シリアルポートアダプタにUSBを使用する1つのWindows 7

+2

これは、使用しているオペレーティングシステム/カーネルによって異なります。 C++は、この種のもののための標準インターフェースを直接提供していません。 –

+0

あなたは間違ったマイクロコントローラを購入しました。お金を使わずに話すことはできません。シリアルポートを備えた古いスクラップマシンを探します。 –

+1

これは純粋にハードウェアの問題であり、ソフトウェアではありません。何らかの種類のアダプタなしでUSBコントローラなしでMCUにUSBバスを接続することはできません。最も安価な種類のアダプタは、シリアル/ UARTポートを提供するものです。それがあまりにも大きければ、あなたはSOLです。 – Potatoswatter

答えて

0

使用しています。 USBポートはC++プログラムのシリアルポートのように見えます。

+0

私はその質問を誤解しました。私は、マイクロコントローラにUSBポートではなくシリアルポートがあると仮定しました。 –

+0

マイクロコントローラにはシリアルポートがあります(私はシリアルポートとしていくつかのI/Oポートを使用できます).USBポートではありません。私が使用できるアダプターがいくつかありますが、ニュージーランドでは、私が行っているプロジェクトのために慎重に高価です。 – JonaGik

+0

@Jonagik - 広告掲載を希望していないので、http://www.dealextreme.com/p/usb-to-rs232-serial-port-adapter-transparent-green-245120助けてもらえます –

0

一般的に、ドライバは内蔵されており、両方向で機能レポートを送信することができます。まったくシリアルポートの単純さではありません(連続したバイトストリームとは対照的にパケットなので)。hidapiはそれを本当にシンプルでクロスプラットフォームにします。

+0

私のデバイスにはベンダーと製品ID(hidapiが必要と思われる)。 – JonaGik

+1

USBデバイスの場合は、ベンダーと製品IDを持つことがあります。あなたはそれらが何であるか分からないかもしれませんが、正常に機能しているUSBデバイスをお持ちの場合は、ベンダーIDと製品IDがあります。 – Femi

+0

これは「USBデバイス」ではなく、既製のマイクロコントローラです。私がしたいことは、そのコンピュータのI/Oポートを介してコンピュータと通信することです。私のコンピュータはUSBポートしか持っていないので、コンピュータがVID/PID(Windowsがどのポートにデバイスが接続されているかを決める)ではなく、特定のポート経由で通信できるかどうか疑問に思っていました。私はこれを達成するために買うことができる(彼らはVID/PIDを持っている)シリアルアダプタへのUSBがあることを知っているが、ハードウェアではなくソフトウェアでこれを達成できるかどうか疑問に思っていた。 – JonaGik

3

普通の解決策は、マイクロコントローラボード上のFT232RなどのFTDI USB-to-serialチップを使用することです。次に、あなたのMCUに関する限り、それはシリアルポートと話しています。ホストマシン上では、適切なドライバが必要です。

私のMacでは、FTDIチップが/dev/tty.usbmodem____にシリアルポートとして表示されます。____は、Macで最初に検出された永続的な一意のIDです。数週間後でもプラグを抜くと再接続すると同じ数になりますが、別のMacでは別の数になります。

ドライバがインストールされている場合は、Windowsの場合は、新しいCOMポートとして表示されます(IIRC)。 Linuxでは、/dev/ttyUSB_と表示されます。_は、FTDIシリアルドライバのサポートがカーネルで有効になっている場合、0から始まるシリアル番号です。これは、複数のFTDIチップを接続すると難しくなります。

マイクロコントローラにUSBポートが内蔵されている場合、標準のCDC(通信デバイスクラス)シリアルポートデバイス(standard documentation available)として識別するためのソフトウェアが必要です。ほとんどのOSはこの標準USBデバイスクラスをサポートしています。

+0

ご回答いただきありがとうございます。私がやっているプロジェクトのタイプでは、USBからシリアルへのチップはニュージーランドで高価です。私のデバイスにはUSBポート自体がありません。私がしたいことは、デバイスのVID/PIDに基づいてどのポートを決定するかではなく、特定のUSBポートを介して通信することです。 – JonaGik

+0

@JonaGik、私はあなたが高すぎると思うか分からないが、digikey(NZ)から5.66(NZ $)のFTDIチップを手に入れることができる。 – g19fanatic

+0

DigiKey FTW。 @ JonaGik:コードを単一の物理ポートに結びつけたいのですか?これは、プロトコルの設計方法ではなく、非常に推奨されていません。私たちはJTAGデバッガを使っていましたが、私たちはまずそれを投げました。 –