Продолжаю затирать до дыр 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
как определить что именно из этого списка произошло намеков нет

, сам до причин докопаться пока не смог, INCOMPISOOUT вызывается похоже каждый микрофрейм даже когда хост не шлет данные в EP1, а сразу после инициализации и установки altsettings0. Уверен правда что не первый пункт так как выделяю для FIFO больше размера одного пакета(192 байт), на всякий случай попробовал разные значения в разумных пределах, но как и ожидал ничего не поменялось.
P.S. Возможно у кого нибудь есть любой рабочий проект для обмена с использованием isochronous EP, необязательно аудио, в HS под STM? Был бы признателен за любой пример.
Сообщение отредактировал Left Radio - Oct 1 2014, 20:23