PDA

Просмотр полной версии : USB I2S input


zyxel812
05.07.2013, 01:00
И так, очередная разработка, с которой мне пришлось изрядно повозиться.
Устройство для подключения к компьютеру аудиоисточников с цифровым I2S выходом.
Стандарт I2S предназначен в первую очередь для передачи цифровых аудио данных между микросхемами в пределах одного устройства. Данный стандарт часто используется в различных микросхемах ЦАП и АЦП, предназначенных именно для работы со звуком.
Думаю, что на данном форуме это мало кому нужно. Однако, именно подготовка к постройке pccar сподвигла меня его разработать, так как мне будет необходим ввод звука в компьютер с цифрового радио минуя всевозможные аналоговые тракты. Поэтому, пусть будет она тут, может кому и пригодится.

Подробней о i2s читайте в Википедии, представлю тут только диаграмму, чтоб понимать с чем работаем:
http://we.easyelectronics.ru/uploads/images/00/40/91/2013/01/19/b0139f.gif
Задача №1: дешифровать сигнал в микроконтроллере. С помощью микроконтроллера avr из серии Xmega, мне удалось это сделать без помощи дополнительных микросхем (не считая одной ячейки стандартной логики "И"), используя два интерфейса SPI, которые в обилии наличиствуют в указанном микроконтроллере. Однако, есть еще задача №2, решить которую на xmega пока не удалось, об этом позже. В итоге, был выбран микроконтроллер из серии mega (не путать с xmega), а именно ATmega32u4. Только вот с i2s потоком он в одиночку не справился, поэтому ему на помощь пришла микросхема EPM3032A -это микросхема программируемой логики стоимостью 100руб, одна из самых маленьких в своем роде. Ее задача превратить последовательные данные шины i2s в параллельные и сообщить микроконтроллеру о получении первых 16 бит в каждом канале. Микросхема запрограммирована на выдачу данных по 8 бит, один из входов переключает между старшими и младшими восемью битами. Так сложно (имею ввиду переключение) сделано намеренно, чтобы микроконтроллер прерывался на прием данных только один раз за сэмпл каждого канала. Прошивку для данной микросхемы делал не я, а один мой хороший товарищ, поэтому подробней как в ней что рассказать не могу.

Схема получилась такой:
https://lh3.googleusercontent.com/-ZftLrZ9zAOY/UdXBWX3pEDI/AAAAAAAAAFE/yWb4wKy7qSs/w902-h856-no/shema.png
На схеме два варианта: А и Б.
В варианте А, напряжение питания микроконтроллера 3.3в. При таком напряжении по даташиту контроллер может стабильно работать только на 8МГц. Этого ему еле еле хватает, чтобы принять и передать аудиопоток частотой дискретизации 32кГц.
В варианте Б, напряжение питания микроконтроллера примерно 4.6в. Напряжение намеренно занижено диодом, чтобы микроконтроллер мог стабильно принимать 3.3-вольтовые сигналы с EPM3032. Сама же EPM3032 толерантна к 5-ти вольтовым входным сигналам. При таком напряжении контроллер может работать на частоте 16МГц, этого должно хватить для обработки аудиопотока с частотой дискретизации вплоть до 48кГц. Однако, на максимальной частоте я не проверял, у меня не нашлось такого источника.

