Jump to content

    
Sign in to follow this  
MAXvaLL

Проектирование USB аудиокарты

Recommended Posts

Народ, помогите идеями и конструктивной критикой.

У кого есть опыт разработки подобного, может поделитесь инфой.

Извините за длинный пост.

 

Итак,

Задача - построение USB аудиокарты с максимально возможным качеством оцифровки за цену доступную для простых смертных. :) (допустим до 5000р.) Желательно без излишних извращений (читай усложнений схемы в цифровой части). Изначально планировалась только запись, но в перспективе хотелось бы и воспроизведение.

=====================================================================

 

Почему?

Готовые изделия нет желания использовать потому, что даже в дорогих устройствах используются далеко не самые лучшие АЦП и ЦАПы. Хорошие, но не лучшие. Экономят буржуи!

А если где и используют the best, то цены совершенно заоблачные.

Можно говорить что это идиотизм, но те кто работал со звуком меня поймут. :biggrin:

=====================================================================

 

Идея от части моя, от части друга-радиолюбителя. Я сам лично довольно зелен еще, поэтому не удивляйтесь возможным несуразицам :05:

 

Было предложено использовать АЦП PCM4222

 

Кратко о нем...

смотрим даташит:

 

Supports Linear PCM, 1-Bit Direct Stream Digital (DSD), and Multi-Bit Modulator Output Data

– Supports PCM Output Sampling Rates from 8kHz to 216kHz

– Select from Classic or Low Group Delay

– Choose from 64x or 128x Oversampled Output Rates for DSD

 

Linear Phase Digital Decimation Filtering

 

Digital High-Pass Filtering Removes DC Offset

 

PCM Audio Serial Port Interface

Supports Left-Justified, I2S™, and TDM Data Formats

 

Разрешение 16-24 бита.

 

2 канала.

 

Как видно штука довольно продвинутая и стоит около 800р. (со слов друга)

 

Планировалось юзать до 24b/192kHz x 2канала

=====================================================================

 

Вопрос 1.

Ваше мнение об этом АЦП. Какие возможны альтернативы (лучше/дешевле).

=====================================================================

 

Пока только запись.

Первые прикидки:

Analog part -> ADC -> AVR -> USB-FIFO

 

АЦП подключаю к spi МП

Скорость потока: 192кГц*24Б*2 =~ 9.22Мбит/с что уже довольно не мало

Соответственно USB FT245 и PDIUSBD12 c 1МБайт/с (8.4МБит) уже не подходят

 

Смотрел ML60851E на 12Мбит/с но у него FIFO буфер какой-то маленький.

Еще смотрел ISP1582 на 480МБит (в расчете и на воспроизведение 192 кГц), но больно уж он навороченный, видимо дорогой, и труднонаходимый.

 

Воспроизведение:

USB-FIFO -> AVR -> DAC -> Аналог

=====================================================================

 

Вопрос 2.

Какой USB конвертер посоветуете?

=====================================================================

 

Вопросы 3 итд.

Насколько вообще идиотично такое решение?

Как сделать по-другому?

=====================================================================

 

Мои прикидки про по-другому:

1. Использование ПЛИС для организации аудио потока вобход МП, а МП для управления. К сожалению в ПЛИС я пока 0 =(

 

2. Взять готовый USB-Audio Кодек/Конвертер с цифровыми входом/выходом. НО дело в том, что я пока видел только со встроенными АЦП и ЦАП (посредственного качества), которые не нужны. Иногда еще встроенный МП. Соответственно

 

Вопрос №Очередной

Посоветуйте USB-Audio Кодек/Конвертер без лишних наворотов и цифровыми вх/вых

=====================================================================

 

Всем спасибо за посильную помощь! :)

Share this post


Link to post
Share on other sites
Народ, помогите идеями и конструктивной критикой.

У кого есть опыт разработки подобного, может поделитесь инфой.

Извините за длинный пост.

 

Итак,

