Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB устройство, состоящее из 2-х виртуальных COM-портов
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
ArkZel
Всем привет!

Пытаюсь реализовать USB - устройство которое в Windows будет представляться как 2-COM порта.

Один COM - порт реализовал, драйвер использовал стандартный usbser.sys.
Дескрипторы при этом следующие:

Код
DeviceDescriptor CDC1_HS_Device_Descriptor[] =
{
    18,
    0x01,
    USB_VERSION_20,
    0x02,
    0x00,
    0x00,
    0x40,
    0xABCD,
    0xABCD,
    USB_RELEASE_NUMBER,
    0,
    0,
    0,
    0x01
};

ConfigurationDescriptor    CDC1_Standard_Config_Descriptor[] =
{
    9,
    0x02,
    0x43,
    0x02,
    0x01,
    0x00,
    0x40,
    250
};

InterfaceDescriptor CDC1_HS_Default_Interface_COM_Descriptor[] =        //communication interface
{
    9,
    0x04,
    0x00,
    0x00,
    0x01,
    0x02,
    0x02,
    0x01,
    0x00
};

InterfaceDescriptor CDC1_HS_Default_Interface_DATA_Descriptor[] =        //data interface
{
    9,
    0x04,
    0x01,
    0x00,
    0x02,
    0x0A,
    0x00,
    0x00,
    0x00
};

CDCFunctionalDescriptor CDC1_Heder_Functional_Descriptor[] =            //heder functional descriptor
{
    0x05,
    0x24,
    0x00,
    0x00,
    0x02
};

CDCFunctionalDescriptor CDC1_Call_Management_Descriptor[] =             //call management descriptor
{
    0x05,
    0x24,
    0x01,
    0x03,
    0x01
};

CDCFunctionalDescriptor CDC1_Abstract_Control_Management_Descriptor[] =             //abstract control management descriptor
{
    0x04,
    0х24,
    0x02,
    0x06,
};

CDCFunctionalDescriptor CDC1_Union_Interface_Functional_Descriptor[] =                 //union interface functional descriptor
{
    0x05,
    0х24,
    0x06,
    0x00,
    0x01
};

EndpointDescriptor CDC1_HS_Interrupt_In2_Descriptor[] =
{
    7,
    USB_ENDPOINT_DESCRIPTOR_TYPE,
    0x82,
    0x03,
    0x0020,
    0x02
};

EndpointDescriptor CDC1_HS_Bulk_Out4_Descriptor[] =
{
    7,
    USB_ENDPOINT_DESCRIPTOR_TYPE,
    0x04,
    0x02,
    0x0020,
    0x00
};

EndpointDescriptor CDC1_HS_Bulk_In4_Descriptor[] =
{
    7,
    USB_ENDPOINT_DESCRIPTOR_TYPE,
    0x84,
    0x02,
    0x0020,
    0x00
};


Конфигурацию отправляю в следующем порядке:

CDC1_Standard_Config_Descriptor[], //9-байт
CDC1_HS_Default_Interface_COM_Descriptor[], //9-байт
CDC1_Heder_Functional_Descriptor[] //5-байт
CDC1_Call_Management_Descriptor[] //5-байт
CDC1_Abstract_Control_Management_Descriptor[] //4-байт
CDC1_Union_Interface_Functional_Descriptor[] //5-байт
CDC1_HS_Interrupt_In2_Descriptor[] //7-байт
CDC1_HS_Default_Interface_DATA_Descriptor[] //9-байт
CDC1_HS_Bulk_Out4_Descriptor[] //7-байт
CDC1_HS_Bulk_In4_Descriptor[] //7-байт

Устанавливаю драйвер и все работает.

Для 2-х COM-портов:
Конфигурацию отправляю в следующем порядке:

CDC1_Standard_Config_Descriptor[], //9-байт
CDC1_HS_Default_Interface_COM_Descriptor[], //9-байт
CDC1_Heder_Functional_Descriptor[] //5-байт
CDC1_Call_Management_Descriptor[] //5-байт
CDC1_Abstract_Control_Management_Descriptor[] //4-байт
CDC1_Union_Interface_Functional_Descriptor[] //5-байт
CDC1_HS_Interrupt_In2_Descriptor[] //7-байт
CDC1_HS_Default_Interface_DATA_Descriptor[] //9-байт
CDC1_HS_Bulk_Out4_Descriptor[] //7-байт
CDC1_HS_Bulk_In4_Descriptor[] //7-байт

CDC2_HS_Default_Interface_COM_Descriptor[], //9-байт
CDC2_Heder_Functional_Descriptor[] //5-байт
CDC2_Call_Management_Descriptor[] //5-байт
CDC2_Abstract_Control_Management_Descriptor[] //4-байт
CDC2_Union_Interface_Functional_Descriptor[] //5-байт
CDC2_HS_Interrupt_In2_Descriptor[] //7-байт
CDC2_HS_Default_Interface_DATA_Descriptor[] //9-байт
CDC2_HS_Bulk_Out4_Descriptor[] //7-байт
CDC2_HS_Bulk_In4_Descriptor[] //7-байт

Теперь используется 4-е интерфейса.
Появляется устройство только драйвер на него поставить не удается.

В каком порядке нужно передавать дескрипторы для 2-х COM - портов?
Сколько интерфейсов при этом используется?
Нужно ли использовать IAD?
Седой
Цитата(ArkZel @ Apr 1 2009, 12:52) *
Нужно ли использовать IAD?


Обязательно.
ArkZel
Цитата(Седой @ Apr 2 2009, 12:57) *
Обязательно.



Поискал немного в инете и нашел очень полезную ссылку:

http://www.microchip.com/forums/tm.aspx?m=...p;\#223235

Сделал все как там говорится. И все заработало.

Сделал даже 3 устройства в одном (Audio + 2 COM). Ставлю на них дрова и все работает. Только для CDC устройств использую не usbser.sys, а другой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.