| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Generic Usb Hid Device На Stm32F4Discovery https://radiokot.ru/forum/viewtopic.php?f=59&t=83598 |
Страница 1 из 1 |
| Автор: | hd44780 [ Ср янв 16, 2013 22:17:47 ] |
| Заголовок сообщения: | Generic Usb Hid Device На Stm32F4Discovery |
Привет всем . Озаботился тут созданием USB HID устройства на данном проце. Находил с интернете массу примеров HID устройств, эмулирующих джойстики, мыши, клавиатуры, пульты ДУ и прочую дребедень... Но мне не нужны все эти клавиатуры, джойстики и пульты .... Нужно Generic устройство - принять от компа 64 байта, отправить в комп 64 байта. И всё. Такой пример я нашёл только один - http://we.easyelectronics.ru/STM32/prim ... covey.html , как пишет автор, на основе примера от более младших STM32. Этот пример включает/выключает светодиодики платы по команде с компа и шлёт в комп данные, когда нажимают кнопку. Это работает. Но у него размер и входящего и исходящего блока данных - 2 байта вместо доступных 64 (видимо автор память экономит, ему почти 200 кил RAM этого камня мало ) - форменное издевательство короче . Решил я его пример переделать. Поменял VID, PID, чтобы моя прога его увидела, нашёл дескриптор конфигурации, исправил 2 макроса, описывающих размеры конечных точек, прошил. Работоспособность лампочек и кнопки не нарушилась, моя прога ими исправно управляет, на кнопку реагирует, но чтение свойств устройства показывает InputReportByteLength=OutputReportByteLength=2, т.е. размер репортов не изменился. Нашёл я HID дескриптор, изменил его. Убрал описания кнопок, лампочек, оставил только описания входного и выходного репортов. Получилось следующее: Код: #define CUSTOMHID_SIZ_REPORT_DESC 32 ........................ __ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END = { // Global Usage Page - Vendor-defined 0x06, 0xFF, 0x00, // USAGE_PAGE (0xFF00) // Collection: Application 0x09, 0xFF, // USAGE (vendor defined) 0xA1, 0x01, // COLLECTION (Application) // Input report: Vendor-defined 0x09, 0xFF, // USAGE (vendor defined) 0x95, HID_IN_PACKET, // REPORT_COUNT = 64 - Размер конечной точки 0x75, 8, // REPORT_SIZE = 8 0x15, (unsigned char) -128, // 0x15, 0x25, (unsigned char) 127, // 0x25, 0x81, 0, // Output report: vendor-defined 0x09, 0xFF, // USAGE (vendor defined) 0x95, HID_OUT_PACKET, // REPORT_COUNT = 64 - Размер конечной точки 0x75, 8, // REPORT_SIZE = 8 0x15, (unsigned char) -128, // 0x15 0x25, (unsigned char) 127, // 0x25 0x91, 0, // Input 0xC0 // End collection }; // CustomHID_ReportDescriptor Устройство опознаётся, винда не ругается, но чтение свойств даёт InputReportByteLength=OutputReportByteLength=65 (!) и все попытки что-либо послать в железяку даёт ошибку 87 - Invalid Parameter. Хоть и шлю я ему 2 байта ... На чтении тупо виснет без каких-либо ошибок. Прогу приходится диспетчером задач вырубать. Сильно подозреваю, что западло заключено в этих 65 байтах и сидит оно в HID дескрипторе, но не пойму что именно там не так. Сам по себе HID дескриптор вроде правильный, на древнейшем AT91SAM7S256 2006 года выпуска работает с песнями . Помогите пожалуйста, кто может. Спасибо. ЗЫ. Утилиту HID Descriptor Tool 13-летней давности видел, знаю, но вот никак за эти 13 лет не врублюсь, что там к чему. То ли я идиот, то ли писали её идиоты . К тому же вылетает она с какими-то сбоями типа "Can't read memory at address 0x00000000" .... Можно, конечно, сделать CDC, проэмулировать COM-порт (кстати делал, работает ), это может и лучше с т.з. быстродействия, (всё-таки bulk-передачи, а не Control) но не хочется, чтобы железка торчала в списке портов. Если надо, могу весь проект под IAR кинуть, ничего военного в нём пока нет |
|
| Автор: | ploop [ Ср янв 16, 2013 22:46:13 ] |
| Заголовок сообщения: | Re: Generic Usb Hid Device На Stm32F4Discovery |
А примеры от производителя смотрели? Там много чего интересного было. |
|
| Автор: | hd44780 [ Чт янв 17, 2013 08:03:49 ] |
| Заголовок сообщения: | Re: Generic Usb Hid Device На Stm32F4Discovery |
Да нет там ничего Есть другая библиотека, AN3128, архив к ней называется stm32_f105-07_f2_f4_usb-host-device_lib.zip, там из HID только долбаный джойстик ... Вот тут, для проца STM32F103 есть та либа с 2-байтовыми посылками для мигания лампочками, из которой всё и идёт. Называется "STM32F10x and STM32L1xx USB full-speed device library" |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


