2009-07-24 20 views
10

これは直接的なプログラミング関連ではないと思われるかもしれませんが、私は他にどこに問い合わせるべきかを知りません。私はさまざまなウェブサイトを見てみましたが、これまでのところGoogleは私の友人ではありませんでした。CDCデバイス用に独自のホスト側USBドライバを作成する必要がありますか

開発中のデバイスが接続されているさまざまなwindows/linux/macプラットフォーム用の独自のデバイスドライバを作成する必要があるかどうか、または機能が標準ドライバによって提供されているかどうかを調べることができません。

私のデバイスは、COM:ポートとして表示されるUSB CDC(通信デバイス)です。また、デバイスが列挙されると、USBコネクタから引き出せる5単位負荷(500mA)の電源電流を必要とするバッテリ充電器も含まれています。私の問題は、ホストのUSBドライバが完全な電源電流を供給できないと判断した場合、デバイスを列挙できないはずです。

標準的なドライバがこの設定を使用してデバイスを列挙する場合、フォールバックとして、デバイスがインターフェイスコネクタから1単位の負荷しか引き出さないようにする第2のコンフィギュレーションセットを提供する場合。

+0

私はまず、これらのことが許されているかどうかを調べるためにUSB仕様を調べなければならないと思います。仕様で許可されている場合は、標準のブラウザがサポートしている可能性があります。 – kgiannakakis

+0

USB 2.0仕様では、デバイス・ディスクリプタはいくつかの設定を可能にします。各設定では、インタフェースから一定の電力量が必要であると指定できます。それから、私は、これらの異なる構成の中から選択するのは運転手に任せていると思います。 –

答えて

6

デバイスのVIDとPIDをシステムusbser.sysと結びつけるWindows用の.infファイルを作成する必要があります。鉱山は、この(あなたのVIDとPID(16進数)に入れ、必要に応じてYourCompanyを交換し、あなたが好きな日付とバージョンにのDriverVerラインを変更する)ようになっています

; ----------------------------------------------------------------------------- 
; XP/2000 USB Comms Port Setup 
; ----------------------------------------------------------------------------- 

[Version] 
DriverVer=12/03/2008,1.0.0000.0000 
Signature="$Windows NT$" 
Class=Ports 
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} 
Provider=%YourCompany% 

[DestinationDirs] 
DefaultDestDir=10,system32\drivers 
DriverCopyFiles=12 

[ControlFlags] 
ExcludeFromSelect = * 

[Manufacturer] 
%YourCOmpany%=YourCompanySerialPort 

[YourCompanySerialPort] 
%YourCompanyUSBSerialPort%=YOURCOMPANYUSB,USB\VID_1234&PID_ABCD 

; 
; Win 2000/XP 
; 
[YOURCOMPANYUSB] 
Include=mdmcpq.inf 
CopyFiles=FakeModemCopyFileSection 

[YOURCOMPANYUSB.HW] 
AddReg=YOURCOMPANYUSBAddReg.HW 

[YOURCOMPANYUSBAddReg.HW] 
HKR,,DevLoader,0,*ntkern 
HKR,,NTMPDriver,,"usbser.sys" 

[YOURCOMPANYUSB.Services] 
AddService=usbser, 0x00000002, FuncDrv_Service_Inst 

[FuncDrv_Service_Inst] 
DisplayName=%USBFilterString% 
ServiceType= 1 
StartType = 3 
ErrorControl = 0 
ServiceBinary = %12%\usbser.sys 

[Strings] 
YourCompany="YourCompany" 
YourCompanySerialPort="Your Company USB Serial Port" 
USBFilterString = "USB Serial Service" 

注これは32ビットのOSで動作します。ファイルのヘッダにはそうは言いませんが、Vistaでも動作します!

usbser.sysの一部のバージョンでは、たとえば64バイトの倍数のパケットを転送する場合など、ブルースクリーン処理などの重大な問題があることに注意してください。 XP SP2以前を使用している場合は、修正プログラムKB943198をインストールしてください。 XP SP3とVistaは問題ありません。

Macの場合、デバイスクラスを正しく報告するだけで、ドライバのスキャンで正しいドライバが取得されます。 (Windowsは.infファイルを提供する必要がある理由であるデバイスクラスを無視します)。

