kostya-m 0 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба Реализаций 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 кГц за секунды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться