Jump to content
Sign in to follow this  
German Churilin

шум на выходе внешнего dac-а

Recommended Posts

Posted (edited)

Добрый день всем! Столкнулся с проблемой, над решением которой бьюсь уже месяц - суть в том, что при пересылке аудио данных с контроллера в внешний цап на выходе цапа звучит белый шум(именно когда летят данные). Уже перепробовал разные конфигурации и параметры, да даже другой цап ставил - всё равно та же самая проблема. Может кто сталкивался, или у кого есть идеи почему так происходит?
Контроллер 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... то, судя по скрину всё передаётся правильно? или я что то не понимаю в этом всём? Но не в этом суть - в один момент тоже подумал что порядок не тот, но, к сожалению, попытки свапать байты местами(и побайтово, и по словам) не дали ни какого результата

pusleviewscreen.jpg

Edited by German Churilin

Share this post


Link to post
Share on other sites

есть вероятность, что шум не программный. Разводку платы надо внимательно смотреть конкретно по цифровым и аналоговым землям. На внешних ЦАП-ах это охренеть как важно

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.

Loading...
Sign in to follow this  

  • Similar Content

    • By maxssau
      Продам адаптеры 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 р.).
    • By maxssau
      Добрый день!
      Хотелось бы рассказать об очередном своём девайсе: 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.
       
    • By aitras
      Продам немного обновленные платы ЦАПа Mercury. Комплектуются мелкой платой для генераторов с управлением от МК.
       
       
       
      Отличие от последней ревизии в том, что добавлен сигнал переключения генераторов и футпринт под трансформаторы сделан универсальным для серий ТП и TEZ.
      Цена 600р за штуку. Отправлю по России.
      В наличии 6 шт и есть 2 шт с косметическим дефектом - поцарапанной внизу маской. Они по 450р.
    • By Yurik_V
      Есть несколько плат DAC AH-D3 на ak4490 и ak4113.
      http://audiohobby.ru/otkrytyj-proekt-czap-ah-d3-na-ak4490-i-ak4113.html
       

  • Сообщения

    • Привет народ, притащили на ремонт автомобильный моноблок Aria 1500.1, после какого то мастера, усь был успешно восстановлен, но есть нюанс с конденсатором выходного фильтра, там должен стоять неполярный электролит, я так полагаю на 22мкф, если ставить пленку то там нету места расположить столько конденсаторов, можно ли поставить два полярных соединенных встречно?
    • Нет. Напряжение с выхода ОУ, ввиду ограниченного быстродействия последнего, не способно мгновенно проскочить зону "центральной отсечки" комплиментарного повторителя без смещения. Это не то "напряжение смещения", оно "ступеньку" не вызывает.
    • Нормально ОТКРЫТЫЙ не будет закорачивать затвор на исток, пока не нагреется до температуры срабатывания.
    • Если хватило ума содержать дом в чистоте и порядке посредством нанятого домработника, машину обслуживать в сервисе, а не сам в своём гараже  - совсем не лентяй, почему бы и нет!! рассматриваю богатство как заработанное своим трудом, знаниями, талантом, а не то которое украли, набрали взятками и тп. ..  (кстати, чтобы оживить вставшую в дороге современную машину, если она не завелась после того как её попинали по колёсам/заглянули под капот..., таки  лучше вызвать эвакуатор или службу тех помощи. Водитель с 40летним стажем, изъездил много машин, от ушастого Запорожца  тогда ещё -  сейчас на Тоёте Камри, Хавал). Делаю капремонт домика в деревне, зачастую прибегаю к услугам нанятых специалистов (в основном гастарбайтеров), да,  можно всё делать самому, но что то мне не по моему умению, что то банально не по силам... С уважением, Сергей  
    • Хотя, большая ошибка. 
    • Может наоборот, нормально закрытый? Ну и само собой, поближе к полевику его прикрутить, придавив общей пластиной. А можно даже попробовать сверху умостить.
    • Оставляют меньше минимума, так батя то ещё и не осознанный, и без поддержки народа вынужден платить за квартиру. У них там нету такой ячейки соратников, которая есть у нас. Там его ни кто не поддерживает, и на интернет он гавкает. Он не верит, что не имеют права забирать, оставляя меньше минимума. Я ему говорил- не верит. Те 400 страниц документов, и законов, что я ему увозил прошлый раз он отнёс адвокату, которая сказала, что это чепуха всё. Ни кто его не поддержит с законами.
×
×
  • Create New...