реклама на сайте
подробности

 
 
> STM32F407 + CS43L22, не работает как надо!
kumle
сообщение Jan 9 2017, 08:55
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Есть многим знакомая платка STM32F4DISCOVERY.
На ней есть I2S DAC CS43L22
Так вот выяснилось, что I2S модуль контроллера STM32F407 не может корректно работать с этим кодеком !!!
Причина оказалась в том, что сигнал MCK у микроконтроллера начинает тикать только в момент передачи аудио выборок, то есть одновременно вместе с сигналами SCK, SD и WS !!!
Отдельно запустить MCK в режиме free running нельзя !!!
Но, в даташите на кодек CS43L22 явно указано, что частота MCK должна включаться заранее, а именно в момент инициализации, а отключаться только через опр. время после завершения передачи аудио данных!!!
Оно конечно работает, звук играет и все такое, но я столкнулся со след проблемами которые не могу решить:

1) При воспроизведении самого первого аудио файла пропадает почти пол секунды из его начала !!!
(я это связываю с тем, что так как частота MCK включается одновременно с поступлением данных, то кодек CS43L22 не сразу настраивается на эту частоту)

2) При окончании проигрывания слышен белый шум, на довольно сильной громкости, причем в одном канале громкость его существенно больше. (замечу что при проигрывании файла громкость одинаковая в обоих каналах).
Этот шум не устраняется даже подачей команд MUTE, или уменьшением громкости, помогает только сброс ресетом и последующая переинициализация, что меня не устраивает !!!

Возникает вопрос, о чем думали разработчики когда ставили этот кодек на отладочную плату?



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dmitry2017
сообщение Sep 24 2017, 13:25
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 24-09-17
Пользователь №: 99 452



У меня аналогичная проблема. При работе с I2S как мастер, а кодека как слейв после воспроизведения сэмпла иногда включаются шумы.
Вот инициализация шин:
CODE
// configure I2S port
SPI_I2S_DeInit(CODEC_I2S);
I2S_InitType.I2S_AudioFreq = I2S_AudioFreq_22k;
I2S_InitType.I2S_MCLKOutput = I2S_MCLKOutput_Enable;
//I2S_InitType.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
I2S_InitType.I2S_DataFormat = I2S_DataFormat_16b;
I2S_InitType.I2S_Mode = I2S_Mode_MasterTx;
//I2S_InitType.I2S_Mode = I2S_Mode_SlaveTx;
I2S_InitType.I2S_Standard = I2S_Standard_Phillips;
I2S_InitType.I2S_CPOL = I2S_CPOL_Low;

I2S_Init(CODEC_I2S, &I2S_InitType);
I2S_Cmd(CODEC_I2S, ENABLE);


// configure I2C port
I2C_DeInit(CODEC_I2C);
I2C_InitType.I2C_ClockSpeed = 100000;
I2C_InitType.I2C_Mode = I2C_Mode_I2C;
I2C_InitType.I2C_OwnAddress1 = CORE_I2C_ADDRESS;
I2C_InitType.I2C_Ack = I2C_Ack_Enable;
I2C_InitType.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitType.I2C_DutyCycle = I2C_DutyCycle_2;

Вот конфигурация кодека:
CODE
void codec_ctrl_init()
{
uint32_t delaycount;
uint8_t CodecCommandBuffer[3];

uint8_t regValue = 0xFF;

GPIO_SetBits(GPIOD, CODEC_RESET_PIN);
delaycount = 1000000;
while (delaycount > 0)
{
delaycount--;
}
//keep codec OFF
CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
CodecCommandBuffer[1] = 0x01;
send_codec_ctrl(CodecCommandBuffer, 2);

//begin initialization sequence (p. 32)
CodecCommandBuffer[0] = 0x00;
CodecCommandBuffer[1] = 0x99;
send_codec_ctrl(CodecCommandBuffer, 2);

CodecCommandBuffer[0] = 0x47;
CodecCommandBuffer[1] = 0x80;
send_codec_ctrl(CodecCommandBuffer, 2);

regValue = read_codec_register(0x32);

CodecCommandBuffer[0] = 0x32;
CodecCommandBuffer[1] = regValue | 0x80;
send_codec_ctrl(CodecCommandBuffer, 2);

regValue = read_codec_register(0x32);

CodecCommandBuffer[0] = 0x32;
CodecCommandBuffer[1] = regValue & (~0x80);
send_codec_ctrl(CodecCommandBuffer, 2);

CodecCommandBuffer[0] = 0x00;
CodecCommandBuffer[1] = 0x00;
send_codec_ctrl(CodecCommandBuffer, 2);
//end of initialization sequence


CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL2;
CodecCommandBuffer[1] = AUTO;
send_codec_ctrl(CodecCommandBuffer, 2);

CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
CodecCommandBuffer[1] = 0x70;
send_codec_ctrl(CodecCommandBuffer, 2);

CodecCommandBuffer[0] = CODEC_MAP_CLK_CTRL;
CodecCommandBuffer[1] = 0x81; //auto detect clock
//CodecCommandBuffer[1] = 0x60; //speed 1:1
send_codec_ctrl(CodecCommandBuffer, 2);

CodecCommandBuffer[0] = CODEC_MAP_IF_CTRL1;
//CodecCommandBuffer[1] = CODEC_STD;
CodecCommandBuffer[1] = 0x07;
//CodecCommandBuffer[1] = 0x84; //Master
send_codec_ctrl(CodecCommandBuffer, 2);



CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL1;
CodecCommandBuffer[1] = 0x9E;
send_codec_ctrl(CodecCommandBuffer, 2);

}

Сами данные я отправляю через ДМА I2S (SPI3)
Я пытался повторить Ваш опыт установив кодек в мастер и дергая MCLK таймером. Пока безрезультатно.
Расскажите пожалуйста подробнее про настройку I2S, MCLK и таймера. Как вы добились частоты 12.2880 MHz?
У меня частота проца 84 МГц и если перскаллер установить в 0, а период поставить на 3, у меня зависает инициализация таймера

Сообщение отредактировал IgorKossak - Sep 24 2017, 17:13
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kumle   STM32F407 + CS43L22   Jan 9 2017, 08:55
- - uriy   Я начал делать проект на этой плате мне нужен и ми...   Jan 9 2017, 15:10
|- - kumle   Цитата(uriy @ Jan 9 2017, 18:10) Я начал ...   Jan 9 2017, 15:33
- - uriy   ЦитатаOnce MCLK is valid, the quiescent voltage, V...   Jan 9 2017, 17:05
|- - kumle   Цитата(uriy @ Jan 9 2017, 20:05) А осцило...   Jan 9 2017, 19:03
- - kumle   Завел я частоту MCK с таймера, и как и ожидалось, ...   Jan 10 2017, 08:10
- - uriy   ЦитатаНО, так как частоты MCK, SCK, LRCK должны би...   Jan 10 2017, 11:15
- - kumle   MCK у меня 2048 Кгц (это когда I2S генерит) Шим 5...   Jan 10 2017, 13:06
- - uriy   Разве такая низкая частота для MCLK допустима? Мин...   Jan 10 2017, 14:42
|- - kumle   Цитата(uriy @ Jan 10 2017, 17:42) Разве т...   Jan 11 2017, 06:08
- - uriy   Как работает? Вы же сами сказали что звук как из ж...   Jan 11 2017, 11:58
|- - kumle   Цитата(uriy @ Jan 11 2017, 14:58) Как раб...   Jan 11 2017, 18:45
- - kumle   Перевел вчера кодек в режим MASTER, а микроконтрол...   Jan 12 2017, 10:28
- - kumle   Все победил я этот кодек, звук нормальный, файлик ...   Jan 12 2017, 22:13
- - uriy   Около полугода назад пробовал думаю этот пример. З...   Jan 13 2017, 05:06
- - kumle   работало, потому что в примере по умолчанию стоит ...   Jan 13 2017, 08:45
|- - kumle   Цитата(kumle @ Jan 13 2017, 11:45) работа...   Jan 13 2017, 10:39
- - uriy   Неожиданный поворот, не знал.   Jan 13 2017, 09:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.02152 секунд с 7
ELECTRONIX ©2004-2016