デバイスマネージャでの認識

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_3987996
Level 3
Level 3
25 replies posted 10 replies posted 5 replies posted

基板上のCYUSB3014が3個が基板上のUSB HUBに繋がっており、USBケーブルで

PCと接続されています。

2個のCYUSB3014はプログラムを動作させると、デバイスマネージャでFX3と認識

されるのですが、1個だけ USB ビデオデバイスとして認識されます。

同じプログラムでなぜこのような事がおこるのでしょうか?

又、ICの見分けがつくように名前を変えたいのですが、何処をどの様に変更したら

いいのでしょうか?

0 件の賞賛
1 解決策

★ファームウェアの書き込みに関して

以下の条件を満たしたいということでしょうか?認識違いがあれば教えてください。

・書き込みに使うFX3のファームウェア(imgファイル)は1つだけにしたい(同じファームウェアを3つのFX3に書き込みたい)

・書き込みを行うホストアプリケーション(ソフト)は自社で開発される

・書き込みを行う際には接続されているどのFX3がどれかをホストアプリケーション側で認識したい

・書き込み後、デバイスマネージャー等で表示されるFX3の名前をそれぞれ見分けがつくようにしたい

あいにくですが、1つのimgファイルで異なる名称は定義できません。

デバイスインスタンスパスで固有の名称を表示するために、以下のようにファームウェアの変更をします。

以下の例では、SerialNumberを変更することで、デバイスインスタンスパス上に"FX3R"と表示します。AN75779に変更を加えることを前提としています。

1. cyfxuvcdscr.c (Device Descriptor, String Descriptor)の編集

/* Standard Device Descriptor */

const uint8_t CyFxUSBDeviceDscr[] =

    {

        0x12,                           /* Descriptor Size */

        CY_U3P_USB_DEVICE_DESCR,        /* Device Descriptor Type */

        0x10,0x02,                      /* USB 2.0 */

        0xEF,                           /* Device Class */

        0x02,                           /* Device Sub-class */

        0x01,                           /* Device protocol */

        0x40,                           /* Maxpacket size for EP0 : 64 bytes */

        0xB4,0x04,                      /* Vendor ID */

        0xF8,0x00,                      /* Product ID */

        0x00,0x00,                      /* Device release number */

        0x01,                           /* Manufacture string index */

        0x02,                           /* Product string index */

        0x03,                           /* Serial number string index */

        0x01                            /* Number of configurations */

    };

/* Device Descriptor for SS */

const uint8_t CyFxUSBDeviceDscrSS[] =

    {

        0x12,                           /* Descriptor Size */

        CY_U3P_USB_DEVICE_DESCR,        /* Device Descriptor Type */

        0x10,0x03,                      /* USB 3.10 */

        0xEF,                           /* Device Class */

        0x02,                           /* Device Sub-class */

        0x01,                           /* Device protocol */

        0x09,                           /* Maxpacket size for EP0 : 2^9 Bytes */

        0xB4,0x04,                      /* Vendor ID */

        0xF9,0x00,                      /* Product ID */

        0x00,0x00,                      /* Device release number */

        0x01,                           /* Manufacture string index */

        0x02,                           /* Product string index */

        0x03,                           /* Serial number string index */

        0x01                            /* Number of configurations */

    };

.....

String Descriptorの追加

const uint8_t CyFxUSBSerialNumberDscr[] =

{

    0x0A,                           /* Descriptor size */

    CY_U3P_USB_STRING_DESCR,        /* Device descriptor type */

    'F',0x00,

    'X',0x00,

    '3',0x00,

    'R',0x00

};

2. uvc.h (Header file)への追記
extern const uint8_t CyFxUSBSerialNumberDscr[]; /* Serial number descriptor*/

3. uvc.cでString Descriptorをセット

/* CyFxUVCApplnInit()内で以下を記述 */

CyU3PUsbSetDesc (CY_U3P_USB_SET_STRING_DESCR, 3, (uint8_t *)CyFxUSBSerialNumberDscr);

pastedImage_12.png

関連スレッドとして、CDC classでの編集ですが、以下のスレッドが参考になります。

CX3 UVC-CDC - Identifying the CDC COM port

ホストアプリケーション側でSerialNumberをベースに識別する際には"CyAPI.pdf / CyUSB.NET.pdf"のSerialNumberの項目等をご参照ください。

あとはMicrosoftのsetupapiなどが役立つかと思いますが、これについてはMicrosoftに聞いてください。

★USB VIDEO DEVICEと表示される件について

デバイスに関する情報のご提供ありがとうございます。

Friendly Nameの項目が空欄だったためにUSB VIDEO DEVICEと表示されたということですね。

Friendly Nameを適切に入れて解決された、ということでしょうか?

よろしくお願い致します。

Hirotaka Takayama

元の投稿で解決策を見る

0 件の賞賛
5 返答(返信)
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

状況確認のために、以下を教えてください。

USBビデオクラスとして表示されているFX3は、VIDとPIDはどのように表示されていますか?

ドライバは何がバインドされていますか?

pastedImage_0.png

pastedImage_2.png

多く情報をご提供いただければ解決が早くなります。

