|
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 2 2013, 12:20
|
Участник

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

|
controller_m30, interrupt и/или bulk передачи сдесь нипричем, стандарт на USB допускает 4 вида синхронизации изохронных передач: None; Asynchronous; Syncrhonous; Adaptive. Ваши клонки работают в Adaptive, то есть подстравают свою частоту под часоту SOF пакетов USB, мне такой режим, к сожалению, неподходит, так как устройство должно работать от внешнего такта, который нельзя подстроить исходя из частоты SOF пакетов. Feedback Endpoint это обычная конечная точка, работающая в обратном направлении с конечной точкой передачи аудиоданных, она дожна быть обьявлена как изохронная и в поле bmAttributes, в битах [5:4], должно быть 10, что указывает на использование этой конечной токи для явной обратной связи. А HID в Ваших колонках совсем для другого, это просто управление.
ig_z, спасибо, я смотрел исходники sdr-widget, там поле bRefresh было как у меня. Я пробовал ставить 0, но эффекта ноль, каким образом Вы отправляете данные обратной сязи? Получаете прерываие по INEP?
Сообщение отредактировал Left Radio - Oct 2 2013, 23:37
|
|
|
|
|
Oct 2 2013, 13:38
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (Left Radio @ Oct 2 2013, 15:20)  ig_z, спасибо, я смотрел исходники wm-widget, там поле bRefresh было как у меня. Я пробовал ставить 0, но эффекта ноль, каким образом Вы отправляете данные обратной сязи? Получаете прерываие по INEP? У меня ЛПЦ. Отправляет/принимает юсб модуль. Я только подготавливаю необходимые данные. Т.е. вы говорите драйверу хоста, что у вас изохронный асинхронный експлисит девайс. Хост будет слать аудио данные на каждый соф и запрашивать фидбек данные через заданное вами кол-во соф-ов. Если вы правильно настроили фидбековскую конечную точку и там есть данные, то юсб модуль отправит данные хосту. Как это сделано в стм32 я не в курсе. Стараюсь как можно подальше отложить необходимость работы с ними
|
|
|
|
Сообщений в этой теме
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 Да, хост вроде запрашивает данные, это вижу в 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 Left Radio Хороший проект, респект , а какие ограничения avr3... Oct 4 2013, 02:23 nikkov Цитата(Left Radio @ Oct 4 2013, 09:23) Ре... Oct 4 2013, 02:37  Left Radio Цитата(nikkov @ Oct 4 2013, 05:37) Невозм... Oct 4 2013, 05:27   nikkov Цитата(Left Radio @ Oct 4 2013, 12:27) А ... Oct 4 2013, 05:46  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
|
|
|