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

USB HS максимальная скорость обмена

Прошу помощи у вселенского разума...

суть проблемы...

есть отладочная плата, STM32F746ZG + модуль расширения USB3300, задача получить максимально возможную скорость обмена с PC...

желательно, точка отправления: проект на CubeMX, какой нибудь CASTOM HID поправленый в нужную сторону, с одной стороны, ну пусть работает как эхо,

что нибудь принял, это же выплюнул... другой стороны что нибудь простенькое например на QT, либа libusb, шлем килограмм байтов в эндпойнт, читаем этот же килограм в ответ, ну пусть количество килограмм за секунду...

Цель, максимально приблизиться к аппаратной скорости порта в 480 МГЦ...

На просторах инета рабочих макетов такой пары не обнаружил, везде только проэкты с мышами и джойстиками в FS моде... да расплывчатые рассуждения, из категории, вот я вчера пытал контроллер с USB...

Короче, если не жалко, выложите такой рабочий тестовый макет, или ткните носом в практическую реализацию...

а то уже моск расплавился, обмен получается забавно плавающих результатах от 500 килобит до 50-60 мегабит, причем непредсказуемо...

да и увековечитесь в анналах...

 

Изменено пользователем J_Aleks

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


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

CASTOM HID - однозначно в помойку.

Берете какой либо готовый пример mass storage device, и меняете идентификаторы чтобы получилось custom устройство.

На сколько я помню, достаточно класс устройства поменять на 0xFF.

Затем скачивается libusb с примерами.

При подключенном устройстве "натравливаем libusb" на наше устройство что-бы получить inf.

http://www.gaw.ru/html.cgi/txt/interface/usb/instr/6.htm

Quote

Теперь осталось написать приложение, чтобы получать, отдавать данные.

Для максимальной скорости нужно использовать блоки обмена по 64К. По моему начиная с Windows XP, такие блоки поддерживаются.

Если все заработает, но немного не хватит скорости, тогда придется читать о перекрывающихся операциях ввода/вывода в windows.

Ну и при максимальных объемах прокачки, главное окно приложения будет "замерзать"

 

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


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

20 часов назад, misyachniy сказал:

......CASTOM HID - однозначно в помойку......

Возможно...

По идее то, правильный дескриптор и репорт... а кастом или не кастом по барабану... (к тому же после всех насилий над ним, он уже давно не кастом...)

НО вероятны тонкости неведомые... и поэтому обмен не разгоняется...

с клиентской то стороны, с libusb проблем то нет, я в никсах сижу... там все с коробки так сказать работает...

А вот в контроллере...

В частности, например в всеми растиражированном Report Descriptor-е

  /* USER CODE BEGIN 1 */
        0x06, 0x00, 0xff,              //     USAGE_PAGE (Generic Desktop)
        0x09, 0x01,                    //     USAGE (Vendor Usage 1)
        0xa1, 0x01,                    //     COLLECTION (Application)
        //7
        0x85, 0x01,                    //   REPORT_ID (1)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, CUSTOM_HID_EPIN_SIZE,

        0xb1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
        //21
        0x85, 0x01,                    //   REPORT_ID (1)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
        //27
        0x85, 0x02,                    //   REPORT_ID (4)
        0x09, 0x02,                    //   USAGE (Vendor Usage 4)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, CUSTOM_HID_EPIN_SIZE,

        0x81, 0x82,                    //   INPUT (Data,Var,Abs,Vol)
        //37
  /* USER CODE END 1 */
   0xC0    /*     END_COLLECTION             */

0x95, CUSTOM_HID_EPIN_SIZE

допустим - CUSTOM_HID_EPIN_SIZE = 64

это что, ассоциация с длиной посылки, или 64 блока по 64 байта...

и таких нюансов судя по всему хватает..., и что за что цепляется не совсем понятно...

Вот и интересен рабочий макет для перегона данных на макс. скорости...

почему в КУБ не засунули такой примитив непонятно...но там своя глубина мысли...

и самое гадкое, что на прсторах сети подобные макеты необнаруживаются, или искал не там...

20 часов назад, misyachniy сказал:
 

 

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


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

Для скорости нужен bulk, для HS размер точки 512

