USB
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Re: USB
При запуске примера на МК mbs-k1921bk01t Windows 7 выводит сообщение что "устройство USB не опознано". Запускаю пример HID_Gamepad.
Начав разбираться в коде, обнаружил что после первого прерывания на шину в функции USBDev_IntHandler, при обработке SOF (функция USBDev_SOF_Handler(), а именно при обработке команды USBDevice.class_cb->SOF()) возникает ошибка HardFault. Тут возникают вопросы: почему? Как исправить? И вроде можно же и без этой функции обойтись (USBDev_SOF_Handler())? (Только начал изучать USB, так что не ругайте:) я многое не понимаю)
Ок, закомментил SOF функцию. Т.е сейчас при обработке прерывания от SOF мы просто сбрасываем этот регистр (NT_USBDevice->USB_IRQ_STAT = ( 1<<0 );) и двигаемся дальше, к reset. После этого программа даже заходит на обработку от конечных точек ( цикл while (ep_irqs) ), но после первого прохождения снова попадаю на HardFault. В чем могут быть попроблемы предложительно?
Работаю на Keil v5.14
Начав разбираться в коде, обнаружил что после первого прерывания на шину в функции USBDev_IntHandler, при обработке SOF (функция USBDev_SOF_Handler(), а именно при обработке команды USBDevice.class_cb->SOF()) возникает ошибка HardFault. Тут возникают вопросы: почему? Как исправить? И вроде можно же и без этой функции обойтись (USBDev_SOF_Handler())? (Только начал изучать USB, так что не ругайте:) я многое не понимаю)
Ок, закомментил SOF функцию. Т.е сейчас при обработке прерывания от SOF мы просто сбрасываем этот регистр (NT_USBDevice->USB_IRQ_STAT = ( 1<<0 );) и двигаемся дальше, к reset. После этого программа даже заходит на обработку от конечных точек ( цикл while (ep_irqs) ), но после первого прохождения снова попадаю на HardFault. В чем могут быть попроблемы предложительно?
Работаю на Keil v5.14
Re: USB
Ошибка: Вместо "первого прохождения снова попадаю на HardFault"
*Во время второго прохождения снова попадаю на HardFault
*Во время второго прохождения снова попадаю на HardFault
Re: USB
На hardFault попадает после выполнения команды USB device.class_cb->EP0_TxSend(); походу что то не то со структурой USBDev_ClassCB. Потому что та же проблема возникает при обработке команды USB device.class_cb->SOF();
Re: USB
В принципе USB запустить удалось. Обмен через контрольную точку ведется. Устройство распознается. Но определяется с ошибкой, код 10.
Host запрашивает дескриптор устройства, конфигурации, строковые дескрипторы, выставляет адрес, но не запрашивает дескриптор репорта и устройство определяется с ошибкой. Может где-то нужно делать reset usb? И как это делать?
Re: USB
Прикрепляю рабочий проект для Keil. Проблема была в инициализация структур, поэтому объявил дескрипторы через массив. Исправил инициализацию device descriptor и hid gamepad descriptor, насчет USB cdc не уверен. главной целью было запустить проект, поэтому код плохой но зато он работает
тестировал на плате MBS-K1921BK01T.
Среда разработки - Keil uVision V5.14.0.0
тестировал на плате MBS-K1921BK01T.
Среда разработки - Keil uVision V5.14.0.0
- Вложения
-
- USB_working_Keil.rar
- (1.46 МБ) 117 скачиваний
Re: USB
Здравствуйте еще раз.
Удалось запустить и CDC и HID, но возник вопрос: сколько конечных точек поддерживает МК? если, например, хочется сделать составное устройство. и где в примере по USB поменять максимальное количество поддерживаемых конечных точек? там все настроено на 4 конечные точки, 3 и 4 из которых нельзя использовать (errata_K1921VK01T).
Удалось запустить и CDC и HID, но возник вопрос: сколько конечных точек поддерживает МК? если, например, хочется сделать составное устройство. и где в примере по USB поменять максимальное количество поддерживаемых конечных точек? там все настроено на 4 конечные точки, 3 и 4 из которых нельзя использовать (errata_K1921VK01T).
Re: USB
>плохой но зато он работает
Что-то не получается воспроизвести - если верить wiresharkу работает он миллисекунд 100, далее на запрос IN от hosta контроллер отвечает пакетом без данных с таким статусом "URB status: No such file or directory (-ENOENT) (-2)" после чего host запросы не шлёт, что бы это могло быть?
Что-то не получается воспроизвести - если верить wiresharkу работает он миллисекунд 100, далее на запрос IN от hosta контроллер отвечает пакетом без данных с таким статусом "URB status: No such file or directory (-ENOENT) (-2)" после чего host запросы не шлёт, что бы это могло быть?
Re: USB
Добрый день!
Исправили некоторые баги в тех примерах USB, что уже были в открытом доступе. Обновленные версии выложили в репозиторий K1921VKx_SDK - проекты usb_hid_gamepad и usb_cdc_vcp.
Исправили некоторые баги в тех примерах USB, что уже были в открытом доступе. Обновленные версии выложили в репозиторий K1921VKx_SDK - проекты usb_hid_gamepad и usb_cdc_vcp.
Re: USB
Спасибо за ответ, но похоже поведение не изменилось (точно не пока скажу т.к. копи-пастил интересующие куски в свой проект),
хочу собрать как-есть, в репозитории присутствуют файлы build_all.sh build_debug.sh build_release.sh clean.sh, но
при запуске ругается на старый cmake - проверю позже.
Поведение HID в принципе не похоже на корректное, т.к. в примере данные отправляются каждый интервал опроса, а данных у устройства может не быть и в ответ на IN token должен отправлятся NAK, не понял из описания как это сделать, или аппаратно так отвечает если не класть данные в буфер?
хочу собрать как-есть, в репозитории присутствуют файлы build_all.sh build_debug.sh build_release.sh clean.sh, но
при запуске ругается на старый cmake - проверю позже.
Поведение HID в принципе не похоже на корректное, т.к. в примере данные отправляются каждый интервал опроса, а данных у устройства может не быть и в ответ на IN token должен отправлятся NAK, не понял из описания как это сделать, или аппаратно так отвечает если не класть данные в буфер?
Re: USB
Можете попробовать закомментировать проверку версии Cmake в самом верху CMakeLists. Вероятно, соберется.хочу собрать как-есть, в репозитории присутствуют файлы build_all.sh build_debug.sh build_release.sh clean.sh, но
при запуске ругается на старый cmake - проверю позже.
Когда в точке нет данных, то во время транзакции NAK отправляется аппаратно.Поведение HID в принципе не похоже на корректное, т.к. в примере данные отправляются каждый интервал опроса, а данных у устройства может не быть и в ответ на IN token должен отправлятся NAK, не понял из описания как это сделать, или аппаратно так отвечает если не класть данные в буфер?