1

USB デバイスのファームウェア バージョンを取得しようとしています。仕様によると:

USB インターフェイスを使用する場合、コマンドは CONTROL READ 要求として送信されます。ここで、要求バイトはコマンドであり、インデックスと値はデバイスに送信される追加パラメーターです。PC がデータを要求している場合は、エンドポイント 0 の IN バッファーに返されます。

Command               Description              Device Response / Notes 
  a             Request firmware version     The device returns 4 bytes containing the version number in ASCII.

ファームウェアのバージョンをリクエストするには、次のようにします。

char buffer[4];
unsigned char a = 'a';
r = libusb_control_transfer(dev_handle,0,a,0,0,buffer,4,0);

しかし、プログラムが応答を停止し、結果が得られません。

4

1 に答える 1

1

ここで間違っている可能性があることが2つあります。

文字値「a」は 0x61 に等しいです。bRequest パラメータに必要なのは 0x0A だと思います。

また、デバイスからデータを取得しているため、おそらく bmRequestType を適切にセットアップする必要があります。0x80 は、デバイスからホストに送信されるデータを表すマスクです。現在、デバイスにデータを提供していることを指定しています。

このような場合、USB アナライザーは非常に便利です。そのため、バスを調べて、デバイスに送信されたセットアップ パケットに何が含まれているか、およびホストへの応答が何であるかを正確に知ることができます。

変更されたコードは次のとおりです。

char buffer[4];
r = libusb_control_transfer(dev_handle,0x80,0x0a,0,0,buffer,4,0);
于 2013-10-24T15:09:21.970 に答える