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

 
 
> LPC1768 + HID клавиатура через USB OTG - не удается подключить "на горячую"
0x00
сообщение Jan 17 2017, 08:28
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 18-07-11
Пользователь №: 66 279



Подключаю HID клавиатуру через USB OTG к LPC1768. Подаю питание на плату. На клавиатуре загорается светодиодик NumLock и если нажимать на клавиши - то видно клавиатура работает нормально (транслирую их на ПК через uart). Но если вытащить клавиатуру и снова вставить ее в usb, то она уже не включается, т.е. не происходит ее поднятие "на-горячую". Хотя по обработчику событий должна происходить энумерация вновь подключенного устройства.
Использую библиотеку от keil (скриншот во вложении) (uVision V5.16a) - пример взят от демо платы MCB1700. Код обработчика событий клавиатуры:
CODE
void USBH_Thread (void const *arg) {
char con = 0; /* Connection status of keyboard */
char con_ex = 40; /* Previous connection status
+ initial time in 100 ms
intervals for initial display */
uint8_t out[64]; /* Output to keyboard LEDs */
out[0]=1;
USBH_Initialize (0); /* Initialize USB Host 0 */

while (1) {
con = USBH_HID_GetDeviceStatus(0) == usbOK; /* Get kbd connection status */
if ((con ^ con_ex) & 1) { /* If connection status changed */
if (con) {
USBH_HID_Write (0,(uint8_t *)&out,1);/* Turn on NUM LED */
printf ("\nKeyboard connected\n");
} else {
printf ("\nKeyboard disconnected ...\n");
}
con_ex = con;
} else if (con_ex > 1) { /* If initial time active */
con_ex -= 2; /* Decrement initial time */
if ((con_ex <= 1) && (!con)) { /* If initial time expired */
printf ("\nNo keyboard connected ... \n");
con_ex = con;
} else {
osDelay(200);
}
}
osDelay(100);
}
}
osThreadDef(USBH_Thread, osPriorityNormal, 1, NULL);


Сообщение отредактировал IgorKossak - Jan 17 2017, 12:48
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
hd44780
сообщение Jan 20 2017, 08:08
Сообщение #2


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

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



С LPC не работал, но у STM-а в ихних примерах поголовно везде была тупая недоработка - они напрочь игнорили событие отключения девайса. Ну кроме разве что вывода на дисплей строки "device disconnected" - так, понты сплошные biggrin.gif .
Я добавил туда флажок, по которому сделал простую переинициализацию хоста. С тех пор вот уж полтора года всё крутится как часы и с мышами, и с клавами и с флэшками.
Но имейте в виду, что при переинициализации хоста необходимо также очищать абсолютно все служебные переменные как драйвера USB ядра, так и драйвера класса. Иначе можете словить кучу разных непредсказуемых глюков.
У ST с этим тоже были с этим проблемы. У меня, например, хост понимает флэшки, мышки и клавы. При чередовании этих устройств флэшка не выходила из фазы энумерации. Оказалось, я пропустил одну глоб переменную в драйвере MSC. Забыл её обнулить.
Там была тьма-тьмущая разных глобальных переменных, раскиданных по куче разных файлов... замахался, пока всё вылизал. Хотя, может, у NXP примеры почище сделаны, не знаю.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 23:44
Рейтинг@Mail.ru


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