Задача №2: Передать полученные данные в компьютер. Для этого используется библиотека LUFA (http://www.fourwalledcubicle.com/LUFA.php). За основу взят AudioInput пример из состава библиотеки. Используется Audio Class Device 1.0, т.е. микроконтроллер прикидывается usb звуковой картой. Точнее звуковой картой с одним цифровым входом. Дело в том, что данная библиотека пока что не в полной мере поддерживает относительно новые микроконтроллеры серии xmega, на них мне не хватило пропускной способности передать в компьютер два канала одновременно из-за того, что в библиотеке пока не реализован функционал двойного буфера (так называемый pin-pong режим). Поэтому использую обычную mega с дополнительной микросхемой.

Печатная плата может выглядеть так:
https://lh6.googleusercontent.com/-p73c3XyuXUGdYUI0woyHZlOlFsNYdk6dtuylRL7yw=w456-h209-p-no (https://lh6.googleusercontent.com/-kn5EY4uj1NI/UdXBTdZ6xaI/AAAAAAAAAEw/szTLERMkTQE/w1598-h733-no/IMG_8665.JPG)
https://lh3.googleusercontent.com/p_NFpsOW6a7zwUsHAqc689OhhdvgOdUYenLIX_BdyQ=w450-h209-p-no (https://lh5.googleusercontent.com/-t3bHXDNg6b0/UdXBTY7TJQI/AAAAAAAAAE0/ypsaWrOAcbA/w1598-h742-no/IMG_8666.JPG)

В Винде, начиная с ХРюши, драйвера не требуются. После подключения, устройство будет видно так:
https://lh6.googleusercontent.com/-LXv4gcq7Lzs/UdXBWexECcI/AAAAAAAAAFA/RCL7JCEcAAk/w414-h461-no/screen1.png

Итого, на данный момент характеристики следующие:
Частота дискретизации входного сигнала: 32кГц точно, в варианте Б в теории до 48кГц.
Разрешение входного сигнала: до 16 бит (на вход подавать можно и больше, лишние просто игнорируются)

Устройство автоматически не определяет частоту входного сигнала, поэтому в винде в свойствах устройства на вкладке "дополнительно" нужно указать частоту, соответствующую входной.

Вот записи, сделанные с помощью данного устройства: Запись1 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test1.wav), Запись2 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test2.wav), Запись3 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test3.wav).
В качестве аудиоисточника используется цифровой выход вот этого радиомодуля (http://www.pccar.ru/showthread.php?t=18997).

Архив с прошивкой и исходниками прилагаю. Условие использования - рассказать здесь о всех модификациях, если таковые будут, а так же ссылка на данную тему в описании вашего проекта.

mitsubi
05.07.2013, 01:59
весьма интересно, а по части нехватки ресурсов меги не хотите посмотреть в сторону, например, STM32?

Gorynch
05.07.2013, 09:50
Очень плезно и познавтельно

Будет ли работать под MacOsX или линукс?
Есть 2 цифровых микрофона от ноутбуков, хотелось бы пркрутить к компам, а они не под виндами

Если будет работать под unix системой - как минимум повторю

zyxel812
05.07.2013, 10:50
весьма интересно, а по части нехватки ресурсов меги не хотите посмотреть в сторону, например, STM32?
Тут все дело в наличии библиотеки для работы с USB и примеров реализации различных классов под конкретную серию устрйств. Так получилось, что именно для avr нашлась такая библиотека, в которой для реализации задумки пришлось приложить минимум усилий. Вот, в xmega ресурсов хватает, однако победить ее родную usb библиотеку пока не удалось, но это вопрос времени. В итоге, хочу отказаться от плис.

Очень плезно и познавтельно

Будет ли работать под MacOsX или линукс?
Есть 2 цифровых микрофона от ноутбуков, хотелось бы пркрутить к компам, а они не под виндами

Если будет работать под unix системой - как минимум повторю
Работать должно. Используется стандартный usb класс, что даже винда без драйверов подхватывает, linux должен тем более. Про Мак не могу ни чего сказать, могу предположить, что тоже должно работать. Сейчас в компьютерных магазинах можно найти маленькие usb звуковые карты за 300 ~ 500 рублей с двумя разъемами, один под наушники, другой под микрофон. Так вот, в их описании сказано, что они работают в Linux и Mac OS 10 и выше, а они тоже используют Audio Class 1.0, как и моя разработка.

awtoap
05.07.2013, 13:09
Я вот непойму накуя было изобретать сие, когда навалом микрух готовых?...пример сходу CM108AH (ввод/вывод по I2S плюс встроенный ЦАП и АЦП). TAS1020B пишем софт и получаем 24/96. Тоже самое TUSB3200AC аж 6 штук I2S. Единственное синхра идет от этих микр, а не от АЦП/ЦАП как любят аудифилы. А те параметры что достигли в изделии ну просто унылы.

zyxel812
05.07.2013, 14:58
Разрабатывалось под конкретное устройство с конкретными параметрами, а именно 32кГц с синхрой от внешнего устройства. А так же для того, чтобы сделать управление радиомодулем и передачу с него звука на одной легко достоваемой микросхеме. Сейчас их конечно две, но это как промежуточное работоспособное решение, выложенное здесь с целью найти ещё интузиастов, кому это нужно. Глядишь, кто чем поможет или хотя бы что-то подскажет. Вот уже кое что поймал на удочку, теперь знаю про существование ещё и микросхемы TUSB3200AC, взял на заметку.
Указанные вами чипы ещё достать надо, CM108 до сих пор из Китая жду, минимальная партия 5 шт, ждать около 2-ух месяцев, заказал ради экспериментов. Нет уверенности, что с ее помощью 32кГц ввести можно (во всех описаниях только 44,1 и 48) и сменить тип устройства с микрофона на что-то ещё.
И, самое главное, спортивный интерес и учебные цели. Здесь вроде не собираются те, ищет готовых решений.

awtoap
05.07.2013, 18:07
Я так понял хочешь смастерить цифровое радио с DAB. Тогда осваивай TAS1020B. Они хоть и сняты с производства (как TUSB3200) но еще продаются. Апликухи как и софт для разработки поищи ТУТ (http://www.ti.com/sitesearch/docs/universalsearch.tsp?searchTerm=tas1020&linkId=1). Хотя лучше возьми за основу приемник от Silabs(все исходники доступны), правда выход с тюнера по аналогу, а звук в комп по цифре(эмулируется звуковая через УСБ).

JIekceu
05.07.2013, 18:43
давно хотел такой девайс для подключения хорошего АЦП, то что стоит на звуковухах и то как оно подключено мягко говоря не радует..

Apostol
01.08.2013, 08:09
Я вот непойму накуя было изобретать сие, когда навалом микрух готовых?...пример сходу CM108AH (ввод/вывод по I2S плюс встроенный ЦАП и АЦП). TAS1020B пишем софт и получаем 24/96. Тоже самое TUSB3200AC аж 6 штук I2S. Единственное синхра идет от этих микр, а не от АЦП/ЦАП как любят аудифилы. А те параметры что достигли в изделии ну просто унылы.

А есть готовые киты? У меня вот такой девайс:
DAC (http://www.ebay.com/itm/Teradak-X2-24Bit-96KHz-USB-to-Coaxial-Converter-/121043158501?pt=US_Home_Audio_Amplifiers_Preamps&hash=item1c2ebc05e5)
Есть интерес подключить его по i2s к ПК, а выход с дака по оптике на проц.

awtoap
01.08.2013, 12:00
Не путай назначение железки...у ТС по I2S принимает, а по USB отдает в комп...у тебя делает противоположное. Короче по USB в комп, а оптику в проц...I2S у тебя для внешней микры DAC.

Apostol
01.08.2013, 12:10
Не путай назначение железки...у ТС по I2S принимает, а по USB отдает в комп...у тебя делает противоположное. Короче по USB в комп, а оптику в проц...I2S у тебя для внешней микры DAC.

Действительно) Мозг отключился как увидел i2s и usb. Извиняюсь у автора темы за оффтоп, но все же спрошу, а по моей теме есть какие варианты? Или выхлоп не большой и не стоит заморачиваться?

zyxel812
01.08.2013, 15:26
Ищешь любую китайскую звуковуху, смотришь какой в ней чип, ищешь даташит на этот чип и смотришь в нем наличие i2s выхода. В большинстве выход есть.
Или вот подороже вариант: http://www.aliexpress.com/item/USB-to-SPDIF-coaxial-I2S-processor-TE7022-24bit-96K-board-sc/654058702.html
в ней есть выход точно, вход на микросхеме есть, но возможно не распаян на плате.

rsrg
17.01.2014, 16:29
Респект автору за проделанную работу!
Но все же для данной задачи, на мой взгляд, если не брать во внимание специализированные чипы, более подходит STM32F4, имеющие на борту аппаратный I2S и USB.
Сам в данный момент разбираюсь с I2S на контроллере STM32F407. Будет время попробую запилить передачу звука по USB.
В примерах к Discovery вроде бы присутствует класс для работы в режиме «Audio Device»

zyxel812
28.01.2014, 22:50
весьма интересно, а по части нехватки ресурсов меги не хотите посмотреть в сторону, например, STM32?

Респект автору за проделанную работу!
Но все же для данной задачи, на мой взгляд, если не брать во внимание специализированные чипы, более подходит STM32F4, имеющие на борту аппаратный I2S и USB.
Сам в данный момент разбираюсь с I2S на контроллере STM32F407. Будет время попробую запилить передачу звука по USB.
В примерах к Discovery вроде бы присутствует класс для работы в режиме «Audio Device»

В общем так, подошел снова я к вопросу о вводе в компьютер звука с i2s с внешним тактом. Под xmega библиотека LUFA по прежнему не допилена, а в родной ASF встроить Audio Class Device с наскока не получилось. Под mega не хватает ресурсов без дополнительной микросхемы обрабатывать поток. Специализированную микросхему (usb звуковую карту типа CM108 и тому подобных) с i2s входом с внешним тактом так же подобрать не удалось. Был хороший кандидат - Tenor TE7022L, есть всё что нужно (i2s вход, gpio и i2c управляемые через hid), но оказалось невозможным достать datasheet на эту микросхему. Продавцы модулей на её базе упорно шлют только схемы модулей и всё.

Итого, купил сегодня Discovery на базе STM32F4, буду осваивать новые микроконтроллеры. Стоимость контроллеров не больше xmeg, а производительность гораздо выше. На борту есть аппаратный i2s вход и USB библиотека под них имеет Audio Class Device. Уже настроил IDE, скомпилировал из примеров "Hello world", залил, лежит сейчас мигает:)

LexaryStyle
30.01.2014, 02:27
Подскажите готовую микруху чтоб завести на комп 1 i2s input и 1 i2s out.

Gorynch
11.06.2015, 17:15
Итого, купил сегодня Discovery на базе STM32F4, буду осваивать новые микроконтроллеры. Стоимость контроллеров не больше xmeg, а производительность гораздо выше. На борту есть аппаратный i2s вход и USB библиотека под них имеет Audio Class Device. Уже настроил IDE, скомпилировал из примеров "Hello world", залил, лежит сейчас мигает:)

А можно поинтересоваться результатами? Получилось?

zyxel812
16.06.2015, 10:14
Пока нет, но я ещё не похоронил затею. STM32 оказался не так прост, как показалось в начале. С наскоку одолеть не удалось, в итоге отложил до лучших времен, когда времени будет побольше, чтобы погрузиться в изучение новой железки. Нет, помигать диодом и скомпилировать демо-примеры работы с usb мне конечно удалось, но вот сделать composite device с hid и audio в имеющихся библиотеках без полного в них погружения не удалось. Если кто ткнёт носом в такой пример, буду очень благодарен. Как-то так.

triony
05.09.2020, 01:20
Вы случайно не запустили ваше устройство в серийное производство? Купил бы.
Мне нужно подключить цифровой (I2S) микрофон к компу на линуксе.
Прошу подсказать какие существуют аналоги данного изделия?