Задача - построение USB аудиокарты с максимально возможным качеством оцифровки за цену доступную для простых смертных. :) (допустим до 5000р.) Желательно без излишних извращений (читай усложнений схемы в цифровой части). Изначально планировалась только запись, но в перспективе хотелось бы и воспроизведение.

=====================================================================

 

Почему?

Готовые изделия нет желания использовать потому, что даже в дорогих устройствах используются далеко не самые лучшие АЦП и ЦАПы. Хорошие, но не лучшие. Экономят буржуи!

А если где и используют the best, то цены совершенно заоблачные.

Можно говорить что это идиотизм, но те кто работал со звуком меня поймут. :biggrin:

=====================================================================

 

Идея от части моя, от части друга-радиолюбителя. Я сам лично довольно зелен еще, поэтому не удивляйтесь возможным несуразицам :05:

 

Было предложено использовать АЦП PCM4222

 

Кратко о нем...

смотрим даташит:

 

Supports Linear PCM, 1-Bit Direct Stream Digital (DSD), and Multi-Bit Modulator Output Data

– Supports PCM Output Sampling Rates from 8kHz to 216kHz

– Select from Classic or Low Group Delay

– Choose from 64x or 128x Oversampled Output Rates for DSD

 

Linear Phase Digital Decimation Filtering

 

Digital High-Pass Filtering Removes DC Offset

 

PCM Audio Serial Port Interface

Supports Left-Justified, I2S™, and TDM Data Formats

 

Разрешение 16-24 бита.

 

2 канала.

 

Как видно штука довольно продвинутая и стоит около 800р. (со слов друга)

 

Планировалось юзать до 24b/192kHz x 2канала

=====================================================================

 

Вопрос 1.

Ваше мнение об этом АЦП. Какие возможны альтернативы (лучше/дешевле).

=====================================================================

 

Пока только запись.

Первые прикидки:

Analog part -> ADC -> AVR -> USB-FIFO

 

АЦП подключаю к spi МП

Скорость потока: 192кГц*24Б*2 =~ 9.22Мбит/с что уже довольно не мало

Соответственно USB FT245 и PDIUSBD12 c 1МБайт/с (8.4МБит) уже не подходят

 

Смотрел ML60851E на 12Мбит/с но у него FIFO буфер какой-то маленький.

Еще смотрел ISP1582 на 480МБит (в расчете и на воспроизведение 192 кГц), но больно уж он навороченный, видимо дорогой, и труднонаходимый.

 

Воспроизведение:

USB-FIFO -> AVR -> DAC -> Аналог

=====================================================================

 

Вопрос 2.

Какой USB конвертер посоветуете?

=====================================================================

 

Вопросы 3 итд.

Насколько вообще идиотично такое решение?

Как сделать по-другому?

=====================================================================

 

Мои прикидки про по-другому:

1. Использование ПЛИС для организации аудио потока вобход МП, а МП для управления. К сожалению в ПЛИС я пока 0 =(

 

2. Взять готовый USB-Audio Кодек/Конвертер с цифровыми входом/выходом. НО дело в том, что я пока видел только со встроенными АЦП и ЦАП (посредственного качества), которые не нужны. Иногда еще встроенный МП. Соответственно

 

Вопрос №Очередной

Посоветуйте USB-Audio Кодек/Конвертер без лишних наворотов и цифровыми вх/вых

=====================================================================

 

Всем спасибо за посильную помощь! :)

 

Если есть непреодолимое желание самостоятельной реализации USB-аудио устройства, то рекомендую посмотреть на TAS1020 или TUSB3200 (обе Texas Instruments). В паре с ними можете использовать любой аудио-кодек с IIS или AC97 интерфейсом.

Щас уже не помню, но по моему реальный драйвер USB-аудио под Win не поддерживает разрядность более 16 (возможно я ошибаюсь, если да - напишите).

Есть еще вариант драйвера USB ASIO ( http://www.usb-audio.com ).

 

Ну и кстати, даже выбор самой продвинутой элементной базы не гарантирует высокого качества звука без правильной разводки и правильного питания.

Share this post


Link to post
Share on other sites

Спасибо за совет! Буду смотреть...

 

Ну и кстати, даже выбор самой продвинутой элементной базы не гарантирует высокого качества звука без правильной разводки и правильного питания.

 

Оно и понятно, когда будет готова схема - обязательно выложу для критики.

Share this post


Link to post
Share on other sites

Качественные аудиокарты не зря стоят таких больших денег.

Чтобы выжать из АЦП или ЦАП все его скажем 24 разряда должен быть очень низкий уровень джиттера, порядка 0.5 пс (RMS, при оцифровки малых частот), а чтобы этого добиться придется очень сильно попотеть. Плюс еще я так чувствую, что плата получиться не двухслойная, а это тоже не копейки будет стоить. Плюс еще ПО нужно будет писать, драйвера какие-нибудь.

Share this post


Link to post
Share on other sites

Если хотите именно 192к, то выбор не особо велик. АЦП надо проверять все доступные, т.к их шумность очень зависит от разводки, питания итд. Поэтому ИМХО строить надо отдельно USB контроллер АЦП и несколько модулей собственно АЦП ( с гальваническими развязками по цифровой шине, фильтрами шумов питания и прочими примочками). А контроллер имеет смысл выбирать из типов.

Первый, классический USB2 на CY7C68013 и десериалайзер I2S на какой-либо небольшой плисине. Второй, более современный - на арме LPC2368 (246x) итд, у которых есть встроенный аппаратный I2S. К сожалению у первой ревизии LPC2368 не работал DMA с I2S, поэтому программирование этой штуки в условиях дефицита пропускной способности USB становилось не очень удобным.

Share this post


Link to post
Share on other sites
К сожалению у первой ревизии LPC2368 не работал DMA с I2S, поэтому программирование этой штуки в условиях дефицита пропускной способности USB становилось не очень удобным.

 

А вы проверяли неработоспособность DMA с I2S, или это данные из даташита? Один мой коллега утверждает, что его LPC2368 первой ревизии работает с I2S через DMA просто замечательно.

Share this post


Link to post
Share on other sites

Посмотрел TAS1020 и TUSB3200

Я так понял - они под кодеки заточены, а кодеки, как я понимаю восновном потребительского качества (довольно посредственные) обычно.

Или я не прав?

 

Качественные аудиокарты не зря стоят таких больших денег.

Чтобы выжать из АЦП или ЦАП все его скажем 24 разряда должен быть очень низкий уровень джиттера, порядка 0.5 пс (RMS, при оцифровки малых частот), а чтобы этого добиться придется очень сильно попотеть. Плюс еще я так чувствую, что плата получиться не двухслойная, а это тоже не копейки будет стоить. Плюс еще ПО нужно будет писать, драйвера какие-нибудь.

Почему, вместо того чтобы помочь, меня каждый второй пытается убедить что ничего не выйдет? :)

Цитирую самого себя:

"Гальваническая развязка, правильная аналоговая часть, правильное питание, правильная разводка и прочие извращения (даже в цифровоц части - тактирование например итд) - само сабой разумеется - я не вчера родился. Все прекрасно понимаю. Это дело схемотехника (друг мой). Будьте уверены, у него есть опыт работы со звуком! Мое дело - цифровая часть. И именно с ней я прошу помощи."

 

Насчет джиттера абсолютно согласен!

 

Но дело в том, что пока не будет выбрана архитектура цифровой части, нет смысла говорить об аналоге.

 

Помилуйте, какое ПО? Зачем драйвера?! Стандартные дрова USBAudio (ASIO накрайняк) вас не устраивают?

 

Если хотите именно 192к, то выбор не особо велик. АЦП надо проверять все доступные, т.к их шумность очень зависит от разводки, питания итд. Поэтому ИМХО строить надо отдельно USB контроллер АЦП и несколько модулей собственно АЦП ( с гальваническими развязками по цифровой шине, фильтрами шумов питания и прочими примочками). А контроллер имеет смысл выбирать из типов.

