Перейти к содержанию
    

USB устройство, состоящее из 2-х виртуальных COM-портов

Всем привет!

 

Пытаюсь реализовать 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обязательно.

 

 

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

 

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

 

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

 

Сделал даже 3 устройства в одном (Audio + 2 COM). Ставлю на них дрова и все работает. Только для CDC устройств использую не usbser.sys, а другой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...