0x00 0 17 января, 2017 Опубликовано 17 января, 2017 (изменено) · Жалоба Подключаю HID клавиатуру через USB OTG к LPC1768. Подаю питание на плату. На клавиатуре загорается светодиодик NumLock и если нажимать на клавиши - то видно клавиатура работает нормально (транслирую их на ПК через uart). Но если вытащить клавиатуру и снова вставить ее в usb, то она уже не включается, т.е. не происходит ее поднятие "на-горячую". Хотя по обработчику событий должна происходить энумерация вновь подключенного устройства. Использую библиотеку от keil (скриншот во вложении) (uVision V5.16a) - пример взят от демо платы MCB1700. Код обработчика событий клавиатуры: 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); Изменено 17 января, 2017 пользователем IgorKossak [codebox] для длинного кода. [code]-для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 января, 2017 Опубликовано 20 января, 2017 · Жалоба С LPC не работал, но у STM-а в ихних примерах поголовно везде была тупая недоработка - они напрочь игнорили событие отключения девайса. Ну кроме разве что вывода на дисплей строки "device disconnected" - так, понты сплошные . Я добавил туда флажок, по которому сделал простую переинициализацию хоста. С тех пор вот уж полтора года всё крутится как часы и с мышами, и с клавами и с флэшками. Но имейте в виду, что при переинициализации хоста необходимо также очищать абсолютно все служебные переменные как драйвера USB ядра, так и драйвера класса. Иначе можете словить кучу разных непредсказуемых глюков. У ST с этим тоже были с этим проблемы. У меня, например, хост понимает флэшки, мышки и клавы. При чередовании этих устройств флэшка не выходила из фазы энумерации. Оказалось, я пропустил одну глоб переменную в драйвере MSC. Забыл её обнулить. Там была тьма-тьмущая разных глобальных переменных, раскиданных по куче разных файлов... замахался, пока всё вылизал. Хотя, может, у NXP примеры почище сделаны, не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться