WinUsb_ControlTransferについて


key  2013-06-10 02:46:23  No: 73707

WinUsb_ControlTransferについて質問です
WinUsb_ControlTransferを使用したAPIを使っているのですが、
処理時間を大まかにはかったところ、WinUsb_ControlTransferに約1.5ミリほどかかるのですが、
これは正常なのでしょうか?


key  2013-06-10 03:13:52  No: 73708

すみません、内容を端折りすぎたので追加します。

開発環境は visual studio 2008
MFCを使ったアプリケーションです。
システム開発ボードを使用しており、
(http://www.prime-sys.co.jp/products/cxusb2.htm)※この商品
これを制御するために用意されたAPIを使用しています。
(http://www.prime-sys.co.jp/DownLoad/RefApp7/software/spec_SUP64_API_r4.pdf)これです

このAPIはWINUSBのラッパー関数なのですが、その中で
WinUsb_ControlTransferを使用している部分で時間がかかっています。

時間計測にはQueryPerformanceCounterを使用しました。

USBの知識が乏しいのでAPIを利用しているのですが、これぐらい時間がかかる物なんでしょうか?

以上、お願い致します。


tetrapod  2013-06-10 04:08:06  No: 73709

コントロール転送ってそんなものだと思われる。
コントロール転送は setup + data(n) + status という3ステージ構成になっていて、
通常各ステージは別フレームに乗るものだから。
# USB 1frame=1msec なので 1msec*3frame = 3msec かかってもおかしくない。

速度が要求されるならコントロール転送は避けるべきで、そのためのバルク転送。


key  2013-06-10 06:40:37  No: 73710

tetrapod さん回答ありがとうございます。
なるほどそうなんですね、 
仕方ないのでバルク転送で開発してみようと思いますが、
WinUsb_ReadPipe function  というのを使うとできる様です。
そこでまた質問なんですが、このWinUsb_ReadPipe functionの第二引数の
PipeIDが調べてもどのような情報を入れるのかいまいち分かりません。
どなたか教えて頂けますか?


tetrapod  2013-06-10 23:33:32  No: 73711

リンク先の内容は正直追いかけてないけど
bulk と control はそもそもの目的が違うので
・本来 control 転送であるべき通信を bulk 転送で行うことは無理
・本来 bulk 転送であるべき通信を control 転送で行うことは無理

だから
> 仕方ないのでバルク転送で開発してみようと思いますが、
なんてことはそもそもありえない話。

なんだか前提条件からして間違っていたりしない?
その辺の整理をしないで質疑応答しても無駄なので、まずはそっちから。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加