|
STM32F4xx Isochronous Feedback, Обратная связь для асихронной EP, нет запроса на чтение FB EP |
|
|
|
Oct 2 2013, 00:29
|
Участник

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

|
Собственно вопрос вот в чем, пытаюсь запустить асинхронный режим с явной обратной связью через feedback EP, естественно начал с изучения примеров и стандарта, вроде все получилось, устройство определяется, USBlyzer-ом вижу что идут OUT пакеты, а IN нет, хост время от времени делает URB Sync Reset Pipe and Clear Stall (success), затем идет, как я понял задержанная, передача URB Isoch Transfer (issued) и по завершению, после передачи OUT пакета, по IN - 0 bytes data. При этом никаких прерываний по FB EP не происходит  Вот я никак и не могу понять как мне собственно передать 3 байтный FB пакет на хост. Использую STM OTG Driver 2.1 и переделанный ихний же пример USB аудио. Контрольную точку для явной обратной связи в дескрипторе описал уверен что правильно, но так и не могу дождаться epin прерывания по этой точке, по нулевой (при конфигурации) прерывания происходят как при out, так и при in пакетах. Возможно кто то сталкивался, или делал что то похожее, помогите плиз, или подскажите куда копать, уже 4 день не могу заставить работать. Пробовал при инициализации передать по feedback EP: Код static uint8_t usbd_audio_Init (void *pdev, uint8_t cfgidx) { /* Open EP OUT/IN */ DCD_EP_Open(pdev, AUDIO_OUT_EP, AUDIO_OUT_PACKET, USB_OTG_EP_ISOC); DCD_EP_Open(pdev, AUDIO_IN_EP, AUDIO_IN_PACKET, USB_OTG_EP_ISOC); DCD_EP_Tx (pdev, AUDIO_IN_EP, bufs, 3); /* Initialize the Audio output Hardware layer */ if (AUDIO_OUT_fops.Init(USBD_AUDIO_FREQ, DEFAULT_VOLUME, 0) != USBD_OK){ return USBD_FAIL; }
/* Prepare Out endpoint to receive audio data */ DCD_EP_PrepareRx(pdev, AUDIO_OUT_EP, (uint8_t*)IsocOutBuff, AUDIO_OUT_PACKET);
return USBD_OK; } Еще хуже, устройство перестает работать, хотя и по прежнему определяется правильно. Вот дескрипторы: CODE /* Configuration 1 */ 0x09, /* bLength */ USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */ LOBYTE(AUDIO_CONFIG_DESC_SIZE), /* wTotalLength 118 bytes*/ HIBYTE(AUDIO_CONFIG_DESC_SIZE), 0x02, /* bNumInterfaces */ 0x01, /* bConfigurationValue */ 0x00, /* iConfiguration */ 0xC0, /* bmAttributes BUS Powred*/ 0x32, /* bMaxPower = 100 mA*/ /* 09 byte*/
/* USB Speaker Standard interface descriptor */ AUDIO_INTERFACE_DESC_SIZE, /* bLength */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ 0x00, /* bInterfaceNumber */ 0x00, /* bAlternateSetting */ 0x00, /* bNumEndpoints */ USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */ AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ 0x00, /* iInterface */ /* 09 byte*/
/* USB Speaker Class-specific AC Interface Descriptor */ AUDIO_INTERFACE_DESC_SIZE, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */ 0x00, /* 1.00 */ /* bcdADC */ 0x01, 0x27, /* wTotalLength = 39*/ 0x00, 0x01, /* bInCollection */ 0x01, /* baInterfaceNr */ /* 09 byte*/
/* USB Speaker Input Terminal Descriptor */ AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */ 0x01, /* bTerminalID */ 0x01, /* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */ 0x01, 0x00, /* bAssocTerminal */ 0x02, /* bNrChannels */ 0x03, /* wChannelConfig 0x0003 - Left&Right; 0x0000 - Mono; 0x0004 - FrontCenter */ 0x00, 0x00, /* iChannelNames */ 0x00, /* iTerminal */ /* 12 byte*/
/* USB Speaker Audio Feature Unit Descriptor */ 0x09, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */ AUDIO_OUT_STREAMING_CTRL, /* bUnitID */ 0x01, /* bSourceID */ 0x01, /* bControlSize */ AUDIO_CONTROL_MUTE, /* bmaControls(0) */ 0x00, /* bmaControls(1) */ 0x00, /* iTerminal */ /* 09 byte*/
/*USB Speaker Output Terminal Descriptor */ 0x09, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */ 0x03, /* bTerminalID */ 0x02, /* wTerminalType 0x0302, headphones*/ 0x03, 0x00, /* bAssocTerminal */ 0x02, /* bSourceID */ 0x00, /* iTerminal */ /* 09 byte*/
/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ /* Interface 1, Alternate Setting 0 */ AUDIO_INTERFACE_DESC_SIZE, /* bLength */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ 0x01, /* bInterfaceNumber */ 0x00, /* bAlternateSetting */ 0x00, /* bNumEndpoints */ USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ 0x00, /* iInterface */ /* 09 byte*/
/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */ /* Interface 1, Alternate Setting 1 */ AUDIO_INTERFACE_DESC_SIZE, /* bLength */ USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ 0x01, /* bInterfaceNumber */ 0x01, /* bAlternateSetting */ 0x02, /* bNumEndpoints */ USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ 0x00, /* iInterface */ /* 09 byte*/
/* USB Speaker Audio Streaming Interface Descriptor */ AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */ 0x01, /* bTerminalLink */ 0x00, /* bDelay */ 0x01, /* wFormatTag AUDIO_FORMAT_PCM 0x0001*/ 0x00, /* 07 byte*/
/* USB Speaker Audio Type I Format Interface Descriptor */ 0x0B, /* bLength */ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */ AUDIO_FORMAT_TYPE_I, /* bFormatType */ 0x02, /* bNrChannels */ AUDIO_FRAME_SIZE, /* bSubFrameSize; bytes per frame */ AUDIO_BITRESOLUTION, /* bBitResolution; bits per sample */ 0x01, /* bSamFreqType only one frequency supported */ SAMPLE_FREQ(USBD_AUDIO_FREQ), /* Audio sampling frequency coded on 3 bytes */ /* 11 byte*/
/* Endpoint 1 - Standard Descriptor */ AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_OUT_EP, /* bEndpointAddress 1 out endpoint, 0х01*/ USB_ENDPOINT_TYPE_ISOCHRONOUS | (1<<2), /* bmAttributes, isochronus, async */ AUDIO_PACKET_SZE(USBD_AUDIO_FREQ), /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */ 0x01, /* bInterval */ 0x01, /* bRefresh */ AUDIO_IN_EP, /* bSynchAddress */ /* 09 byte*/
/* Endpoint - Audio Streaming Descriptor*/ AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */ AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_ENDPOINT_GENERAL, /* bDescriptor */ 0x00, /* bmAttributes, default 0x00 */ 0x00, /* bLockDelayUnits */ 0x00, /* wLockDelay */ 0x00, /* 07 byte*/
/* Endpoint 2 - Standard Descriptor, FB */ AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ AUDIO_IN_EP, /* bEndpointAddress 2, in FB endpoint, 0х81*/ USB_ENDPOINT_TYPE_ISOCHRONOUS|(1<<4), /* bmAttributes, feedback endpoint(explict) */ 0x03, 0x00, /* wMaxPacketSize in Bytes */ 0x01, /* bInterval */ 0x05, /* bRefresh */ 0x00, /* bSynchAddress */ /* 09 byte*/
Сообщение отредактировал Left Radio - Oct 2 2013, 00:41
|
|
|
|
|
 |
