This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

USB: Multiple IADs in composite device?

Hi,

I would like to be able to construct composite USB device encapsulating N serial ports. Having used CDC/ACM class and some examples from Keil (Keil\ARM\Boards\Keil\MCB2300\USBCDC) for LPC2386 adopted to my target board, it is not a problem to have one port app working.

Also after updating the descriptor to associate Comm and Data classes into single IAD the device still seems to work ok (WinXP SP3, usbser.sys 5.1.2600.5512, uspccgp 5.1.2600.5585).

When I duplicate whole IAD section once more in the config, the device still operates and two IADs are recognized (USBlyzer SW), but only one serial port instance is created.

Is there a need to update also the .inf file (Keil\ARM\Boards\Keil\MCB2300\USBCDC\mcb2300-vcom.inf) to be able to "install multiple drivers" for each function?
Regarding one of sources, I appended an MI_00, MI_01 to items on [DeviceList], cleared the device manager, replugged the device, but windows refuses "updated" inf.

Maybe wrong descriptors, maybe wrong inf (any resources to get oriented in this magic?), maybe both.

Any help/advice/tips appreciated.
Thanks.

Resources I used:
www.usb.org/.../viewtopic.php
www.usb.org/.../viewtopic.php
www.cygnal.org/.../001050.html
www.cygnal.org/.../001572.html
www.techtalkz.com/.../265030-implementing-multiple-cdcs.html

  • "Regarding one of sources, I appended an MI_00, MI_01 to items on [DeviceList], cleared the device manager, replugged the device, but windows refuses "updated" inf."

    The second interface is MI_02, instead of MI_01.
    It matches to the interface number of Communication Class interface of each unit.

    [DeviceList]
    %DESCRIPTION% = MCB2300USB, USB\VID_vvvv&PID_pppp&MI_00, USB\VID_vvvv&PID_pppp&MI_02

    Tsuneo

  • Delete the device instance(s) of the VID/PID on Device Manager, when you change
    - device descriptor and/or configuration desc set on the firmware
    - INF file

    USBDeview is a helpful to delete (uninstall) the device instances.

    USBDeview
    www.nirsoft.net/.../usb_devices_view.html

    You may need to delete the copy of old INF file.
    The INF file is copied to C:\Windows\inf folder, which is invisible (hidden) as the default.

    - Make this inf folder visible using Toos > folder options, display tab - "display all files and folders".
    Copied INF file is renamed to oemNNN.inf (NNN = number) in this folder

    - Search the contents of *.inf files for the VID/PID
    grep or Windows buit-in "Search" will do this work.

    - Delete oemNNN.inf and oemNNN.pnf pair, which has the VID/PID

    Tsuneo

  • Tsuneo,

    thanks for quick responses and patience answering the same things again and again. Also I would like to thank you for all your posts/examples/etc. in different forums. Very helpfull stuff. I noticed lot of people still search for multiple virtual COM info, so if you would consider this as an another subject for one of your examples, I think many people would appreciate it.

    Meanwhile in the continuous process of research and trying, I have found few bugs in descriptors (e.g. had 0xfe instead of 0xef for MISC class, forgot update total number of interfaces, ...).

    Also found on some forum the MI_xx stands for multiple interface and thus the number is interface number. So now looks like the Windows determines the right device (composite one instead of single CDC) and "installs" drivers per function. Your example .inf file (from CDC/IAD & HID composite) helped me alot.

    Regards Pavel