kostyan
Jan 15 2015, 09:15
Народ, кто нибудь поднимал usb cdc именно на STM32F401?
Есть две платы: диско429 и диско401. На диско429 отладил пример из набора STM32_USB-Host-Device_Lib_V2.1.0. Там пример идет для stm32f407, но заработало и для stm32f429 на хайспидовом usb но в режиме фулспида. Со стороны компа - libusb с двумя точками 0x01 и 0x82 для передачи приема данных. Беру ровно тот же код (ну ножки другие только буквально) и пробую запустить его на диско401. Енумерация проходит, работает приём - я принимаю от компа данные (несколько байт), посылаю в ответ посылку (тоже несколько), НО ПРЕРЫВАНИЯ ОТ ПЕРЕДАЧИ НЕ ПРОИСХОДИТ!!! Со стороны компа выхожу из кода чтения данных по таймауту в несколько секунд, а проц долбится в прерывании в коде анализа прерывания DCD_HandleInEP_ISR, где для epnum=2 бит XFRC:Transfer completed interrupt регистра OTG_FS_DIEPINT2 не встает! Хэзэ что думать - в гугле такой проблемы не нашел. HID пример для stm32f401 с эмуляцией мышки работает - так что железо вроде бы рабочее, но мне нужен cdc.
Golikov A.
Jan 16 2015, 07:37
где то в конце-середине того года была подобная тема, человек бился с неправильной работой прерываний. Но поиск по форуму ее не находит, так как ищет слова больше 3 букв...
Вроде бы там пришли к тому что какая-то ошибка контроллера и на макс скорости не запустить, попробуйте запустить на скорость ниже, имеется ввиду high speed, full speed.
Ну или поищите руками тему, она была больше 2 страниц, с каким то понятным названием...
---update---
ой все наврал... вот темы про которые я говорил... но там изохронные обмены
http://electronix.ru/forum/index.php?showtopic=123718http://electronix.ru/forum/index.php?showtopic=112562http://electronix.ru/forum/index.php?showtopic=123341
kostyan
Jan 16 2015, 08:04
Спасибо за поиск, проблема таки решилась! Искал вчера весь день рабочий пример под 401й проц и под конец осенило про стм32куб. Сегодня как раз для диско401 создал проектик цдц, как то запустил его - передача идет! Через USBLyzer обнаружил что конечные точки в проекте, полученном через куб, другие : CDC_IN_EP = 0x81, CDC_OUT_EP = 0x01, CDC_CMD_EP = 0x82.
А у меня были такие: CDC_IN_EP = 0x82, CDC_OUT_EP = 0x01, CDC_CMD_EP = 0x83. Сделал в своем проекте первый вариант, переделал libusb драйвер и заработало!
А то, что точки другие - обнаружил через USBLyzer! Он гадина платный и не ломанный, рега скоро кончится на него. Хоть и оффтоп - посоветуйте народ, пожалуйтса, подобный просмоторщик USB трафика бесплатный?!
andries5
Jan 16 2015, 10:00
Попробуйте Simple USB Logger.
___http://www.incentivespro.com/downloads.html
Цитата(kostyan @ Jan 16 2015, 14:04)

А то, что точки другие - обнаружил через USBLyzer! Он гадина платный и не ломанный, рега скоро кончится на него. Хоть и оффтоп - посоветуйте народ, пожалуйтса, подобный просмоторщик USB трафика бесплатный?!
Могу посоветовать USBPcap+Wireshark:
http://desowin.org/usbpcap/https://www.wireshark.org/
kostyan
Jan 21 2015, 05:54
Цитата(BaN @ Jan 20 2015, 15:01)

это только на линухе насколько я понял

упд. Неправильно видимо понял - не могу разобраться как запустить собственно. Установил и туплю.
упд2. Нашел инструкцию как пользовать на сайте, слона как водится не заметил, изучаю пробую...