Первый, классический USB2 на CY7C68013 и десериалайзер I2S на какой-либо небольшой плисине. Второй, более современный - на арме LPC2368 (246x) итд, у которых есть встроенный аппаратный I2S. К сожалению у первой ревизии LPC2368 не работал DMA с I2S, поэтому программирование этой штуки в условиях дефицита пропускной способности USB становилось не очень удобным.

Блочная структура платы и прочие навороты - это да!

 

Микрухи буду смотреть.

 

ВСЕМ СПАСИБО!

Share this post


Link to post
Share on other sites
А вы проверяли неработоспособность DMA с I2S, или это данные из даташита? Один мой коллега утверждает, что его LPC2368 первой ревизии работает с I2S через DMA просто замечательно.

А на чем он его гонял? В какую сторону шла передача? Моно-стерео? Разрядность данных? Можно пример кода? У меня 2366 работет нестабильно. Пока проверял только на чтение с аудиодаков 16 бит.

 

Автору темы. Если решитесь на АРМ, обратите внимание на http://www.standardics.nxp.com/support/doc....audio.demo.zip

или искать по сайту NXP "i2s usb audio demo LPC2368"

Share this post


Link to post
Share on other sites
А на чем он его гонял? В какую сторону шла передача? Моно-стерео? Разрядность данных? Можно пример кода? У меня 2366 работет нестабильно. Пока проверял только на чтение с аудиодаков 16 бит.

 

Автору темы. Если решитесь на АРМ, обратите внимание на http://www.standardics.nxp.com/support/doc....audio.demo.zip

или искать по сайту NXP "i2s usb audio demo LPC2368"

 

Спасибо огромное!

Буду глядеть.

 

PS А в какой среде под ARMы пишут?

Я так понимаю IAR может, а есть что удобнее?

Share this post


Link to post
Share on other sites

LPC2880; LPC2888;

16/32-bit ARM microcontrollers; 8 kB cache, up to 1MB flash, Hi-Speed USB 2.0 device, and SDRAM memory interface

+ аппаратный I2S I\O

 

Вот то что мне надо!

 

Вот только одна проблема у меня: для всех LPC начинвя с 2364 и заканчивая 2470 (все что с USB) в даташите написано про I2S подробно:

The interface has separate input/output channels each of which can operate in master or slave mode.

Capable of handling 8-bit, 16-bit, and 32-bit word sizes.

The sampling frequency can range from 16 kHz to 48kHz (16, 22.05, 32, 44.1, 48 ) kHz.

Т.е. 16/32 Бита нас устраивают

Slave режим - отлично!

А вот 48кГц МАЛО!!!

 

А для LPC288* ХРЕН!

Там даже раздела такого нет!

 

Вот только это:

6.16 Analog I/O

The analog I/O system includes an I2S input channel, an I2S output channel, a dual A/D converter, and a dual D/A converter. Each channel includes a separate 4 sample FIFO.

 

6.16.1 Features

• I2S-bus input channel with a 4 sample FIFO for stereo Digital Analog Input (DAI).

• I2S-bus output channel with a 4 sample FIFO for stereo Digital Analog Output (DAO).

 

6.20.4 PLLs

The LPC2880/LPC2888 includes two PLLs: a low power PLL that may be used to provide

clocks to most chip functions; a high-speed PLL that may be used to generate faster

clocks for selected chip functions, if needed. Each PLL can be driven from several clock

sources. These include the main oscillator (1 MHz to 20 MHz), the RTC oscillator

(32 kHz), the bit clock or word select inputs of the I2S input channel, the clock input from

the SD/MMC Card interface, or the output clock from the other PLL.

 

Кто знает, какую скорость держат LPC2880/LPC2888 для I2S?

Edited by MAXvaLL

Share this post


Link to post
Share on other sites
PS А в какой среде под ARMы пишут

