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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F407 + CS43L22, не работает как надо!
kumle
сообщение Jan 9 2017, 08:55
Сообщение #1


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

Группа: Участник
Сообщений: 145
Регистрация: 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
uriy
сообщение Jan 9 2017, 15:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Я начал делать проект на этой плате мне нужен и микрофон и наушники. Но мне в первую очередь надо запустить USB HOST.
Раньше я работал с кодеками AD73322 и SSM2603.
Там уходило много времени после инициализации на заряд конденсатора с опорным напряжением.

1) В AD73322 и SSM2603 я намеренно отключаю подачу MCLK для экономии энергии и эффекта как у вас при включении не наблюдаю. Я еще не изучил CS43L22 но вижу на блок схеме charg pump. Возможно у вас нет звука именно пока заряжается кондер после инициализации. Свои кодеки я инициализирую сразу после подачи питания и больше этого не делаю.

2) На шине I2S при этом уже нет никаких данных?
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 9 2017, 15:33
Сообщение #3


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

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



Цитата(uriy @ Jan 9 2017, 18:10) *
Я начал делать проект на этой плате мне нужен и микрофон и наушники. Но мне в первую очередь надо запустить USB HOST.
Раньше я работал с кодеками AD73322 и SSM2603.
Там уходило много времени после инициализации на заряд конденсатора с опорным напряжением.

1) В AD73322 и SSM2603 я намеренно отключаю подачу MCLK для экономии энергии и эффекта как у вас при включении не наблюдаю. Я еще не изучил CS43L22 но вижу на блок схеме charg pump. Возможно у вас нет звука именно пока заряжается кондер после инициализации. Свои кодеки я инициализирую сразу после подачи питания и больше этого не делаю.

2) На шине I2S при этом уже нет никаких данных?



По первому пункту у меня пауза 250 мкс после иициализации, да еще я и отладчиком в этом месте останавливался, так что он бы успел зарядиться.
Там в инициализации есть регистр тактироввания, там есть бит AUTO, он позволяет не указывать частоту MCK которая будет на него подана, а автоматически ее определять. Так вот у меня этот бит установлен, а так как частота появляется одновременно с данными, а не заранее, то видимо это время как раз тратится на это автоопределение частоты MCK

А по второму пункту данных точно никаких нет, DMA выключен, блок I2S выключен.
Там кстати есть еще аналоговый микшер, так вот я его тоже выключаю при инициализации.

p/s микрофон у меня тоже задействован, но с ним проблем не возникло )
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 9 2017, 17:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
Once MCLK is valid, the quiescent voltage, VQ, and the internal voltage reference, FILT+, will begin powering
up to normal operation. The charge pump slowly powers up and charges the capacitors. Power is then
applied to the headphone amplifiers and switched-capacitor filters, and the analog/digital outputs enter a muted
state. Once LRCK is valid, MCLK occurrences are counted over one LRCK period to determine the
MCLK/LRCK frequency ratio and normal operation begins.
Как я это понимаю. После подачи MCLK медленно заражаются кондеры в charge pump (время нигде не нашел). После этого аудивыходы переходят в muted. И только теперь анализируется частота MCLK и вероятно бит AUTO. Очень странное для меня поведение MCLK.
В SSM2603 уходит около 100 мсек(!) на заряд кондера емкостью 10 мкФ.

Цитата
А по второму пункту данных точно никаких нет, DMA выключен, блок I2S выключен.
А осцилом посмотреть?

Как насчет таких вариантов:
1. Всегда гнать данные через I2S чтобы не пропадал сигнал MCLK.
2. Вместо MCLK задействовать выход таймера. На этом пине есть TIM8 и TIM3
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 9 2017, 19:03
Сообщение #5


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

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



Цитата(uriy @ Jan 9 2017, 20:05) *
А осцилом посмотреть?


Я осциллом тоже смотрел.
Попробую подать с таймера, посмотрю что изменится.
Но у меня нет там таких емкостей, 1мкф максимум, да и полсекунды многовато на это.
сегодня попробую, завтра напишу что получилось)
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 10 2017, 08:10
Сообщение #6


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

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



Завел я частоту MCK с таймера, и как и ожидалось, сразу исчезла проблема пропадания начала проигрывания, и
и при окончании проигрывания шумы тоже исчезли !!!!

НО, так как частоты MCK, SCK, LRCK должны биться, а у меня МСК идет от отдельного таймера, а SCK и LRCK от модуля I2S,
то звук получился как из ж..ы!

Я предполагал что так будет, но зато проверил что действительно MCK надо подавать заранее а
отключать с задержкой после окончания проигрывания!

Теперь вот думаю что надо переводить кодек в режим мастера, а микроконтроллер будет слэйвом,
тогда кодек сам будет нарезать сигналы SCK и LRCK, правда выбор делителей MCK там какой-то мутный,
возможно и не получится.
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 10 2017, 11:15
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
НО, так как частоты MCK, SCK, LRCK должны биться
Откуда это следует? SCK и LRCK да будут синхронны. MCLK в упомянутом мною кодеке SSM2603 вовсе может поступать от кварцевого резонатора подключенного прямо к кодеку. Не думаю что нужна синхронная MCLK.
Частота сэмплирования определяется сигналом LRCK.

Цитата
Я предполагал что так будет
Не вижу в этом логики.
1. Какую частоту MCLK вы сделали?
2. На MCLK меандр с 50% заполнением?

Цитата
Теперь вот думаю что надо переводить кодек в режим мастера

Я именно так и делаю. В хост контроллере включаю прерывания по приему данных через I2S и в этом же прерывании отправляю данные в кодек.

Цитата
правда выбор делителей MCK там какой-то мутный,

Вроде в Table 1. Serial Port Clocking все понятно.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 10 2017, 13:06
Сообщение #8


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

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



MCK у меня 2048 Кгц (это когда I2S генерит)

Шим 50%, c таймера удалось сделать только 2048780 (84000000/41)
Тем не менее звук испорчен (очень хриплый что ли стал)
Поэтому и решил что частоты должны биться.

MCK не важно, это когда кодек мастер и сам генерит CK и RLCK, а у меня то слейв.

А в таблице напрягает что нет RATIO=32 для СK и RLCK, а только 64.

А у меня сейчас частота CK=256Кгц, а RLCK=8 Кгц так как данные у меня по 16 бит передаются для каждого канала
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 10 2017, 14:42
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Разве такая низкая частота для MCLK допустима?
Минимальное что я вижу в таблицах для настройки регистров это 6.1440 МГц.
Также в даташите написано 7. Optimal PWM performance is achieved when MCLK > 12 MHz
Сделайте 12МГц
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 11 2017, 06:08
Сообщение #10


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

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



Цитата(uriy @ Jan 10 2017, 17:42) *
Разве такая низкая частота для MCLK допустима?
Минимальное что я вижу в таблицах для настройки регистров это 6.1440 МГц.
Также в даташите написано 7. Optimal PWM performance is achieved when MCLK > 12 MHz
Сделайте 12МГц



Выходит допустима, раз работает )
Во всяком случае модуль i2s микроконтроллера умеет выводить только частоту Fs*256, а Fs у меня 8 КГц

Вот мастером сделаю кодек, тогда попробую 12Мгц
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 11 2017, 11:58
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Как работает? Вы же сами сказали что звук как из ж.
Эта частота должна использоваться в сигма-дельта модуляторе. Возможно из-за этого искажения звука.
Просто поменяйте делитель таймера чтобы получить другую частоту на выходе и проверьте.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 11 2017, 18:45
Сообщение #12


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

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



Цитата(uriy @ Jan 11 2017, 14:58) *
Как работает? Вы же сами сказали что звук как из ж.
Эта частота должна использоваться в сигма-дельта модуляторе. Возможно из-за этого искажения звука.
Просто поменяйте делитель таймера чтобы получить другую частоту на выходе и проверьте.



Не, звук качественный когда все частоты генерит модуль i2s, а когда MCK я сам генерю таймером (это чтоб его заранее включать, чтобы начало файла не проглатывалось)
то тогда звук уже искаженный, но файл теперь сначала воспроизводит
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 12 2017, 10:28
Сообщение #13


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

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



Перевел вчера кодек в режим MASTER, а микроконтроллер в SLAVE.

Задал частоту MCK микроконтроллера 12.28 МГц через выход MCO2 (поигрался с настройкой PLL)

В итоге с кодека получил частоту LRCK равную 8KHz и частоту SCK равную 512KHz

Таким образом получил RATIO (SCK/LRCK)=64, но для этого надо передавать на кодек данные по 32 бита а не по 16,
поэтому переключил i2s модуль микроконтроллера в режим << LSB justified 16-bit extended to 32-bit packet frame with CPOL = 0 >>
а кодек переключил в режим Right-Justified Format и биты AWL поставил в единицы (Audio word length=16 bit)

В итоге звук стал нормальный, но опять сьелся начальный кусочек файла ). Но наверное это уже с DMA проблема, так как теперь постоянно присутствует клок SCK.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 12 2017, 22:13
Сообщение #14


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

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



Все победил я этот кодек, звук нормальный, файлик проигрывает полностью.
Конечно в том виде как это было сделано в примере audio playback and record от MCD Application Team это было неработоспособно
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 13 2017, 05:06
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 231
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Около полугода назад пробовал думаю этот пример. Запись на флешку с микрофона а потом воспроизведение.
У меня все отлично работало.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th April 2017 - 14:10
Рейтинг@Mail.ru


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