реклама на сайте
подробности

 
 
> STM32F439 + USB мышь, Не работает
hd44780
сообщение Nov 29 2015, 16:14
Сообщение #1


Профессионал
*****

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



Привет всем.

Вот уже пару недель (непостоянно конечно rolleyes.gif ) пытаюсь завести 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 клавиатуру я не пробовал, хотя и не вырезал.
Прикрепленные файлы
Прикрепленный файл  STM32F4x9_HID.zip ( 347.22 килобайт ) Кол-во скачиваний: 14
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (30 - 44)
Огурцов
сообщение Jan 10 2016, 11:19
Сообщение #31


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



немец крут
но только поначалу
потом оказывается, что что-то не работает, что-то работает не так, что-то глючит
мне кажется, что он берет проекты из под старого? куба и причесывает их под кокос

Сообщение отредактировал Огурцов - Jan 10 2016, 11:20
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 10 2016, 13:02
Сообщение #32


Профессионал
*****

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



Не, куба я у него пока не видел. У него SPL и не кубовые USB либы.
Глюки да, бывают. Тот же его пример USB мыши на Ф429 дискавери он работает нормально, а на моей плате на том же хосте он не пошёл. хз почему. Я не разбирался. Решил лучше время потратить на новые либы.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 10 2016, 14:34
Сообщение #33


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



старый куб был на spl, не ?
в любом случае, примеры по списку куба и выглядят как обертки над обертками
почему бы для разнообразия не сделать cdc host ? а нет, у st потому что нет
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 10 2016, 15:28
Сообщение #34


Профессионал
*****

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



Цитата(Огурцов @ Jan 10 2016, 17:34) *
старый куб был на spl, не ?

Я не знаю, я кубом почти не пользуюсь.

Цитата(Огурцов @ Jan 10 2016, 17:34) *
в любом случае, примеры по списку куба и выглядят как обертки над обертками
почему бы для разнообразия не сделать cdc host ? а нет, у st потому что нет

Угу. Не говорите .. В кубе CDC Host есть. Но на простые либы переделывать геморно.

Кстати, в новых (не кубовых) либах CDC хост появился. Так что, наверное, и у немца скоро появится biggrin.gif . Я не проверял, пока неактуально.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jan 10 2016, 16:34
Сообщение #35


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



так либы на spl или это третья реинкарнация стшного софта ?
я куб пытался под кокос заточить - что- то там не срослось
пока

Сообщение отредактировал Огурцов - Jan 10 2016, 16:35
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 10 2016, 17:06
Сообщение #36


Профессионал
*****

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



В USB либах SPL есть только в 2-х местах:
1. Файл usb_bsp.c - инициализация портов, прерываний, включение питания девайса и пр.
2. Файл usbh_usr.c, функция USBH_USR_UserInput. Там опрашивается какая-то кнопка, которой можно запретить работу хоста. На фига оно надо и как именно оно работает - я не знаю, я всегда эту кнопку выкидывал и безусловно разрешал работу хоста.

В самом USB ядре никакого SPL нету, там всё на регистрах сделано, через макросы
Код
#define USB_OTG_READ_REG32(reg)  (*(__IO uint32_t *)(reg))
#define USB_OTG_WRITE_REG32(reg,value) (*(__IO uint32_t *)(reg) = (value))
#define USB_OTG_MODIFY_REG32(reg,clear_mask,set_mask) \
  USB_OTG_WRITE_REG32((reg), (((USB_OTG_READ_REG32(reg)) & ~(clear_mask)) | (set_mask)) )

И никогда я там SPL не видел, несмотря на вопли разных SPL-ненавистников. Попадались мне такие sm.gif .

Разные дисплеи, использующиеся в callback-ах я не рассматривал, т.к. эти вещи сильно от проекта зависят. Я, например, все PID/VID/... записываю в переменные, а потом использую, где надо (вывожу на дисплей в другом месте).

PS. Я имею в виду только хосты. Девайсы я практически не делал, не могу сказать что там да как. Хотя, я думаю, что в этом отношении девайс от хоста не отличается.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 19 2016, 07:57
Сообщение #37


Профессионал
*****

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



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


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 19 2016, 18:22
Сообщение #38


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(hd44780 @ Jan 19 2016, 10:57) *
Теперь пошёл делать, чтобы хост понимал и мышку и флэшку одновременно.


В смысле, через хаб или просто либо то, либо другое? Если через хаб, тоже интересно, сейчас сам хочу сделать...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 20 2016, 08:26
Сообщение #39


Профессионал
*****

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



Не, пока не хаб. Просто так или то или то.
Хабовый протокол я ещё даже не читал пока sad.gif .


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 21 2016, 13:57
Сообщение #40


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(hd44780 @ Jan 20 2016, 11:26) *
Не, пока не хаб. Просто так или то или то.
Хабовый протокол я ещё даже не читал пока sad.gif .


Понятно - это просто, а вот с хабом... че-то пока не работает все разом crying.gif

ЗЫ. Пользуясь случаем, не встречалось такого эффекта, например, читаю блоками флешку, а потом надо на нее-же несколько блоков записать, потом читать дальше, причем без пауз. Так вот после записи флеха наглухо уходит в аут(помогает только откл. ее питания), сам контроллер усб не отключаю, только сброс шины.
Это бывает на 2х флешках из 10 разных производителей... Причем запись происходит корректно.

Кто, что знает - расскажите, если не секрет? laughing.gif

Сообщение отредактировал mantech - Jan 21 2016, 14:01
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jan 22 2016, 13:17
Сообщение #41


Профессионал
*****

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



Не, флэшки у меня нормально вроде пашут.
Знакомый, которому я дал свой драйвер, тоже не жаловался пока что ...

Драйвер от СТ. Практически без изменений. Слегка допиленный, чтобы не впадал в ступор при смене флэшки.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 22 2016, 13:38
Сообщение #42


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(hd44780 @ Jan 22 2016, 16:17) *
Не, флэшки у меня нормально вроде пашут.


Дак вот тоже нормально пашут, за исключением некоторых и в режиме "одновременной" записи и чтения. Когда только читаю или записываю - все норм laughing.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 28 2016, 09:33
Сообщение #43


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(mantech @ Jan 21 2016, 16:57) *
Пользуясь случаем, не встречалось такого эффекта, например, читаю блоками флешку, а потом надо на нее-же несколько блоков записать, потом читать дальше, причем без пауз. Так вот после записи флеха наглухо уходит в аут


Вопрос решил, оказывается для особо тормозных флешек нужно было увеличить таймаут ошибки, если нет ответа для DATA IN и CSW принимаемых блоков.

Цитата(mantech @ Jan 21 2016, 16:57) *
Пользуясь случаем, не встречалось такого эффекта, например, читаю блоками флешку, а потом надо на нее-же несколько блоков записать, потом читать дальше, причем без пауз. Так вот после записи флеха наглухо уходит в аут


Вопрос решил, оказывается для особо тормозных флешек нужно было увеличить таймаут ошибки, если нет ответа для DATA IN и CSW принимаемых блоков.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Nov 27 2016, 16:12
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 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.
Дальнейшее я пока не расколдовал sad.gif ...

Поэтому вопрос по сути тот же - работает ли USB мышь у кого-нибудь?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 29 2016, 17:28
Сообщение #45


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(hd44780 @ Nov 27 2016, 19:12) *
Поэтому вопрос по сути тот же - работает ли USB мышь у кого-нибудь?


Работает больше года в 24\7 . Проблемы отваливания решил отслеживанием ошибки и повторной энумерацией, как это сделано в винде.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016