Например TDA7294

Форум РадиоКот • Просмотр темы - Generic Usb Hid Device На Stm32F4Discovery
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт ноя 18, 2025 09:15:18

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Generic Usb Hid Device На Stm32F4Discovery
СообщениеДобавлено: Ср янв 16, 2013 22:17:47 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт июл 14, 2009 09:27:37
Сообщений: 132
Откуда: Донецк, Украина
Рейтинг сообщения: 0
Привет всем .

Озаботился тут созданием 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 кинуть, ничего военного в нём пока нет :))


Последний раз редактировалось hd44780 Чт янв 17, 2013 15:16:43, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Generic Usb Hid Device На Stm32F4Discovery
СообщениеДобавлено: Ср янв 16, 2013 22:46:13 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А примеры от производителя смотрели? Там много чего интересного было.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Generic Usb Hid Device На Stm32F4Discovery
СообщениеДобавлено: Чт янв 17, 2013 08:03:49 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт июл 14, 2009 09:27:37
Сообщений: 132
Откуда: Донецк, Украина
Рейтинг сообщения: 0
Да нет там ничего :( ....
Есть другая библиотека, AN3128, архив к ней называется stm32_f105-07_f2_f4_usb-host-device_lib.zip, там из HID только долбаный джойстик ...

Вот тут, для проца STM32F103 есть та либа с 2-байтовыми посылками для мигания лампочками, из которой всё и идёт.
Называется "STM32F10x and STM32L1xx USB full-speed device library" :)) . Другого я пока не нашёл.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y