|
LPC2148 + USB Audio Device + кодек PCM3002, проблемы с выводом - рассинхронизация |
|
|
|
Jan 21 2008, 10:44
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Сделал я одно устройство типа генератора сигнала - измерения отклика на LPC2148 и кодеке PCM3002. Частота дискретизации определяется внешним кварцевым генератором, сигнал которого подается на таймер-счетчик в LPC2148, он генерирует сигналы для кодека. Кодек подключен к LPC на SPI1 в 16 разрядном режиме. Проект построен на IAR USB Audio Device, он оказался наиболее полным (и ввод, и вывод). Возникла проблема, бьюсь уже несколько недель - генерация сигнала искажается через каждые 20с на 1-2 сек. Увеличение буффера помогает немного - искажения возникают реже, но не исчезают, так как в этом проекте генерация начинается только после заполнения буффера на 2/3. Адаптивный режим (как в исходном проекте) отключил (не устраивает! ), прерывания fiq происходят регулярно синхронно с частотой дискретизации кодека. Подозреваю - причина в том, что скорость поступления данных по USB меньше, чем вывожу в кодек. Искал по форуму (http://electronix.ru/forum/index.php?showtopic=20117&hl=), изучал стандарты - audio10.pdf (с usb.org), пробовал различные режимы - не получается. Может подскажете чего-нибуть, или объясните, как настроить правильно USB дескрипторы и задержки в них , использовать ли синхронный режим? Вот дескрипторы интерфейса 1 - генерация сигнала (Speaker в проекте)
// Interface 1 // AudioStreaming Interface Descriptor // Zero-bandwidth Alternate Setting 0 // Standard AS Interface Descriptor sizeof(UsbStandardInterfaceDescriptor_t), UsbDescriptorInterface, 1, 0, 0, UsbDeviceClassAudio, AUDIOSTREAMING, PR_PROTOCOL_UNDEFINED, 0,
// Operational Alternate Setting 1 // Standard AS Interface Descriptor sizeof(UsbStandardInterfaceDescriptor_t), UsbDescriptorInterface, 1, 1, 1, UsbDeviceClassAudio, AUDIOSTREAMING, PR_PROTOCOL_UNDEFINED, 0,
// Class-specific AS General Interface Descriptor sizeof(UsbClassSpecificASInterfaceDescriptor_t), CS_INTERFACE, AS_GENERAL, SpkInTermID, 2, _2BL(PCM),
// USB Spk Type I Format Type Descriptor sizeof(UsbTypeIFormatTypeDescriptor_t)+ 3, CS_INTERFACE, FORMAT_TYPE, FORMAT_TYPE_I, 1, SubFrameSize, 8*SubFrameSize, 1, (Int8U)(SampFreq),(Int8U)(SampFreq>>8),(Int8U)(SampFreq>>16),
// USB SPK Standard Endpoint Descriptor sizeof(StandardASEndpointDescriptor_t), UsbDescriptorEp, UsbEpOut(SpkEp>>1), // (Int8U)UsbEpTransferIsochronous + (Int8U)UsbEpSynchAdaptive, (Int8U)UsbEpTransferIsochronous + (Int8U)UsbEpSynchAsynchronous, _2BL(SpkEpMaxSize), 1, 0, 0,
// USB SPK Class-specific Isoc. Audio Data Endpoint Descriptor sizeof(ClassSpecASEndpointDescriptor_t), CS_ENDPOINT, EP_GENERAL, 0, 0, _2BL(0),
|
|
|
|
|
 |
Ответов
|
Jan 23 2008, 08:14
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(lebiga @ Jan 21 2008, 16:44)  Сделал я одно устройство типа генератора сигнала... На память попытаюсь написать, т.к. в свое время пытался вникнуть в режимы USB. Для такого режима, когда частота кодека не подстраивается под метки USB, нужен асинхронный изохронный режим, который не поддерживается (прямо это нигде не написано, но поиском находил сообщение об этом от авторов) драйверами USB audio в WinXP.
|
|
|
|
|
Jan 28 2008, 09:18
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(nikkov @ Jan 23 2008, 11:14)  На память попытаюсь написать, т.к. в свое время пытался вникнуть в режимы USB. Для такого режима, когда частота кодека не подстраивается под метки USB, нужен асинхронный изохронный режим, который не поддерживается (прямо это нигде не написано, но поиском находил сообщение об этом от авторов) драйверами USB audio в WinXP. Поддерживается, зависит от драйверов, писали- нужно доустановить QFE для USB2.0, если не установлено драйверами для чипсета. Это и все другое для USB AUDIO обсуждалось на http://electronix.ru/forum/index.php?showtopic=1202&hl= и на http://electronix.ru/forum/index.php?showtopic=20117&hl=Увеличение буффера помогает, но немного, через каждые 30-40сек все равно есть провалы. Alex11 писал: Цитата Синхронизация работает, но через задницу, с дикими задержками если говоришь, что скорость уменьшить чуть-чуть. Поэтому приходилось говорить, что сбрось сильно, потом подними обратно, тоже сильно. В этом случае колебания выше, но время реакции меньше, в итоге требуемый размер буфера поджался. может кто подскажет, как настроить такой режим?
|
|
|
|
|
Jan 30 2008, 04:01
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(lebiga @ Jan 28 2008, 15:18)  Поддерживается, зависит от драйверов, писали- нужно доустановить QFE для USB2.0, если не установлено драйверами для чипсета. Это и все другое для USB AUDIO обсуждалось на http://electronix.ru/forum/index.php?showtopic=1202&hl= и на http://electronix.ru/forum/index.php?showtopic=20117&hl=Увеличение буффера помогает, но немного, через каждые 30-40сек все равно есть провалы. Alex11 писал: может кто подскажет, как настроить такой режим? Я эти темы читал, даже одна из них моя :-) А как реализована подстройка размера пакета? Есть управляющий обратный канал? Про QFE не слышал, там что-то изменено в отношении USB-audio? Мне показалось, что это патч для USB системы
|
|
|
|
|
Jan 30 2008, 08:34
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(nikkov @ Jan 30 2008, 07:01)  Я эти темы читал, даже одна из них моя :-) А как реализована подстройка размера пакета? Есть управляющий обратный канал? Про QFE не слышал, там что-то изменено в отношении USB-audio? Мне показалось, что это патч для USB системы Размер пакета вроде не меняется, 96 байт. Это проект иара AudioDevice (\ARM\EXAMPLES\NXP\LPC214x\AudioDevice) Управление стандартное - интерфейс 0 (регуляторы), дополнительного интерфейса не делал. Мне казалось, что это управление это по умолчанию??? или как?
|
|
|
|
|
Jan 30 2008, 08:56
|
Местный
  
Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332

|
Цитата(lebiga @ Jan 30 2008, 14:34)  Размер пакета вроде не меняется, 96 байт. Это проект иара AudioDevice (\ARM\EXAMPLES\NXP\LPC214x\AudioDevice) Управление стандартное - интерфейс 0 (регуляторы), дополнительного интерфейса не делал. Мне казалось, что это управление это по умолчанию??? или как? Тут надо немного теории. Для аудио используется изохронный тип передачи. Для него есть 3 типа синхронизации: адаптивный, синхронный и асинхронный. адаптивный - подстраивает свою частоту под поток данных. Так работает пример из иара (насколько я помню); синхронный - подстраивает свою частоту под частоту USB кадров; асинхронный - приемник должен ЯВНО указывать хосту какой размер кадра ему надо передавать, чтобы избежать переполнения/опустошения буфера. Для этого надо создать еще одну конечную точку обратной связи и с ее помощью информировать хост об изменении размера кадра. Более подробно (но тоже немного) можно прочитать, например, в книге Агурова и спецификации USB :-) .
|
|
|
|
|
Jan 30 2008, 10:49
|

Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 22-06-06
Из: Киев
Пользователь №: 18 292

|
Цитата(nikkov @ Jan 30 2008, 11:56)  ...асинхронный - приемник должен ЯВНО указывать хосту какой размер кадра ему надо передавать, чтобы избежать переполнения/опустошения буфера. Для этого надо создать еще одну конечную точку обратной связи и с ее помощью информировать хост об изменении размера кадра. Более подробно (но тоже немного) можно прочитать, например, в книге Агурова и спецификации USB :-) . Спасибо, я и использовал асинхронный, только не знал, каким образом делать обратную связь, думал, что тики юсб можно подстроить. Может поделитесь каким - нибуть примером, как посылать запрос на изменение размера буффера? Агурова нашел, изучаю. Спецификацию audio10.pdf с Audio Device тоже имею.
|
|
|
|
Сообщений в этой теме
lebiga LPC2148 + USB Audio Device + кодек PCM3002 Jan 21 2008, 10:44      nikkov Цитата(lebiga @ Jan 30 2008, 16:49) Спаси... Jan 30 2008, 10:59 khach А что скажете на счет идеи забить на виндовые прик... Jan 30 2008, 12:48 nikkov Цитата(khach @ Jan 30 2008, 18:48) А что ... Jan 30 2008, 14:32  lebiga Цитата(nikkov @ Jan 30 2008, 17:32) Я дум... Jan 31 2008, 08:20   nikkov Цитата(lebiga @ Jan 31 2008, 14:20) Не ув... Jan 31 2008, 08:28    lebiga Цитата(nikkov @ Jan 31 2008, 11:28) Так в... Feb 7 2008, 08:54     nikkov Цитата(lebiga @ Feb 7 2008, 14:54) Что-то... Feb 7 2008, 09:12      lebiga Цитата(nikkov @ Feb 7 2008, 12:12) У обеи... Feb 7 2008, 09:23       lebiga А если сделать стерео воспроизведение и запись - к... Feb 11 2008, 11:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|