|
STM32F407 и USB с BULK, Нужна помощь от бывалых |
|
|
|
Feb 16 2018, 09:24
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 18-10-06
Из: Москва
Пользователь №: 21 459

|
Для Bulk лучше использовать класс WinUSB. Тогда можно использовать драйвер winusb в Windows и linusb в Linux, и работать уже из пользовательского режима.
|
|
|
|
|
Feb 16 2018, 15:36
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 26-01-11
Пользователь №: 62 484

|
Цитата(toweroff @ Feb 16 2018, 17:40)  Я брал MSC, выбрасывал реализацию SCSI, оставляя только две точки IN/OUT Под Win можно и libusb использовать, драйвер генерится утилитой Zadig на счёт раз Спасибо за наводку. Тут дело вот в чём... мне необходимо сделать клон некоего девайса. Сей девайс работает на булках (судя по перехвату пакетов дескрипторов) и не является каким либо стандартным устройством (устанавливается свой хитрый драйвер)... Есть небольшой опыт работы с HID и VCP, а вот с таким устройством впервые сталкиваюсь. По сути необходимо сделать реверс инжиниринг...
|
|
|
|
|
Feb 17 2018, 08:59
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 7-07-04
Пользователь №: 284

|
QUOTE (mic_arm @ Feb 16 2018, 13:10)  а какой класс необходимо выбрать при конфигкрации (CDC, HID, MSC...)? WinUSB
|
|
|
|
|
Feb 17 2018, 09:07
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(mcheb @ Feb 16 2018, 11:46)  Скачайте с сайта ST CubeMX и будет Вам счастье. На 407 Работает из коробки. На других может не заработать. Прекрасный совет! Но там совершенно адский USB-стек. Мухи, котлеты активно замешаны с индусским рисом и карри в единое трудноделимое нечто. Отрывать от него лишнее и подсовывать своё очень неудобно. Я делал на основе LibOpenCM3 - пишем дескриптор (да, предварительно надо покурить USB in Nutshell), инициализируем нужные endpoint'ы - и всё, готово, можно обмениваться данными.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Feb 20 2018, 12:58
|

Участник

Группа: Участник
Сообщений: 65
Регистрация: 28-12-05
Из: Odessa
Пользователь №: 12 673

|
LibUSB32 под винду. И полная кастрация MSC реализации (как toweroff советовал)с STM32 Stdlib, чтоб осталось только 3 usb функции  . Собственно один раз чик и на долгое время хватит.
Сообщение отредактировал картошка - Feb 20 2018, 13:00
|
|
|
|
|
Feb 28 2018, 15:55
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 26-01-11
Пользователь №: 62 484

|
Цитата(toweroff @ Feb 28 2018, 17:56)  Так в примерах libusb было же. Открываем устройство, интерфейс и шлем в булку Строк на сях работы с девайсом десятка два В примерах да, исходники есть. Я надеялся, что есть уже собраные утилитки для этого, как для ком-порта.
|
|
|
|
|
Mar 4 2018, 19:08
|

Участник

Группа: Участник
Сообщений: 20
Регистрация: 26-01-11
Пользователь №: 62 484

|
Цитата(toweroff @ Mar 4 2018, 16:50)  Так точки ж абсолютно независимые Нужно принять - проверяем буфер точки OUT. А в её прерывании просто складываем в буфер Нужно передать - проверяем активность передачи и или докладываем в буфер передачи, или сразу вызываем передачу. В прерывании точки IN, если в буфере что-то есть, опять вызываем передачу. Нечего передавать - сбрасываем флаг Как-то так Точку OUT я и обрабатываю в прерывании. В нём же я складываю партию данных для передачи через точку IN, они благополучно уходят на хост ( длина пакета не более 32 байт) . Это происходит при вызове функций на хосте: ЗАПИСЬ В OUT -- ЧТЕНИЕ ИЗ IN. Но если на хосте вызвать только ЧТЕНИЕ ИЗ IN, то чтение не происходит (даже прерывание не возникает). Или... вы хотите сказать, что для того, чтобы хост забрал данные с помощью ЧТЕНИЕ ИЗ IN, эти данные необходимо сначала записать в буфер отправки точки IN, а хост когда ему надо будет заберёт их?
|
|
|
|
|
Mar 19 2018, 11:10
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 14-10-08
Из: Omsk
Пользователь №: 40 929

|
Цитата(DeNi @ Feb 16 2018, 15:24)  Для Bulk лучше использовать класс WinUSB. Тогда можно использовать драйвер winusb в Windows и linusb в Linux, и работать уже из пользовательского режима. А как сконфигурировать в CubeMX этот класс? В списке для USB Device его нет. Пытаюсь поднять USB_OTG_HS в режиме FS с внутренним phy. Нужно задействовать 5 конечных точек bulk и interrupt. До этого работал на F103 с SPL - проблем с реализацией USB не было. Сгенерил проект на F207 с классом CDC, под IAR, начал переконфигурировать конечные точки и получил интересный результат - конечная точка типа IN передает данные только в том случае, когда ее номер равен 0x81. Если изменить номер на 0x82, 0x83 и.т.д. данные не передаются. Если задать две точки 0x81, 0x82 передает данные только через 0x81. Выделенное прерывание на EP1 в проекте не используется. Есть ли известное решение данной проблемы?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|