реклама на сайте
подробности

 
 
> STM32F407+USB3300 потеря пакетов isochronous, бесконечное прерывание incomplite OUT
Left Radio
сообщение Sep 28 2014, 22:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 4-11-08
Пользователь №: 41 361



Всем доброго времени! Прошу подскажите куда копать уже несколько дней и бессонных ночей sm.gif никак не поедут лыжи sad.gif В общем пытаюсь запустить аудио поток по HS USB используя PHY USB3300 и STM32F407VE на своей плате, устройство определяется правильно, драйвера устанавливаются для UAC1 в Win7, и нормально видится в linux в UAC1 и UAC2, но как только устройство правильно приконектилось и пошли SOF-ы начинает вызваться прерывание Incomplete isochronous OUT (INCOMPISOOUT в регистре OTG_HS_GINTSTS), причем получаю их постоянно, одно за другим, данные по EP1 естественно при этом не идут, а по EP0 обмен с компом идет нормально (иначе бы ОС не увидело бы девайса, да и перепроверил).

Я использую OTG драйвер от ST и там в обработчике DCD_IsoOUTIncomplete_ISR только сбрасывается прерывание и все, что явно в противоречии с процедурой описанной в доке (Incomplete isochronous OUT data transfers, стр. 1205), пробовал сделать обработку прерывания как там написано, но толку с этого ноль sad.gif Никак не могу понять почему происходит потеря пакетов, код рабочий, с встроенным FS PHY все работает отлично на другой плате(естественно с реконфигурацией проекта под FS).
Железо скорее всего ни причем, так как идет нормальный обмен по EP0, корректно обрабатываются запросы на дескрипторы и на установку AltSettings 0/1. В качестве проверки запускал VCP HS на устройстве с тем же драйвером OTG от ST, правда там bulk а не isochronous, но главное что работает и работает стабильно.
Дескрипторы если нужно выложу, но мне кажется скорее всего проблема не там, и еще подскажите пожалуйста по встроенному DMA под USB HS, как его настроить и куда оно будет ложить данные? Про выравнивание при его использовании знаю, в лоб включение DMA ничего не решает, все также девайс определяется правильно но и по прежнему теряются пакеты sad.gif

Буду рад за любую подсказку, спасибо!

Сообщение отредактировал Left Radio - Sep 29 2014, 01:21
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Left Radio
сообщение Oct 1 2014, 16:33
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 4-11-08
Пользователь №: 41 361



Продолжаю затирать до дыр RM0090, в главе Generic isochronous OUT data transfer(стр. 1204) описана общая схема, у меня все полностью соответствует этой схеме, значения регистров OTG_HS_GINTSTS, OTG_HS_DOEPCTLx, OTG_HS_DSTS также нормальны, единственное что это не совсем понятен механизм:
3. The application must read all isochronous OUT data packets from the receive FIFO(data and status) before the end of the periodic frame (EOPF interrupt in OTG_HS_GINTSTS).

Как я понимаю выполнить это требование можно только получая прерывание готовности данных по приему OTG_HS_DOEPINTx.XFRC или по RXFLVL(как я понял только при вкл. DMA?), но эти прерывания почему то не приходят по OUT EP данных. Если же попытаться использовать прерывания SOF или EOPF то уже не получится вычитать данные так как требует документация, по EOPF можно только подготовить EP к приему и насколько понял правильно это будет делать каждый восьмой микрофрейм для EP c bInterval - 1мс (0x04 в дескрипторе EP), так ли это? Попробовал так сделать, данные начали приходить и приходят все пакеты, но с ошибками, а почему опять неясно, либо я вообще все делаю неправильно, либо другие аппаратные/программные проблемы. По аппаратным я сомневаюсь, плата разведена более-менее правильно и соблюдены рекомендации по USB3300, линии данных/клок максимум 30-40мм, питание чистое, да и VCP, как уже писал, работает просто отлично.

Далее из возможных причин возникновения INCOMPISOOUT указываются:
– When the receive FIFO cannot accommodate the complete ISO OUT data packet, the core drops the received ISO OUT data
– When the isochronous OUT data packet is received with CRC errors
– When the isochronous OUT token received by the core is corrupted
– When the application is very slow in reading the data from the receive FIFO

как определить что именно из этого списка произошло намеков нет sad.gif, сам до причин докопаться пока не смог, INCOMPISOOUT вызывается похоже каждый микрофрейм даже когда хост не шлет данные в EP1, а сразу после инициализации и установки altsettings0. Уверен правда что не первый пункт так как выделяю для FIFO больше размера одного пакета(192 байт), на всякий случай попробовал разные значения в разумных пределах, но как и ожидал ничего не поменялось.

P.S. Возможно у кого нибудь есть любой рабочий проект для обмена с использованием isochronous EP, необязательно аудио, в HS под STM? Был бы признателен за любой пример.

Сообщение отредактировал Left Radio - Oct 1 2014, 20:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 05:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016