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

    

STM32 USB HID Host

Делаю USB HID host на STM32F105. Не вижу в описании хоста никаких аппаратных средств для формирования периодических IN запросов на чтение эндпойнтов.

Надо самому заводить таймер чтобы делать запросы через интервалы указанные в дескрипторе устройства?

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


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

Делал на Ф105 USB мышу, всё пашет, ни в какие дебри с эндпоинтами и прочим не лез.

Но есть один значительный нюанс. Функцию USB_HostProcess обязательно вызывать не реже того периода, который задан в дескрипторах мыши. Типовая величина этого периода - 10 мс. Проще говоря, Вы обязаны дёргать эту функцию не реже одного раза в 10 мс. Можно чаще. Иначе драйвер класса будет отбраковывать приходящие пакеты. Я пробовал убрать отбраковку - курсор мыши прыгает, как пьяный заяц по дороге.

Возможно именно это Вы и имели в виду.

USB_HostProcess можно вызывать и в таймере (проверял на ф439, должно и на ф105 работать), но лично мне этот способ не нравится. Почему - не знаю. Просто не нравится.

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


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

Да именно это я имел ввиду. USB_HostProcess  вызывается в бесконечном цикле без всяких пауз. В итоге USB шина забита под завязку бесполезными данными. 

Раньше уже делал USB host на F4 на чистых булках, как-то легче там все пошло. C HID оказывается немало заморочек. Еще и клавы с USB хостами бывают. К тем пока даже не знаю как подступиться. Мышки почему-то заработали сразу, клавы работать не хотят, к тому же большинство проводных похоже на low speed работают. Пока разбираюсь с логическим анализатором. 

STM постоянно просит данные из нулевого эндпойнта, а винда читает из первого, что собственно и написано в дескрипторе. Возможно это связано с режим работы bios mode или boot mode. Не помню как правильно. Пока еще каша в голове.

 

А что за отбраковку вы имеете ввиду?

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


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

Проблема моя оказалась абсолютно такая же как здесь http://forum.easyelectronics.ru/viewtopic.php?f=35&t=23447 и решение такое же.

Вы там похоже тоже отметились

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


Ссылка на сообщение
Поделиться на другие сайты
On ‎10‎/‎16‎/‎2018 at 9:12 PM, uriy said:

Проблема моя оказалась абсолютно такая же как здесь http://forum.easyelectronics.ru/viewtopic.php?f=35&t=23447 и решение такое же.

Вы там похоже тоже отметились

угу, было дело ...

On ‎10‎/‎16‎/‎2018 at 8:01 AM, uriy said:

 

А что за отбраковку вы имеете ввиду?

пришедший мышиный пакет с данными отбрасывается как невалидный, если он старее периода, указанного в дескрипторах мыши. Драйвер HID класса просто уходит на следующий цикл опроса и не передаёт пакет на дальнейшую расшифровку.

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


Ссылка на сообщение
Поделиться на другие сайты
On ‎10‎/‎16‎/‎2018 at 8:01 AM, uriy said:

Мышки почему-то заработали сразу, клавы работать не хотят, к тому же большинство проводных похоже на low speed работают. Пока разбираюсь с логическим анализатором. 

Странно, я использовал старые, докубовые ST-шные либы, там в одном флаконе мышь+клава, у меня и те и те работали. Но ассортимента клав у меня нет, потому по стабильности я сказать не могу.

 

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


Ссылка на сообщение
Поделиться на другие сайты
On ‎10‎/‎16‎/‎2018 at 8:01 AM, uriy said:

Еще и клавы с USB хостами бывают

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

Например, комплект клава+мышь это уже не простой HID девайс, а композитное устройство из 2-х девайсов, драйвер должен такое понимать. Но он даже на простой радиомыше скорее всего споткнётся, не говоря уж про радиокомплект.

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


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

Именно радиомышки заработали сразу с исходниками из коробки. Проверял на двух.

Клавы без хаба тоже заработали. Вся проблема была как по ссылке выше.

 

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


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

Теперь надо разобраться как работать с клавой через USB Hub. Можете посоветовать что-то почитать об этом кроме спецификации USB?

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


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

Как я понимаю, сперва надо понять, как работать с хабами, чтобы проц:

1. Распознал хаб

2. Понял, что к хабу подключена клавиатура.

 

Но лично я этим пока не занимался. Как по мне гораздо более актуальны радиомыши (они отличаются от проводных) и комплекты клавиатура+мышь (составной USB-девайс, ST-шная "фиговинка" их вообще не понимает).

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


Ссылка на сообщение
Поделиться на другие сайты
18 минут назад, hd44780 сказал:

(составной USB-девайс, ST-шная "фиговинка" их вообще не понимает).

Там надо писать свою обработку, "забивать" работу сразу с двумя устройствами типа interrupt, давать им по 5 мсек интервал опроса минимум и парсить репорты от клавы и мыши.

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


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

Как по мне гораздо более актуальны радиомыши

У меня дома две радиомыши A4Tech разных моделей. Именно мыши не комплект клава+мышь. Но USBLyzer показывает что это составное устройство. Эти мышки у меня заработали сразу с исходниками из cubemx без каких-либо изменений. Вероятно USB свисток один и тот же просто для мышей и для мышь+клава. 

Самая обычная проводная клава не захотела сразу работать. Пришлось пошаманить.

 

Quote

Там надо писать свою обработку, "забивать" работу сразу с двумя устройствами типа interrupt, давать им по 5 мсек интервал опроса минимум и парсить репорты от клавы и мыши.

В случае моей радиомышки это одно устройство с двумя эндпойнтами. Зачем по 5 мсек? Столько сколько указано в дескрипторе. Исходники cubemx читают два эндпойнта если это клава+мышка. Смотрел анализатором saleae.

 

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

Сама клава не просит адрес. 

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

https://stackoverflow.com/questions/40934344/how-to-communicate-with-the-devices-behind-a-usb-hub

https://www.microchip.com/forums/m523103.aspx#523499

На словах кажется все просто и понятно. Но еще не пробовал.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти