реклама на сайте
подробности

 
 
> WinUSB
nalale
сообщение Oct 23 2014, 07:56
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 23-10-14
Из: Санкт-Петербург
Пользователь №: 83 306



В качестве драйвера для USB устройства на МК пытаюсь использовать стандартный WinUSB. Для этой цели помимо стандартных USB-дескрипторов Microsoft требует от устройства специальных дескрипторов, для распознавания того что данное устройство работает с WinUSB - OS String Descriptor и OS Feature Descriptors.

Но, если в дескрипторе интерфейса указывать класс интерфейса (bInterfaceClass) 0xFF (определяется производителем, что и нужно в случае WinUSB), то после запроса дескриптора конфигурации устройство определяется как неизвестное и не подает признаков жизни, хотя, как я понимаю дальше должен следовать запрос о строковом дескрипторе OS String Descriptor.

Т.е последовательность запросов такая -
1 - GET_DESCRIPTOR(device)
2 - SET_ADDRESS
3 - GET_DESCRIPTOR(device)
4 - GET_DESCRIPTOR(configuration)

Дескриптор Устройства -

Код
static uint8_t Usb_Device_Descriptor[0x12] =
{
    0x12,            /* bLength                  */
    0x01,            /* bDescriptorType (Device) */
    0x00, 0x02,      /* bcdUSB                   */
    0x00,            /* bDeviceClass        */
    0x00,            /* bDeviceSubClass          */
    0x00,            /* bDeviceProtocol          */
    MAX_PACKET_SIZE, /* bMaxPacketSize0          */
    0xc4, 0x10,      /* idVendor                 */
    0x47, 0x88,      /* idProduct                */
    0x00, 0x01,      /* bcdDevice                */
    0x00,            /* iManufacturer            */
    0x00,            /* iProduct                 */
    0x00,            /* iSerialNumber            */
    0x01             /* bNumConfigurations       */
};


Вот кусок дескриптора конфигурации, который описывает интерфейс, описание EndPoint опустил.

Код
static uint8_t Usb_Configuration_Descriptor[0x20] =
{    
/* Configuration Descriptor */
    0x09,                /* bLength                         */
    0x02,                /* bDescriptorType (Configuration) */
    0x20, 0x00,          /* wTotalLength                    */
    0x01,                /* bNumInterfaces                  */
    0x01,                /* bConfigurationValue             */
    0x00,                /* iConfiguration                  */
    USB_POWER_ATTIBUTES,,                /* bmAttributes                    */
    0x32,                /* bMaxPower (100 mA)              */

    /* Interface Descriptor */
    0x09, /* bLength                                         */
    0x04, /* bDescriptorType (Interface)                     */
    0x00, /* bInterfaceNumber                                */
    0x00, /* bAlternateSetting                               */
    0x01, /* bNumEndpoints                                   */
    0xFF, /* bInterfaceClass (Vendor)               */
    0x00, /* bInterfaceSubClass                            */
    0x00, /* bInterfaceProtocol                           */
    0x00, /* iInterface                                     */  
....
....

Если описывать устройство как CDC то все работает хорошо, а вот с WinUsb не получается. В чем ошибка?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016