Убираем стандартный класс (0xFF туда), просто 2 точки - IN и OUT

 

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


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

2 hours ago, J_Aleks said:

0x95, CUSTOM_HID_EPIN_SIZE

допустим - CUSTOM_HID_EPIN_SIZE = 64

это что, ассоциация с длиной посылки, или 64 блока по 64 байта...

Еще раз
 

Quote

 

USB HID (human interface device) class — класс устройств USB для взаимодействия с человеком. Этот класс включает в себя такие устройства как клавиатура, мышь, игровой контроллер.

Помимо детальных спецификаций классических устройств ввода (типа клавиатур и мышек) стандарт HID определяет особый класс устройств без детальных спецификаций. Этот класс именуется USB HID Consumer Control и представляет по сути нерегламентированный канал связи с устройством. При этом устройство пользуется теми же стандартными для операционной системы драйверами что и мышка с клавиатурой. Таким образом можно создать USB устройство которое не требует создания и инсталляции специальных драйверов в большинстве распространенных компьютерных операционных систем.

 

У вас низкоскоростное устройство типа мыши или клавиатуры, но со специфическим протоколом, точнее интерпретацией данных.

Тут описан ваш базовый класс УСТРОЙСТВА в целом

https://www.usb.org/defined-class-codes

 

03h        Interface  HID (Human Interface Device)

HID подразумевает опрос по прерывания до 1000 раз в секунду размером CUSTOM_HID_EPIN_SIZE,  что и дает максимальный размер передаваемых данных в 64кБ.

А нужен класс FFh  Vendor Specific.

toweroff - все правильно уточнил.

P.S. После настройки bulk обмена, все Report Descriptor-ы и иже с ними можно удалять

 

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


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

Ну в HS дескрипторе я сразу поменял:

/* USB CUSTOM_HID device HS Configuration Descriptor */
__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgHSDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END =
{
  0x09,                                                                                     /* bLength: Configuration Descriptor size */
  USB_DESC_TYPE_CONFIGURATION,             //0x02        /* bDescriptorType: Configuration */
  USB_CUSTOM_HID_CONFIG_DESC_SIZ,       //0x41
                                                                                                 /* wTotalLength: Bytes returned */
  0x00,
  0x01,                                                                   /* bNumInterfaces: 1 interface */
  0x01,                                                                   /* bConfigurationValue: Configuration value */
  0x00,                                                                   /* iConfiguration: Index of string descriptor describing the configuration */
  0xC0,                                                                  /* bmAttributes: bus powered */
  0x32,                                                                  /* MaxPower 100 mA: this current is used for detecting Vbus */

  /************** Descriptor of CUSTOM HID interface ****************/
  /* 09 */
  0x09,                                                                                /* bLength: Interface Descriptor size */
  USB_DESC_TYPE_INTERFACE,                 //0x04        /* bDescriptorType: Interface descriptor type */
  0x00,                                               /* bInterfaceNumber: Number of Interface */
  0x00,                                               /* bAlternateSetting: Alternate setting */
  0x02,                                               /* bNumEndpoints */
  0xFF,                                               /* bInterfaceClass: CUSTOM_HID */
  0xFF,                                               /* bInterfaceSubClass : 1=BOOT, 0=no boot */
  0xFF,                                               /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
  0,                                                  /* iInterface: Index of string descriptor */
  /******************** Descriptor of CUSTOM_HID *************************/
  /* 18 */
  0x09,                                                                                   /* bLength: CUSTOM_HID Descriptor size */
  CUSTOM_HID_DESCRIPTOR_TYPE,            //0x21        /* bDescriptorType: CUSTOM_HID */
  0x11,                                                                                  /* bCUSTOM_HIDUSTOM_HID: CUSTOM_HID Class Spec release number */
  0x01,
  0x00,                                               /* bCountryCode: Hardware target country */
  0x01,                                               /* bNumDescriptors: Number of CUSTOM_HID class descriptors to follow */
  0x22,                                                                                           /* bDescriptorType */
  USBD_CUSTOM_HID_REPORT_DESC_SIZE,        //38          /* wItemLength: Total length of Report descriptor */
  0x00,
  /******************** Descriptor of Custom HID endpoints ********************/
  /* 27 */
  0x07,                                                                               /* bLength: Endpoint Descriptor size */
  USB_DESC_TYPE_ENDPOINT,                 //0x05         /* bDescriptorType: */

  CUSTOM_HID_EPIN_ADDR,                    //0x81         /* bEndpointAddress: Endpoint Address (IN) */
  0x02,                                                                             /* bmAttributes: bulk
  0x00,                                                                             /* wMaxPacketSize: 2 Byte max */
  0x02,
  CUSTOM_HID_HS_BINTERVAL,                //0x00        /* bInterval: Polling Interval */
  /* 34 */

  0x07,                                                                               /* bLength: Endpoint Descriptor size */
  USB_DESC_TYPE_ENDPOINT,                 //0x05        /* bDescriptorType: */
  CUSTOM_HID_EPOUT_ADDR,                 //0x01        /* bEndpointAddress: Endpoint Address (OUT) */
  0x02,                                                                             /* bmAttributes: bulk
  0x00,                                                                             /* wMaxPacketSize: 2 Bytes max  */
  0x02,
  CUSTOM_HID_HS_BINTERVAL,                 //0x00        /* bInterval: Polling Interval */
  /* 41 */
};

неясно, накой секция с /* 18 */ , вроде выбивается из общего строя, но пробовал исключать, ни на что не влияло...

и обмен булками тоже сразу поставил...

Report я уже показывал:

  /* USER CODE BEGIN 1 */
        0x06, 0x00, 0xff,              //     USAGE_PAGE (Generic Desktop)
        0x09, 0x01,                    //     USAGE (Vendor Usage 1)
        0xa1, 0x01,                    //     COLLECTION (Application)
        //7
        0x85, 0x01,                    //   REPORT_ID (1)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, CUSTOM_HID_EPIN_SIZE,    //   REPORT_COUNT (4)

        0xb1, 0x82,                    //   FEATURE (Data,Var,Abs,Vol)
        //21
        0x85, 0x01,                    //   REPORT_ID (1)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x91, 0x82,                    //   OUTPUT (Data,Var,Abs,Vol)
        //27
        0x85, 0x02,                    //   REPORT_ID (4)
        0x09, 0x02,                    //   USAGE (Vendor Usage 4)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, CUSTOM_HID_EPIN_SIZE,    //   REPORT_COUNT (4)

        0x81, 0x82,                    //   INPUT (Data,Var,Abs,Vol)
        //37
  /* USER CODE END 1 */
   0xC0    /*     END_COLLECTION             */

 

В общем пребываю в не понятках..., вроде все вылизал... но тупит,

P/S сорри за форматирование, что то оно при вставке развалилось...(

 

P/S/S

а вот коммент расшифруйте плис

......P.S. После настройки bulk обмена, все Report Descriptor-ы и иже с ними можно удалять....

 

Изменено пользователем J_Aleks

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


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

да, report можно пристрелить... и без него ловится интерфейс...

вот usbview что кажет:

TM32 Custom Human interface
Manufacturer: STMicroelectronics
Serial Number: 326239533535
Speed: 480Mb/s (high)
Bus:   1
Address:  45
USB Version:  2.00
Device Class: 00(>ifc )
Device Subclass: 00
Device Protocol: 00
Maximum Default Endpoint Size: 64
Number of Configurations: 1
Vendor Id: 0483
Product Id: 5750
Revision Number:  2.00

Config Number: 1
    Number of Interfaces: 1
    Attributes: c0
    MaxPower Needed: 100mA

    Interface Number: 0
        Name: (none)
        Alternate Number: 0
        Class: ff(vend.)
        Sub Class: ff
        Protocol: ff
        Number of Endpoints: 2

            Endpoint Address: 81
            Direction: in
            Attribute: 2
            Type: Bulk
            Max Packet Size: 512
            Interval: 0ms

            Endpoint Address: 01
            Direction: out
            Attribute: 2
            Type: Bulk
            Max Packet Size: 512
            Interval: 0ms

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


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

Ну да, вроде ок

Теперь просто на попробовать - гонять данные из точки в точку

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


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

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

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

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

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

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

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

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

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

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