|
STM32F439 + USB мышь, Не работает |
|
|
|
Nov 29 2015, 16:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Привет всем. Вот уже пару недель (непостоянно конечно  ) пытаюсь завести USB мышку на USB хосте STM32F439. Использовал СТ-шные либы и частично переделанные библиотеки немца - http://mikrocontroller.bplaced.net/wordpress/?page_id=2991Результаты весьма плачевные - проверял на 3-х мышах: 1. (какой-то Logitch) не опознаётся, обламывается где-то на этапе энумерации. Там я не копался, забил пока на неё. 2. Logitech RX250 (PS2+USB) и Terratech mouse опознаются с полпинка, но ведут себя как пьяный заяц на дороге - даже если мыша просто лежит на столе без движения, координаты как-то странно скачут, в подавляющем большинстве случаев в сторону увеличения, довольно быстро упираются в заданные мною максимумы, на чём всё и замирает. Кнопки вроде нормально отрабатывают, но с задержкой в несколько секунд - от одной до 10 (на глаз). Ну и ещё один общий вопрос. В HID ядре прописана некая частота опроса мыши (HID устройства): CODE if ( HID_Machine.poll < HID_MIN_POLL) { HID_Machine.poll = HID_MIN_POLL; } // if ....................
case HID_POLL: t= HCD_GetCurrentFrame ( pdev ) - HID_Machine.timer; if ( t >= HID_Machine.poll ) { // прошло больше HID_Machine.poll SOF-ов HID_Machine.state = HID_GET_DATA; } else if ( HCD_GetURB_State ( pdev, HID_Machine.hc_num_in ) == URB_DONE ) { // handle data once if ( start_toggle == 1 ) { start_toggle = 0; HID_Machine.cb->Decode ( HID_Machine.buff ); } // if } // if else if ( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_STALL ) /* IN Endpoint Stalled */ { /* Issue Clear Feature on interrupt IN endpoint */ if ( USBH_ClrFeature ( pdev, pphost, HID_Machine.ep_addr, HID_Machine.hc_num_in ) == USBH_OK ) { /* Change state to issue next IN token */ HID_Machine.state = HID_GET_DATA; } } // if break;
Зачем это сделано - понятно, но по факту это выполнимо только если проц выполняет один только USBH_Process(&USB_OTG_Core_dev, &USB_Host);в главном цикле. А если надо делать ещё что-то? Та же немецкая либа в чистом виде у меня не пошла именно из-за условия if ( t >= HID_Machine.poll ) Можно вызывать USBH_Process в каком-нибудь таймере, но я не знаю, насколько безопасно вызывать эту функцию в прерывании. У кого-то USB-мышки работают? Может кто-то помочь? Приложил свой проект, посмотрите кто может пожалуйста. На кокосе. Спасибо. PS. USB клавиатуру я не пробовал, хотя и не вырезал.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
 |
Ответов
|
Nov 27 2016, 16:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Апну древнюю тему. Сейчас осталась только одна проблема - мышь спустя какое-то время перестаёт отдавать координаты. Копание в коде вывело на уже упоминавшееся мною выше условие в файле usbh_hid_core.c, функция USBH_HID_Handle: Код ............. case HID_POLL: if(( HCD_GetCurrentFrame(pdev) - HID_Machine.timer) >= HID_Machine.poll) { HID_Machine.state = HID_GET_DATA; } else if( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_DONE ) { if(start_toggle == 1) /* handle data once */ { start_toggle = 0; HID_Machine.cb->Decode(HID_Machine.buff); } } //if .............. Ну что такое первое условие - понятно, там все проблемы удалось решить, но всё обламывается на втором условии. Когда мышь дохнет, функция возвращает URB_IDLE. Всё, что я пока понял, что эти статусы выставляются в прерывании USB. Дальнейшее я пока не расколдовал  ... Поэтому вопрос по сути тот же - работает ли USB мышь у кого-нибудь?
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Nov 29 2016, 18:38
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Цитата(mantech @ Nov 29 2016, 20:28)  Работает больше года в 24\7 . Проблемы отваливания решил отслеживанием ошибки и повторной энумерацией, как это сделано в винде. Ну реенумерацию (реинит хоста) я запущу, эти механизмы у меня уже есть, запускается автоматически по спец флажку, но как отловить отваливание? Вставить в тот if какой-то флажок? Кусок Код if ( p_hid_data -> start_toggle == 1 ) /* handle data once */ { p_hid_data -> start_toggle = 0; p_hid_data -> HID_Machine.cb->Decode ( p_hid_data -> HID_Machine.buff ); } вызывается только когда мышу двигают. Я вроде не замечал, чтобы у меня про сдыхании мыши вызывался обработчик USBH_USR_DeviceDisconnected (устройство отключилось от хоста). Иначе бы хост реинитился бы. Он вызывается только если я мышу вообще выдёргиваю.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
Сообщений в этой теме
hd44780 STM32F439 + USB мышь Nov 29 2015, 16:14 mantech Цитата(hd44780 @ Nov 29 2015, 19:14) У ко... Nov 29 2015, 17:00 kovigor Цитата(mantech @ Nov 29 2015, 21:00) Не у... Nov 29 2015, 17:24 aaarrr Цитата(mantech @ Nov 29 2015, 20:00) Не у... Nov 29 2015, 17:52  mantech Цитата(aaarrr @ Nov 29 2015, 20:52) Прави... Nov 29 2015, 18:11   aaarrr Цитата(mantech @ Nov 29 2015, 21:08) Толь... Nov 29 2015, 18:13    mantech Цитата(aaarrr @ Nov 29 2015, 21:13) Увы, ... Nov 29 2015, 18:15 hd44780 Спасибо за ответы.
С энумерацией понятно вроде. Гд... Nov 30 2015, 12:54 mantech Цитата(hd44780 @ Nov 30 2015, 15:54) Спас... Nov 30 2015, 14:22 hd44780 Ок. Буду смотреть. Nov 30 2015, 14:54 hd44780 Скачал отсюда - https://www.lpcware.com/content/pr... Dec 1 2015, 17:36 mantech Цитата(hd44780 @ Dec 1 2015, 20:36) Скача... Dec 1 2015, 17:45 hd44780 ага. нашёл. спасибо. Dec 1 2015, 17:48 hd44780 Накурился я этой хрени ... голова кругом
Report... Dec 23 2015, 19:09 mantech Цитата(hd44780 @ Dec 23 2015, 22:09) Наку... Dec 23 2015, 20:24 hd44780 угу. спасибо.
Радиомышки я на потом оставлю. Сейча... Dec 24 2015, 08:36 mantech Цитата(hd44780 @ Dec 24 2015, 11:36) угу.... Dec 24 2015, 09:19 hd44780 Пытаюсь понять феномен этого автоповтора ... Dec 24 2015, 10:53 hd44780 Посмотрел куб - там тоже бут протокол, но автоповт... Dec 24 2015, 16:36 mantech Цитата(hd44780 @ Dec 24 2015, 19:36) Посм... Dec 24 2015, 18:37 hd44780 Всех с наступающим!
Переделал проект с нуля на... Dec 30 2015, 08:39 Огурцов не хватает питания ? Dec 30 2015, 09:49 hd44780 А хз. Питается от программаторского USB. Проверю. Dec 30 2015, 12:33 hd44780 Всех с наступившими Новым годом и Рождеством.
Пит... Jan 7 2016, 18:04 Rash извиняюсь за офф топик, может кто знает где можно ... Jan 8 2016, 17:10 hd44780 Rash, я не знаю.
Новую USB либу я увидел, когда са... Jan 9 2016, 07:52 Огурцов когда говорите либа, что это означает ? Jan 9 2016, 11:11 hd44780 СТ-шники выкладывают архив: USB ядро, драйвера флэ... Jan 9 2016, 12:42 mantech Цитата(hd44780 @ Jan 9 2016, 15:42) Факти... Jan 9 2016, 18:37  hd44780 Цитата(mantech @ Jan 9 2016, 21:37) А что... Jan 10 2016, 09:11 Огурцов немец крут
но только поначалу
потом оказывается, ч... Jan 10 2016, 11:19 hd44780 Не, куба я у него пока не видел. У него SPL и не к... Jan 10 2016, 13:02 Огурцов старый куб был на spl, не ?
в любом случае, пример... Jan 10 2016, 14:34 hd44780 Цитата(Огурцов @ Jan 10 2016, 17:34) стар... Jan 10 2016, 15:28  Огурцов так либы на spl или это третья реинкарнация стшног... Jan 10 2016, 16:34 hd44780 В USB либах SPL есть только в 2-х местах:
1. Файл ... Jan 10 2016, 17:06 hd44780 Сделал флэшки на новой либе. На всех моих платах и... Jan 19 2016, 07:57 mantech Цитата(hd44780 @ Jan 19 2016, 10:57) Тепе... Jan 19 2016, 18:22 hd44780 Не, пока не хаб. Просто так или то или то.
Хабовый... Jan 20 2016, 08:26 mantech Цитата(hd44780 @ Jan 20 2016, 11:26) Не, ... Jan 21 2016, 13:57  mantech Цитата(mantech @ Jan 21 2016, 16:57) Поль... Jan 28 2016, 09:33 hd44780 Не, флэшки у меня нормально вроде пашут.
Знакомый,... Jan 22 2016, 13:17 mantech Цитата(hd44780 @ Jan 22 2016, 16:17) Не, ... Jan 22 2016, 13:38   mantech Цитата(hd44780 @ Nov 29 2016, 21:38) вызы... Nov 30 2016, 12:24 hd44780 угу. спасибо. Nov 30 2016, 16:35 hd44780 Нашёл я, как это отловить, добавил туда свой флажо... Dec 3 2016, 09:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|