То что у NXP- под Keil. Хотя где-то встречал аудио аппликуху под IAR для AT91. Но там I2S делался извращенным методом на базе SSP

А вот 48кГц МАЛО!!!

Скорее всего там просто писатели даташита не вьехали- просто перечислили стандартные скорости. Тем более, что они получаются делением системного клока на цело, что бесполезно для аудио применений. Зато есть режим внешней синхронизации, который и использован в апппликации. А ограничения по скорости если и появляются, то обычно при битовых скоростях больших чем 1/8 системного клока ( стейт-машины начинают чудить). Это ИМХО, поскольку на I2S этого не проверял, зато нечто подобное вылазило с SPI.

На 288х забете- с их BGA корпусами с мелким шагом и чувствительноти к разводке обязательна четырехслойная плата (а вернее 6) . Это уже притча во языцах- как Олимекс делал целый год девборду под этот проц и получилось нечто работоспособное только с 6 раза. Если купите модуль- то да, можно использовать, но самому разводить- nightmare/

Share this post


Link to post
Share on other sites
Скорее всего там просто писатели даташита не вьехали- просто перечислили стандартные скорости. Тем более, что они получаются делением системного клока на цело, что бесполезно для аудио применений. Зато есть режим внешней синхронизации, который и использован в апппликации. А ограничения по скорости если и появляются, то обычно при битовых скоростях больших чем 1/8 системного клока ( стейт-машины начинают чудить). Это ИМХО, поскольку на I2S этого не проверял, зато нечто подобное вылазило с SPI.

 

Ну хорошо. Пусть 1/8 даже от 72МГц = 9МГц

На выходе с АЦП имеем 192КГц*24Б*2канала = 9.2МГц

 

Привет глюки?

 

А есть еще тема, что возможно АЦП плюется не по 24 а по 32 (1 байт пуст)

Тогда будет 12.2 - что вообще ни в какие ворота!

 

Так что? Сожрет или нет?

 

Жаль что на BGA придется забить :crying:

Share this post


Link to post
Share on other sites
На выходе с АЦП имеем 192КГц*24Б*2канала = 9.2МГц

Привет глюки?

Да ктож его знает? При производстве чипов такого типа перефирия делается методом прицепливания к проекту стороннего IP core. Кто его производитель- ХЗ. Для самого процессора и перефирии удавалось отслеживать корреляцию глюков с ерратами на соответствующие IP core от АРМа. Только эти ерраты добыть трудно и неизвестно, какая ревизия IP core сидит в данном конкретном чипе. А кто производитель I2S IP core - я вообще без руля. В общем проверять надо. И глюк может быть не фатальным - ну например у SSP при тактовых в 30 Мгц фронт первого импульса полз на несколько наносекунд. Просто надо быть готовым к таким приключения.

В общем проверять надо на реальном железе. Я для таких проверок хочу сейчас сделать симулятор ADC - ПЛИС с внешней памятью, который проигрывает WAV файл в I2S. А потом проверять, что записала винда уже внутри себя, после всех интерфейсов и драйверов. Был ли ресамплинг, была ли потеря байтов, интерполяция при несовпадении битовых скоростей итд. Загнать в память симулятора чистую цифровую синусоиду или двухтоналку и проверять весь тракт.

Сам я сейчас вожусь именно с 236х в режиме оцифровки, но мне нужна еще и легкая предобработка сигнала в процессоре. так что АРМ используется еще и в качестве "легкого" DSP. А в сторону аудиокарты я смотрю с целью проверять качество своего аналогово тракта, используя аудиофильские (в хорошем смысле слова) программы типа RMAA или OscilloMeter- у них фурье весьма правильное и длина выборки неограничена почти ничем (у OscilloMeter кажется до 2^24).

Share this post


Link to post
Share on other sites

Уважаемый khach!

Буду вам крайне признателен, если вы поделитесь результатами (когда они будут).

 

А может вообще забить на I2S в МК?

Как по другому?

SPI? (АЦП поддерживает вывод Left-Justified)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this