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

STM32F7xx USB Audio Class 2 Device

Реализаций USB Audio Class 1 с асинхронной передачей и точкой обратной связи достаточно в Интернете и оно работает, обычно на FS.

Захотелось реализовать версию 2 и на HS. Поскольку хочется иметь поддержку высоких скоростей без значительных процессорных затрат, первично отлаженный протокол положенный на стандартный Cebu код стал перекладывать на DMA и отдельные EP1 прерывания. Так же код Cube был творчески переработан под решение конкретной задачи. Все бы хорошо и работает.... кроме одного. Не работает обратная связь.

Прим данные идет через OUTEP1, а обратная связь на INEP1. С приемом никаких проблем нет. А вот с отправкой неожиданная проблема. Точка открывается нормально с обеих сторон. Хост шлет запросы каждые 8 SOF, как указано в дескрипторе. Это видно и по Device Monitoring Studio и по прерываниям на INEP1 - постоянное прерывание NAK, сигнализирующее о том, что был отправлен пустой пакет, вместо данных (In case of isochronous IN endpoints the interrupt gets generated when a zero length packet is transmitted due to unavailability of data in the Tx FIFO.) При этом DIEPCTL, DIEPSIZ и DIEPDMA запрограммированы корректно, но DMA не начинает заполнять Fifo данными. Бывают разовые случаи передачи одного первого пакета, но после все равно данные не забираются. Это видно не только по пустым отправкам, но и по тому, что DIEPSIZ не модифицируется, а должен был бы считать назад. Без DMA все работало, но, к сожалению, нельзя указать DMA по отдельным точкам, а так FeedBack - 4 байта и проще было бы засунуть в Fifo руками, но контроллер не дает и вызывает HarFault при такой попытке. Особенность всего в том, что и прием и передача делаются изохронными точками. Четность при посылке учитывается, но я даже пытался с ней играть - не помогало. Да и не могло, четность работает уже когда данные в Fifo, а я не могу их туда засунуть. Уже ходят мысли перенести FeedBack точку на INEP2 и вернуть обработку на основное прерывание. Может кто сталкивался с таким?

Процессор конкретно 32F745VG, ULPI chip USB3320C. Хостом работает комп с Win10, поскольку в них есть встроенные драйвера USB Audio Class 2. Устройство распознается и работает, включая ASIO в Foobar2000. Но поскольку не работает FB, то буфер достаточно быстро опустошается, на 44/48 кГц где-то за пару минут, а на 352/384 кГц за секунды.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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