表示されているFX3がそれぞれどのFX3を指しているのか確認する方法についてですが、Serial numberを使用するのはいかがでしょうか。

Distinguishing Different FX3 Devices with Same VID/PID on Host Application – KBA225775

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛
lock attach
Attachments are accessible only for community members.

FX3で認識されるものとUSB VIDEO DEVICEで認識されるもののプロパティの情報を添付します。

他のスレッドでも書きましたが、基板上にUSBのHUBのICとCYUSB3014が3個基板上に載っています。

USB Boot Loaderでプログラムを書き込むのは問題ないのですが、3個のCYUSB3014が右、中央、左と

あるとして、PCアプリ側から右,中央,左が必ず認識できるようにする必要があります。

出来れば、一つのプログラムで認識を分ける方法はありますでしょうか?

0 件の賞賛

Serial numberを使用する場合、デバイスマネージャー等でどのように認識できるのでしょうか?

0 件の賞賛

カメラのプロパティを比べたら、USB VIDEO DEVICEと認識されているものだけ

フレンドリ名の項目が無い事がわかりました。

0 件の賞賛

★ファームウェアの書き込みに関して

以下の条件を満たしたいということでしょうか?認識違いがあれば教えてください。

・書き込みに使うFX3のファームウェア(imgファイル)は1つだけにしたい(同じファームウェアを3つのFX3に書き込みたい)

・書き込みを行うホストアプリケーション(ソフト)は自社で開発される

・書き込みを行う際には接続されているどのFX3がどれかをホストアプリケーション側で認識したい

・書き込み後、デバイスマネージャー等で表示されるFX3の名前をそれぞれ見分けがつくようにしたい

あいにくですが、1つのimgファイルで異なる名称は定義できません。

デバイスインスタンスパスで固有の名称を表示するために、以下のようにファームウェアの変更をします。

以下の例では、SerialNumberを変更することで、デバイスインスタンスパス上に"FX3R"と表示します。AN75779に変更を加えることを前提としています。

1. cyfxuvcdscr.c (Device Descriptor, String Descriptor)の編集

/* Standard Device Descriptor */

const uint8_t CyFxUSBDeviceDscr[] =

    {

        0x12,                           /* Descriptor Size */

        CY_U3P_USB_DEVICE_DESCR,        /* Device Descriptor Type */

        0x10,0x02,                      /* USB 2.0 */

        0xEF,                           /* Device Class */

        0x02,                           /* Device Sub-class */

        0x01,                           /* Device protocol */

        0x40,                           /* Maxpacket size for EP0 : 64 bytes */

        0xB4,0x04,                      /* Vendor ID */

        0xF8,0x00,                      /* Product ID */

        0x00,0x00,                      /* Device release number */

        0x01,                           /* Manufacture string index */

        0x02,                           /* Product string index */

        0x03,                           /* Serial number string index */

        0x01                            /* Number of configurations */

    };

/* Device Descriptor for SS */

const uint8_t CyFxUSBDeviceDscrSS[] =

    {

        0x12,                           /* Descriptor Size */

        CY_U3P_USB_DEVICE_DESCR,        /* Device Descriptor Type */

        0x10,0x03,                      /* USB 3.10 */

        0xEF,                           /* Device Class */

        0x02,                           /* Device Sub-class */

        0x01,                           /* Device protocol */

        0x09,                           /* Maxpacket size for EP0 : 2^9 Bytes */

        0xB4,0x04,                      /* Vendor ID */

        0xF9,0x00,                      /* Product ID */

        0x00,0x00,                      /* Device release number */

        0x01,                           /* Manufacture string index */

        0x02,                           /* Product string index */

        0x03,                           /* Serial number string index */

        0x01                            /* Number of configurations */

    };

.....

String Descriptorの追加

const uint8_t CyFxUSBSerialNumberDscr[] =

{

    0x0A,                           /* Descriptor size */

    CY_U3P_USB_STRING_DESCR,        /* Device descriptor type */

    'F',0x00,

    'X',0x00,

    '3',0x00,

    'R',0x00

};

2. uvc.h (Header file)への追記
extern const uint8_t CyFxUSBSerialNumberDscr[]; /* Serial number descriptor*/

3. uvc.cでString Descriptorをセット

/* CyFxUVCApplnInit()内で以下を記述 */

CyU3PUsbSetDesc (CY_U3P_USB_SET_STRING_DESCR, 3, (uint8_t *)CyFxUSBSerialNumberDscr);

pastedImage_12.png

関連スレッドとして、CDC classでの編集ですが、以下のスレッドが参考になります。

CX3 UVC-CDC - Identifying the CDC COM port

ホストアプリケーション側でSerialNumberをベースに識別する際には"CyAPI.pdf / CyUSB.NET.pdf"のSerialNumberの項目等をご参照ください。

あとはMicrosoftのsetupapiなどが役立つかと思いますが、これについてはMicrosoftに聞いてください。

★USB VIDEO DEVICEと表示される件について

デバイスに関する情報のご提供ありがとうございます。

Friendly Nameの項目が空欄だったためにUSB VIDEO DEVICEと表示されたということですね。

Friendly Nameを適切に入れて解決された、ということでしょうか?

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