Ответов
|
Oct 4 2013, 02:37
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(Left Radio @ Oct 4 2013, 09:23)  Респект  , а какие ограничения avr32 неустроили? LPC18**/LPC43** неплохие машинки, тоже смотрел в их сторону, но потом решил в пользу STM32F407, так как знаю их лучше, а с LPC никогда не работал. Пока устраивает полностью, жаль конечно нет HS PHY. Сейчас довожу до ума работу с UAC 1 и доделываю управление для Si5351. Можно сказать в самом начале  Не устроили 2 момента: 1 - размер буфера EP 512 байт, что уменьшает вдвое пропускную способность, отчего для UAC1 доступна частота максимум 48кГц; 2 - невозможность сконфигурировать 2 EP с одним номером, но с разными направлениями. Это не позволило запустить ввод с SDR-Widget с драйверами от других UAC2 карт, при том, что вывод работает. У меня нет опыта работы ни с LPC, ни с STM, поэтому мне проще  (с АВР32 его тоже не было), а выбор LPC обусловлен наличием HS PHY.
|
|
|
|
|
Oct 4 2013, 05:27
|
Участник

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

|
Цитата(nikkov @ Oct 4 2013, 05:37)  Невозможность сконфигурировать 2 EP с одним номером, но с разными направлениями. Это не позволило запустить ввод с SDR-Widget с драйверами от других UAC2 карт, при том, что вывод работает. А вот это интересно, хорошо что в STM так можно, собственно сейчас у меня у IN и OUT один номер, значит можно будет надеяться прикрутить драйвера других карт, и работать в обеих направлениях  . 512 байт конечно печально, а я то думаю почему только 48 для UAC1, когда в исходниках лазил. По поводу HS PHY, прикручу USB3320, когда конечно нет предпочтений возможно действительно проще, всё равно ведь изучать, так лучше уж то что больше подходит  , а мне проще внешний прикрутить чем переходить сейчас на LPC. Единственный пока недостаток - невозможность работы с форматом 24 BCK на фрейм, только 16/32, правда не знаю умеет ли это LPC, но при большой необходимости можно завести данные в ПЛИС, а там уже получить любой формат не проблема. Плюс ПЛИС даст еще кучу всяких возможностей, например соединиться по параллельной шине и получить сколько нужно I2S выходов а не только 2. Но это если и буду делать, то не сейчас, хотя EPM570 уже прикупил  .
|
|
|
|
|
Oct 4 2013, 05:46
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(Left Radio @ Oct 4 2013, 12:27)  А вот это интересно, хорошо что в STM так можно, собственно сейчас у меня у IN и OUT один номер, значит можно будет надеяться прикрутить драйвера других карт, и работать в обеих направлениях  . 512 байт конечно печально, а я то думаю почему только 48 для UAC1, когда в исходниках лазил. По поводу HS PHY, прикручу USB3320, когда конечно нет предпочтений возможно действительно проще, всё равно ведь изучать, так лучше уж то что больше подходит  , а мне проще внешний прикрутить чем переходить сейчас на LPC. Единственный пока недостаток - невозможность работы с форматом 24 BCK на фрейм, только 16/32, правда не знаю умеет ли это LPC, но при большой необходимости можно завести данные в ПЛИС, а там уже получить любой формат не проблема. Плюс ПЛИС даст еще кучу всяких возможностей, например соединиться по параллельной шине и получить сколько нужно I2S выходов а не только 2. Но это если и буду делать, то не сейчас, хотя EPM570 уже прикупил  . У LPC тоже 8/16/32 у I2S, но это вроде не проблема, т.к. почти все ЦАП-ы поддерживают 32BCK, а если нет, то либо ПЛИС, либо что-то типа AD1896 должно подойти. Кстати, чем еще интересен LPC43XX, это режимом SGPIO, который позволяет реализовать многоканальный I2S. Немного на-оффтопил я тут  , но тема лично мне интересная.
|
|
|
|
Сообщений в этой теме
Left Radio STM32F4xx Isochronous Feedback Oct 2 2013, 00:29 controller_m30 А что такое feedback EP? Это просто EndPoint1...7,... Oct 2 2013, 08:20 ig_z QUOTE (Left Radio @ Oct 2 2013, 03:29) Во... Oct 2 2013, 09:52 Left Radio controller_m30, interrupt и/или bulk передачи сдес... Oct 2 2013, 12:20 ig_z QUOTE (Left Radio @ Oct 2 2013, 15:20) ig... Oct 2 2013, 13:38 Left Radio Да, хост вроде запрашивает данные, это вижу в USBl... Oct 2 2013, 14:25 Left Radio Цитата(ig_z @ Oct 2 2013, 16:38) У меня Л... Oct 2 2013, 18:40 ig_z QUOTE (Left Radio @ Oct 2 2013, 21:40) А ... Oct 3 2013, 08:19 Left Radio Раз никто не помогает пришлось самому , не скажу ч... Oct 3 2013, 03:22 Left Radio Спасибо, значит я пришел к такому же решению. С фо... Oct 3 2013, 08:25 nikkov Left Radio, UAC 1 реализуете? Oct 3 2013, 08:47 Left Radio Да, UAC 1, за UAC 2 пока не берусь, доведу полност... Oct 3 2013, 19:34 nikkov Цитата(Left Radio @ Oct 4 2013, 02:34) Да... Oct 4 2013, 01:44  ig_z QUOTE (nikkov @ Oct 4 2013, 05:37) У меня... Oct 4 2013, 09:11   nikkov Цитата(ig_z @ Oct 4 2013, 16:11) А Вы мог... Oct 4 2013, 12:39    ig_z QUOTE (nikkov @ Oct 4 2013, 15:39) Просто... Oct 4 2013, 13:51     nikkov Цитата(ig_z @ Oct 4 2013, 20:51) А что та... Oct 5 2013, 11:14 Left Radio Проясните каким образом хост увеличивает количеств... Oct 8 2013, 08:24 nikkov Цитата(Left Radio @ Oct 8 2013, 15:24) Пр... Oct 8 2013, 08:48 Left Radio Спасибо, поизучаю, а буфер там циклический, точно ... Oct 8 2013, 10:01 nikkov Цитата(Left Radio @ Oct 8 2013, 17:01) Сп... Oct 8 2013, 10:07 Left Radio Хм..., у меня абсолютно такой же алгоритм, разве ч... Oct 8 2013, 11:04 maxis Реализую всё тоже самое что и у автора, но только ... Dec 16 2015, 14:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|