|
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 8 2013, 08:24
|
Участник

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

|
Проясните каким образом хост увеличивает количество байт в посылке? Дело в том что при воспроизведении время от времени проскакивают слабозаметные щелчки, скорость выдачи байт я засинхронизировал, тут проблем нет, думаю не может быть причина в том, что теперь ведь посылки с хоста не равны 384 байт (это для 16/96), а при заполнении буфера, если посылка например 388 байт и она не умещается в конец буфера, то я ее режу на две, одну часть в конец, все что не влезло в начало. Разрезается естественно только по 2 байта(16), но может ли хост выдать нечетное количество байт, из-за чего и появляются щелчки? Буфер читает DMA по кругу.
|
|
|
|
|
Oct 8 2013, 08:48
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(Left Radio @ Oct 8 2013, 15:24)  Проясните каким образом хост увеличивает количество байт в посылке? Дело в том что при воспроизведении время от времени проскакивают слабозаметные щелчки, скорость выдачи байт я засинхронизировал, тут проблем нет, думаю не может быть причина в том, что теперь ведь посылки с хоста не равны 384 байт (это для 16/96), а при заполнении буфера, если посылка например 388 байт и она не умещается в конец буфера, то я ее режу на две, одну часть в конец, все что не влезло в начало. Разрезается естественно только по 2 байта(16), но может ли хост выдать нечетное количество байт, из-за чего и появляются щелчки? Буфер читает DMA по кругу. Драйвер USB Audio под Windows не слишком точно отслеживает изменение размера данных, т.е. относительно небольшие отклонения от нормального размера он просто не успевает отрабатывать. Поэтому в *-widget экспериментально подбирали ту дельту, на которое скачком изменялось значение передаваемое через FB EP. С той стратегией, что там сейчас работает проблем вроде нет, хотя на первых этапах были. Код там несложный для понимания, находится в файле uac1_device_audio_task.c
|
|
|
|
Сообщений в этой теме
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 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, 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
|
|
|