編集:申し訳ありませんが、私は明確になっている必要があります。それは完全な負荷を描画することができない場合、列挙に失敗しません - 私はそれが可能であるか分からない。

+1

私はデバイスマネージャに行く必要があるユーザとは対照的に、このドライバを自動的にインストールしようとしています(これはうまくいきますが)。私はちょうど右クリックインストールを使用して、また、http://stackoverflow.com/questions/677686/how-do-i-deploy-a-inf-based-driverで説明されている方法を使って試しました。いずれの場合も、デバイスを接続すると、新しいハードウェアウィザードが表示され、デバイスマネージャの[ポート]に表示されている間は、関連付けられているドライバはありません。 詳細: –

+0

...私はWindows XPを試していて、サイプレスチップを使用しています。 Cypressは、これとはかなり違う、たとえば。CopyFilesがFakeModemCopyFileSectionではなく、DriverCopyFilesに設定されているなど、これに関する.infファイル(http://www.cypress.com/?rID=40248)を提供しています。なにか提案を? –

+0

私はusbser.sysを私の会社が製造したいくつかの製品のドライバとして使用しましたが、Windows XPの「新しいハードウェアの検出ウィザード」を避ける簡単な方法は決して見つけられませんでした。もしそうなら、教えてください。良い情報は、同じinfファイルを使用すると、infファイルがインストールされた後にデバイスが接続されている場合、Windows VistaとWindows 7にはウィザードなしでドライバを自動的にインストールできることです。 –

1

私はパワーの質問については確信していませんが、あなたはそれを使用することができますpleany CDCドライバ(または私はそこにあると思います)です。電源の質問については、多くの構成を持つ解決策はおそらく良いですが、私はこれまでUSBアナライザを持っていませんでしたが、家庭でUSBから電力を必要とする3つ以上の異なるデバイスがあるときに列挙に失敗しました。私はそれが新しいデバイスに電源を供給することができない場合は、これを切っている(それが動力を与えられないので賢明な選択)なら、これはオペレーティングシステムの選択肢である。これは私の見解ではなく、USBスタンダードをチェックしています。

1

ホストOSが既にサポートしているデバイスIDがデバイスに報告されている場合は、 はドライバを必要としません。

既存のUSBデバイスを偽装する必要があります。データシートは容易に入手できます。 (しかし、私はすでにそれを知っていたと思います)。

私は、ホストOSがあなたの複数構成のアイデアを尊重するとは確信していません。

しかし、私たちは皆知っているので、それを与える!

+0

デバイスIDは、ベンダーIDとプロダクトIDで構成され、そのベンダーIDの所有者は、自分のIDのハイジャックに感謝しないことに注意してください。個人的なプロジェクトの場合、もちろん問題はありませんが、そのようなデバイスは販売しません。 – MSalters

+0

もちろん、あなたのIDを取得することはそれほど高価ではありません。私たちは皆素晴らしいデバイスを購入したいと思います。 –

1

ドライバに関する質問には正しいですか?デバイスが接続され、列挙プロセスを通過するときは、< 100mAのままにする必要があります。ホストは、構成を問い合わせて決定します。異なる電力レベルをサポートする複数のドライバがある場合、ドライバは適切な設定を選択する必要があります。高出力しかなく、利用できない場合は、デバイスを列挙しません。一般に、CDCを実行している標準ドライバは、可能な異なるデバイスレベル構成を認識していないため、それらを処理するためにある程度のカスタマイズが必要になります。

1

デバイスがUSB CDC-ACMデバイスとしてWindowsデスクトップホストに接続している場合、Windowsデスクトップにはすでにドライバusbser.sysが提供されています。しかし、Windows Vistaにはいくつかの問題があります。デスクトップにusbser.sysをインストールするには、infが必要です。 WinCEの場合は、ドライバを持っていないので、サードパーティのベンダーから書き込みまたは取得する必要があります。ここにあなたのデバイスは、そのデバイスディスクリプタに電源が入っ自己として自分自身を指定した場合、ホストはデバイスの自己電力能力に依存しているでしょう1

http://www.em.avant-garde-lab.com/Products.html

です。詳細については、usb.orgで確認できます。おかげさまで

関連する問題