Как Заставить Омегу 2 Говорить Или Легенда Об I2S

Что такого сложного в I2S? Подключаешь провода к нужным контактам и все работает.

Как заставить Омегу 2 говорить или легенда об I2S

Я тоже так думал, но с миникомпьютером Омега2 оказалось не все так просто.

Именно поэтому я решил написать эту статью.

Начнем с того, чего я добился в итоге.

К микрокомпьютеру Omega 2 я подключил микросхему TDA1543 (стерео I2S ЦАП с амплитудным разрешением 16 бит).

Звук хороший, с удовольствием слушаю интернет-радиостанции (должна быть шутка про аудифилов и тёплый ламповый звук).

Однако причину перегрузки звука я так и не выяснил, а лишь научился обходить ее методом костыля.

И мне бы очень хотелось услышать ваши мысли по этому вопросу.

Возможно кто-то не знает, что такое Омега2. Это мини-компьютер под управлением Linux на базе LEDE, который по сути является форком OpenWRT. Процессор MT7688, 64 МБ ОЗУ и 16 МБ флэш-памяти.

В общем, подробнее можно прочитать на Википедия , здесь И здесь .

Также важно отметить, что все действия выполняются на оригинальной прошивке версии 0.2.0. Теперь давайте немного поговорим о боли того, как я к этому пришел.

Для начала всё прозрачно, подключаем все линии I2S TDA'шки и Omega. Это соответственно линия синхронизации CLK, линия синхронизации канала WS, линия данных DATA и земля GND. Плюс добавляем пару резисторов и конденсаторов, но главное это подстроечный резистор для 7 ноги TDA1543. К этому отрезку необходимо применить нулевое смещение; сначала я уснул на этом.

Дело в том, что уникальная для своего времени микросхема TDA1543 работает от однополярного питания.

Ну а звуковой сигнал - это колебания относительно 0 вниз и вверх, поэтому нужно сместить этот ноль в середину диапазона напряжения питания и получить колебания относительно этой точки.

В даташите все описано, но изначально я собрал схему с обычным резистором (с ваших интернет-сайтов) и получил искажения, которые долго не понимал.

Установите переменный резистор и добейтесь смещения нуля при отсутствии сигнала на входе (режим покоя) 1,3-1,5 В (при питании 3,3 В).

В результате получается следующая диаграмма.



Как заставить Омегу 2 говорить или легенда об I2S

Далее следуя шагам из официальный сайт лука Обновляемся до девелоперской версии прошивки, в которой добавлена поддержка I2S (хотел написать меньше чем через год, но нет. прошло).

Обновляем и устанавливаем необходимые пакеты для работы звука:

  
  
  
   

opkg update opkg install alsa-utils mpg123

Переключите GPIO в режим I2S командой:

omega2-ctrl gpiomux set i2s i2s

Давайте скопируем тестовый wav-файл, я использовал классический Suzanne Vega — Tom's Diner. И попробуйте воспроизвести его с помощью aplay:

aplay za_sebya_i_za_sashky.wav

И мы слышим искажения.

Просто очень сильная перегрузка.

Настолько, что может показаться, что вы вернулись в 2007 год. Но в песне есть ударный мотив, так что в этом что-то есть, верно? Пробовал убавить громкость в микшере alsa - безрезультатно, так как драйвер заточен под чип MAX98090, который управляется по I2C и соответственно все настройки просто передаются на I2C, а сами данные I2S не меняются .

Хорошо, давайте откроем даташит на MAX98090. И мы начинаем курить.

Микросхема поддерживает множество форматов входных данных: I2S/LJ/RJ/TDM и способна обрабатывать высокие скорости передачи данных.

Да и сам процессор MT7688 тоже может больше и быстрее TDA. Может быть проблемы с данными в I2S? Пошел постепенно возиться с осциллографом.

16 бит? Да.

Я повесил линию WS на один канал и линию CLK на другой канал.

И убедился в длине импульсов WS - 16 циклов.

Неправильные рабочие частоты? Нет. Все частоты соответствуют рабочим требованиям.

WS – 44100 Гц, CLK – 1411200 Гц.

Формат типа числа в данных? Используется правильный знаковый формат (да, я думал, что нужен беззнаковый).

Я проверял, создавая искусственные синусы и перемещая их вверх-вниз относительно 0 в дерзости и меняя амплитуду.

Качественных изменений нет. I2S вообще есть? вероятно, да.

Во-первых, потому что тогда у меня всё работало (или мне так кажется), а во-вторых, я пробовал проверять осциллографом, хотя без логического анализатора это конечно затруднительно.

Возможно, стоит провести более точный тест и принести сюда свой Beaglebone. Вроде все правильно, и у ребят с лукового форума все работает, но правда на других чипах: MAX98357A и PCM5102. В общем, я отказываюсь от идеи проигрывать wavs и запускаю mpg123 для проигрывания mp3. Включаю его флагом -C и начинаю уменьшать громкость.

И вот я сел.

Когда ставлю уровень громкости в программе mpg123 примерно на 1 процент, то получаю отличный звук.

Микросхема раскачивается на полную амплитуду.

Я запускаю радио с флагом -f 128:

mpg123 -f 128 http://us2.internet-radio.com:8443/

И меня приветствуют звуки расслабляющего американского блюза.

Кстати ссылка на радио может не рабочая, я взял отсюда .



Как заставить Омегу 2 говорить или легенда об I2S

Я запускаю пилообразный сигнал и постепенно увеличиваю амплитуду.

В результате я увидел, что искажения - это хаотичные скачки от 0 до напряжения питания и чем выше уровень, тем больше эти скачки.

Мне потребовалось несколько недель, чтобы заставить Омегу заговорить.

Я очень устал и поэтому решил остановиться на этом пункте – это работает! Однако я понимаю, что это невозможно, поэтому буду рад услышать ваши идеи и предложения.

Ну а тем, кто изо всех сил пытается заставить омегу говорить, надеюсь, я вам помог! Спасибо всем! Теги: #linux #Сделай сам или Сделай сам #Электроника для начинающих #аудио #omega2 #omega #i2s #tda1543

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.