Поиск сообщества
Показаны результаты для тегов 'i2s'.
Найдено: 7 результатов
-
Продаю USB-I2S адаптеры. Процессор XMOS. Ввод/вывод PCM 16-32 бита, 44.1-384 кГц, Вывод DSD64-256. Внешнее тактирование 512 Fs, гальваническая изоляция. Тема по адаптеру: Срок изготовления 4 недели. Стоимость 8000р.+пересылка
-
Добрый день! Хотелось бы рассказать об очередном своём девайсе: USB аудио интерфейс UI-01. Устройство представляет собой USB-I2S адаптер с возможностью вывода PCM/DSD потоков, а так же ввода PCM I2S данных. Краткие характеристики: - Процессор XMOS XUF208, 8 логических ядер, 500 MIPS. - USB 2.0 High speed - 2 линии ввода/вывода (2 стерео входа + 2 стерео выхода или 4 входа/выхода) - Вывод: PCM 16-32 бита 44.1-384 кГц, DSD Dop 64-128, DSD Native 64-256 (linux) - Ввод: PCM 16-32 бита 44.1-384 кГц - Тактирование мастерклока от платы ЦАП/АЦП, частоты 512fs - Формат входа/выхода I2S - Питание Self Power (т.е. от внешнего источника, не от USB) - 8 конфигурируемых линий GPIO, возможные варианты от 8 выходов, до 4 входа + 4 выхода - Все линии гальванически изолированны с помощью изоляторов SiLabs Si8662, Si8640 - 2 линии I2C, одна из которых изолирована с помощью ADUM1250 для управления ЦАП/АЦП и подключения дисплея/кнопок/EEPROM. Внешний вид: На плате присутствует разъем full XTAG для прошивки и отладки firmware. Схемотехника по даташитам и в общих чертах повторяет схемы evolution board от XMOS с некоторыми изменениями. Планируется 3 режима работы: Legacy, Soft и Native. Legacy режим. Параллельный режим работы, при котором управляющие команды выдаются как статические сигналы (MUTE, RESET, DSD, F0,F1). Этот режим позволяет работать интерфейсу без платы управления. Soft режим. Режим, при котором управление ИМС ЦАП/АЦП осуществляется по шине I2C или SPI. Конфигурация выбирается из меню. Необходима плата управления. Native режим. Режим, при котором конфигурация управления хранится в EEPROM памяти на плате ЦАП/АЦП. Наиболее функциональный режим, при котором всё управление осуществляется с процессора интерфейса. Управляющие сигналы на плате ЦАП/АЦП формируются с помощью I2C экспандера. Этот режим позволит использовать самую различную периферию на плате преобразователя (регулятор громкости и т.п.) без необходимости настройки, т.к. конфигурация будет храниться в EEPROM. Разъем 10 пиновый, т.к достаточно только I2S и I2C сигналы. Этот режим позволяет работать интерфейсу как с платой управления, так и без неё. Программируется плата с помощью специализированного адаптера XA-XTAG. Выводы сгруппированы по функциональному назначению, поэтому в случае неиспользуемых функций (например не нужен SPI), изолятор отвечающий за эту группу сигналов может не устанавливаться на плату. Распиновка разъема I2S: Полнофункциональные драйверы подходят отсюда: http://jlsounds.com/drivers.html На данный момент полностью реализован режим Legacy. Так же исправлены большинство "детских" болезней. В процессе работы удаление щелчков при переключении PCM-DSD и обратно. Вопросы: Что необходимо добавить или убрать к данной плате? Какие ИМС ЦАП необходимо добавить в список поддерживаемых в прошивку, для работы в SOFT режиме и с какими протоколами? Сейчас доступны I2C и SPI.
-
Продам адаптеры USB-I2S. Возможности: стерео ввод/вывод PCM 16-32 бита, 44.1-384 кГц. Ввода DSD нет, как и драйверов для ввода DSD. вывод DSD в режиме DoP 64-128, в режиме Native 64-256. Native доступен в Linux без "хитрых" драйверов. Тактирование от платы ЦАП/АЦП, частоты 512 fs (22.5792/24.576 МГц). Теоретически возможно и 1024fs(скорости 768кГц и DSD512 Native), но это не опробовано. Гальваническая изоляция на Si8662/Si8640. Питание возможно как Self так и Bus Powered. В режиме Bus Powered необходимо самостоятельно позаботиться о мастерклоке, т.к. возможны сильные глюки при выключенном генераторе мастерклока. Тема: срок изготовления 3-5 недель (сильно зависит от поставок процессоров). На данный момент полностью реализован интерфейс Legacy. Для отладки Native режима пока нет платы ЦАП, в процессе разработки, будет не раньше осени. Цена 6000 + пересылка (в среднем 250 р.).
-
Добрый день всем! Столкнулся с проблемой, над решением которой бьюсь уже месяц - суть в том, что при пересылке аудио данных с контроллера в внешний цап на выходе цапа звучит белый шум(именно когда летят данные). Уже перепробовал разные конфигурации и параметры, да даже другой цап ставил - всё равно та же самая проблема. Может кто сталкивался, или у кого есть идеи почему так происходит? Контроллер stm32f407ve китайский, но вроде как рабочий, цап - pcm1606, вытащенный из двд-плеера. код инициализации i2s RCC_PLLI2SCmd(DISABLE); RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); RCC_PLLI2SConfig(200,5); RCC_PLLI2SCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY) == RESET){}; //WS - word clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_StructInit(&gpioInit); gpioInit.GPIO_Pin = GPIO_Pin_9; gpioInit.GPIO_Mode = GPIO_Mode_AF; gpioInit.GPIO_OType = GPIO_OType_PP; gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL; gpioInit.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &gpioInit); //BCLK - shift clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOB, &gpioInit); //SD - serial audio data GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOC, &gpioInit); //MCO - master clock output GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &gpioInit); I2S_StructInit(&i2sInit); i2sInit.I2S_CPOL = I2S_CPOL_Low; i2sInit.I2S_Mode = I2S_Mode_MasterTx; i2sInit.I2S_MCLKOutput = I2S_MCLKOutput_Enable; i2sInit.I2S_Standard = I2S_Standard_Phillips; i2sInit.I2S_AudioFreq = I2S_AudioFreq_48k; i2sInit.I2S_DataFormat = I2S_DataFormat_24b; I2S_Init(SPI2, &i2sInit); SPI2->I2SPR = (uint16_t)((uint16_t)512 | (uint16_t)12 | (uint16_t)1); //for 48k Fs SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); I2S_Cmd(SPI2, ENABLE); код инициализации dma DMA_InitTypeDef dmaInit; NVIC_InitTypeDef nvicInit; DMA_DeInit(DMA1_Stream4); DMA_Cmd(DMA1_Stream4, DISABLE); while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE){}; __ISB(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //To dmaInit.DMA_PeripheralBaseAddr = (uint32_t) &(SPI2->DR); //From dmaInit.DMA_Memory0BaseAddr = (uint32_t)&AUDIO_SAMPLE; dmaInit.DMA_BufferSize = 20480; dmaInit.DMA_Channel = DMA_Channel_0; dmaInit.DMA_DIR = DMA_DIR_MemoryToPeripheral; dmaInit.DMA_PeripheralInc = DMA_PeripheralInc_Disable; dmaInit.DMA_MemoryInc = DMA_MemoryInc_Enable; dmaInit.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; dmaInit.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; dmaInit.DMA_Mode = DMA_Mode_Circular; dmaInit.DMA_Priority = DMA_Priority_High; dmaInit.DMA_FIFOMode = DMA_FIFOMode_Enable; dmaInit.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; dmaInit.DMA_MemoryBurst = DMA_MemoryBurst_Single; dmaInit.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE); DMA_Init(DMA1_Stream4, &dmaInit); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC | DMA_IT_HT, ENABLE); //configure interrupt nvicInit.NVIC_IRQChannel = DMA1_Stream4_IRQn; nvicInit.NVIC_IRQChannelPreemptionPriority = 0; nvicInit.NVIC_IRQChannelSubPriority = 0; nvicInit.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvicInit); DMA_Cmd(DMA1_Stream4, ENABLE); while(DMA_GetCmdStatus(DMA1_Stream4) != ENABLE){}; AUDIO_SAMPLE просто wav скопированный через hex редактор и живущий в памяти контроллера, крутиться по кругу. Вроде как, в теории всё должно работать(снизу скрин из pulseview - снято логическим анализатором), к сожалению осциллограф пока что не приобрёл, так что проверить правильность частот не представляется возможнымб но всё же всё вроде как красиво. Формат i2s на контроллере совпадает с форматом на цапе - первый бит передаётся через 1 тик sck после смены ws П.С. подозреваю сразу вопросы про MSB/LSB - wav файл сам по себе little-endian, собственно как и контроллер, то есть тут не должно быть проблем, а i2s стандарт передаёт MSB первым, соответственно если у меня в памяти записано 0x64, 0x61, 0x61, 0x66, 0x02, 0x00, 0x85... то, судя по скрину всё передаётся правильно? или я что то не понимаю в этом всём? Но не в этом суть - в один момент тоже подумал что порядок не тот, но, к сожалению, попытки свапать байты местами(и побайтово, и по словам) не дали ни какого результата
-
Предыстория О-о-очень давно я начинал собирать ЦАП со входом S/PDIF на микросхеме серии PCM179х. Если мне не изменяет память, то можно найти мои посты в теме "Делаем ЦАП" на форуме где-то в районе 30-50 страниц. В итоге все вылилось в неудачную конструкцию - были ошибки в трассировке платы. Несколько лет назад я решил все-таки их исправить и заказал новую ревизию той платы. Она успешно запустилась и работала. Но в данной плате все равно есть некоторые недочеты. Во-первых, жутко греются стабилизаторы питания ОУ, во-вторых, не оптимальный вариант преобразователя ток-напряжения - из-за большого выходного тока ЦАПа ОУ работают с некоторыми искажениями, ну и в-третьих - не нужен мне вход S/PDIF. Третья проблема решилась достаточно просто - был собран источник I2S на основе PCM2707 и я подключил его в обход приемника S/PDIF сигнала. Получился такой макет: Решением второй проблемы я занялся позже и переделал аналоговую часть - взял схему от ЦАПа Black Kitty. Там ОУ преобразователя ток-напряжения разгружены при помощи эмиттерных повторителей. Оформил это в виде отдельной платки. В таком виде это и просуществовало до этого лета. Появилось некоторое количество свободного времени и во время очередного прослушивания музыки возникло непреодолимое желание собрать это все в одну кучу на одной плате, чтобы поставить некую точку в этом ЦАПе. Новая плата Схема претерпела некоторые изменения, по большей части в питании. Также важной особенностью стало внедрение гальванической развязки шины I2S на ADuM1400C. На макете на выходе в одном канале присутствует неприятная "постоянка" около 20 мВ, а, стоящие в ФНЧ ОУ LME49990, не поддерживают корректировку нуля. Поэтому в новой схеме ввел для этих целей подстроечник и хотел поставить LT1122, но не смог достать их по адекватной цене и поставил OP42. Все управляющие цепи PCM-ки вывел на отдельный разъем - можно конфигурировать как джамперами, так и какой-то логикой. Аналоговый выход пустил через реле, чтобы была возможность приглушать выход. В питании применял те стабилизаторы, что имелись в наличии. Чтобы конструкция стала законченной, на плату поставил и трансформаторы. За выходные развел плату, размер которой получился 160 на 90 мм. ОУ в преобразователе ток-напряжения на макете грелись до 70 градусов (судя по расчетам, это для них норма), поэтому на новой плате сделал под ними заливку с переходными отверстиями на верхний слой и убрал маску. Хоть какое-то охлаждение будет. Точно так же сделано под стабилизаторами ADP3303, но у них хитрая запатентованная внутренняя конструкция, распределяющая равномерно тепло по всему корпусу, как я понял из документации. Кроме этого, коллекторам транзисторов добавил небольшие полигончики для лучшего отвода и рассеивания тепла. Да, и куда ж ЦАП без названия Решил окрестить его Меркурием - такой же жаркий. Впервые попробовал сделать заказ в Seeedstudio. При производстве китайцы плоховато пропечатали маркировку, но в целом качество отличное. Сборка и запуск Далее последовала сборка. Не очень понравилось паять плату с черной маской - все детали черные, теряются на черном фоне, как-то некомфортно. Сама маска очень классная, достаточно прочная, не отваливается кусками при пайке. Как всегда не обошлось без некоторых ошибок - оказалось, что забыл добавить на плату керамику на выходы стабилизаторов, допаял навесом, и ох уж эти реле... похоже, что миниатюрные они все идут со встроенным диодом. Также спалил одну ADuM-ку, случайно сделав шлейф зеркально, в результате чего у развязки на приемной стороне возникла переполюсовка питания, ADuM-ка перегрелась и больше так и не запустилась... Но, пережив все это, плата завелась и порадовала музыкой на своих выходах. Также нужно сказать пару слов о тепловых режимах. Кроме ОУ преобразователей ток-напряжение, достаточно сильно греются стабилизаторы веток питания +/-12V_A и +9V_А и трансформатор питания ОУ. Но все в пределах нормы - не более 60 градусов. Заключение В целом я очень доволен получившейся конструкцией. Звучание ЦАПа ровное, приятное, на оркестровых записях масштабное, т.е. в целом очень качественное. Когда разберусь с методикой измерения при помощи звуковой карты, попробую сделать замеры. Mercury 3D.PDF Mercury BOM.xls Доработка плат и результаты измерений:
-
Здравствуйте, уважаемые форумчане! Бьюсь над макетом. Понял, что без помощи никак. Пытаюсь затолкать I2S в регистры (не спрашивайте про этическую, психическую и моральную сторону - я из "этих", "тёплых ламповых" ). Транспорт у меня CM6631A. Судя по осциллограммам все сигналы на месте. Вижу двигающиеся данные на 9-х ногах регистров, то есть данные заходят в регистры. Проблема в том, что вообще ничего не наблюдаю на параллельных выходах регистров. Насколько я понимаю, схема должна зацеплять один канал (по переходу LRCK из 0 в 1). Даже если сигнал 32 битный, то ведь на среднем регистре что-то должно быть видно. У меня все выходы висят в воздухе. По идее, это же не критично? Пробовал задерживать LRCK немного через 4 повторителя на 74HC86. Толку ноль. Что я делаю не так?
-
Приветствую участников форума! Хочу отправлять данные с процессора на кодек по I2S. Взял за основу basic-at73c213-ssc-i2s-project для отладочной платы at91sam9260-ek. С исходными параметрами интерфейса (частота дискретизации 48 кГц, 16 бит на отсчёт, 2 канала) проект на моей плате запустился. Мне нужна частота дискретизации 8 кГц, 16 бит на отсчёт, 1 канал. Попробовал следующие комбинации: 24 кГц, 16 бит на отсчёт, 2 канала - интерфейс запустился; 24 кГц, 32 бит на отсчёт, 1 канал - интерфейс запустился; 12 кГц, 16 бит на отсчёт, 2 канала - интерфейс запустился; 12 кГц, 32 бит на отсчёт, 1 канал - интерфейс запустился; 12 кГц, 8 бит на отсчёт, 2 канала - интерфейс запустился; 12 кГц, 16 бит на отсчёт, 1 канал - интерфейс не запустился. 8 кГц, 16 бит на отсчёт, 1 канал - интерфейс не запустился. То есть я в два раза уменьшал битрейт (произведение частоты дискретизации, числа бит на отсчёт и количества каналов): сначала за счёт уменьшения частоты дискретизации, потом за счёт сокращения длины отсчёта или количества каналов. Остальные параметры не менял. При неудачных попытках в регистре SSC0_SR бит TXSYN=0, то есть передатчик I2S не синхронизировался. Попробовал в качестве исходной частоты для интерфейса использовать частоту на выводе TK. Для этого сделал кодек ведущим и сформировал у него на выходе TK нужную частоту ( 8000 * 16 * 1 = 128 кГц). Интерфейс тоже не запустился. Использую кодек tlv320aic3100. В связи с этим три вопроса: 1) Что я делаю не так в исходном варианте (процессор - ведущий)? Исходная частота делится в нужное количество раз, интерфейс конфигурируется правильно, иначе бы вообще не запускался. 2) Когда ведущий - кодек, нужно ли мне кроме TK настраивать TF как выход? 3) Нужно ли мне в PIO настраивать TK (и, возможно, TF) как входы? В настройках интерфейса указал, что чаастоту передатчика беру с вывода TK. У кого-нибудь был опыт работы с I2S? Помогите разобраться, пожалуйста.
- 1 ответ
-
- I2S
- at91sam9xe-ek
-
(и ещё 1 )
C тегом: