J_Aleks 0 14 апреля, 2020 Опубликовано 14 апреля, 2020 (изменено) · Жалоба Прошу помощи у вселенского разума... суть проблемы... есть отладочная плата, STM32F746ZG + модуль расширения USB3300, задача получить максимально возможную скорость обмена с PC... желательно, точка отправления: проект на CubeMX, какой нибудь CASTOM HID поправленый в нужную сторону, с одной стороны, ну пусть работает как эхо, что нибудь принял, это же выплюнул... другой стороны что нибудь простенькое например на QT, либа libusb, шлем килограмм байтов в эндпойнт, читаем этот же килограм в ответ, ну пусть количество килограмм за секунду... Цель, максимально приблизиться к аппаратной скорости порта в 480 МГЦ... На просторах инета рабочих макетов такой пары не обнаружил, везде только проэкты с мышами и джойстиками в FS моде... да расплывчатые рассуждения, из категории, вот я вчера пытал контроллер с USB... Короче, если не жалко, выложите такой рабочий тестовый макет, или ткните носом в практическую реализацию... а то уже моск расплавился, обмен получается забавно плавающих результатах от 500 килобит до 50-60 мегабит, причем непредсказуемо... да и увековечитесь в анналах... Изменено 14 апреля, 2020 пользователем J_Aleks Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 15 апреля, 2020 Опубликовано 15 апреля, 2020 · Жалоба CASTOM HID - однозначно в помойку. Берете какой либо готовый пример mass storage device, и меняете идентификаторы чтобы получилось custom устройство. На сколько я помню, достаточно класс устройства поменять на 0xFF. Затем скачивается libusb с примерами. При подключенном устройстве "натравливаем libusb" на наше устройство что-бы получить inf. http://www.gaw.ru/html.cgi/txt/interface/usb/instr/6.htm Quote При подключении USB устройства Windows попросит драйвер, выдать ей файл INF , который заранее заготовили для этого устройства. В составе пакета поставляется нехитрый мастер, с помощью которого, легко создать требуемый INF файл. Теперь осталось написать приложение, чтобы получать, отдавать данные. Для максимальной скорости нужно использовать блоки обмена по 64К. По моему начиная с Windows XP, такие блоки поддерживаются. Если все заработает, но немного не хватит скорости, тогда придется читать о перекрывающихся операциях ввода/вывода в windows. Ну и при максимальных объемах прокачки, главное окно приложения будет "замерзать" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
J_Aleks 0 16 апреля, 2020 Опубликовано 16 апреля, 2020 · Жалоба 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 сказал: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 16 апреля, 2020 Опубликовано 16 апреля, 2020 · Жалоба Для скорости нужен bulk, для HS размер точки 512 Убираем стандартный класс (0xFF туда), просто 2 точки - IN и OUT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 16 апреля, 2020 Опубликовано 16 апреля, 2020 · Жалоба 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-ы и иже с ними можно удалять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
J_Aleks 0 16 апреля, 2020 Опубликовано 16 апреля, 2020 (изменено) · Жалоба Ну в 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-ы и иже с ними можно удалять.... Изменено 16 апреля, 2020 пользователем J_Aleks Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
J_Aleks 0 16 апреля, 2020 Опубликовано 16 апреля, 2020 · Жалоба да, 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 16 апреля, 2020 Опубликовано 16 апреля, 2020 · Жалоба Ну да, вроде ок Теперь просто на попробовать - гонять данные из точки в точку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться