Перейти к содержанию
    

Так точки ж абсолютно независимые

Нужно принять - проверяем буфер точки OUT. А в её прерывании просто складываем в буфер

Нужно передать - проверяем активность передачи и или докладываем в буфер передачи, или сразу вызываем передачу. В прерывании точки IN, если в буфере что-то есть, опять вызываем передачу. Нечего передавать - сбрасываем флаг

Как-то так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так точки ж абсолютно независимые

Нужно принять - проверяем буфер точки OUT. А в её прерывании просто складываем в буфер

Нужно передать - проверяем активность передачи и или докладываем в буфер передачи, или сразу вызываем передачу. В прерывании точки IN, если в буфере что-то есть, опять вызываем передачу. Нечего передавать - сбрасываем флаг

Как-то так

Точку OUT я и обрабатываю в прерывании. В нём же я складываю партию данных для передачи через точку IN, они благополучно уходят на хост ( длина пакета не более 32 байт) . Это происходит при вызове функций на хосте: ЗАПИСЬ В OUT -- ЧТЕНИЕ ИЗ IN.

Но если на хосте вызвать только ЧТЕНИЕ ИЗ IN, то чтение не происходит (даже прерывание не возникает).

Или... вы хотите сказать, что для того, чтобы хост забрал данные с помощью ЧТЕНИЕ ИЗ IN, эти данные необходимо сначала записать в буфер отправки точки IN, а хост когда ему надо будет заберёт их?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или... вы хотите сказать, что для того, чтобы хост забрал данные с помощью ЧТЕНИЕ ИЗ IN, эти данные необходимо сначала записать в буфер отправки точки IN, а хост когда ему надо будет заберёт их?

Конечно. Данные на нижнем уровне должны быть готовы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для 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 в проекте не используется.

Есть ли известное решение данной проблемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...