Существует очень милый 28-пиновый чип WM8731. Это стерео аудиокодек или однокристальная звуковая карта. В сущности 2 пары ADC/DAC на 24бит каждый с настраиваемой по I2C/I2S частотой дискретизации 8kHz...96kHz ролью на I2S шине и пр. Он знаменит тем, что его в свое время заложили в культовую отладочную плату с FPGA Altera-DE1 и чип WM8731 стал знаменит во всех технических вузах мира. Посмотрим на что способен чипок WM8731.
В этом тексте я напишу о своем опыте работы с чипом WM8731, частично восполню нехватку документации на китайскую плату с ним и скажу решения основных сбоев с WM8731.
Тут сразу следует отметить, что с аудиокодеками надо работать с большой осторожностью так как они могут запросто повредить слух громким звуком. Не надо надевать наушники, если нет уверенности об амплитуде сигнала.
Итак, что надо из оборудования?
Оборудование |
Количество |
Назначение |
ALINX WM8731 |
1 |
Для воспроизведения и записи звука |
Зажимы Wago |
6+ |
Для подключения логического анализатора к шине I2S |
Микроскоп |
1 |
Чтобы проследить путь дорожек на PCB так как документации на отладочную плату нет |
Пластиковые стойки |
10+ |
для установки плат на макете |
Органическое стекло площадью A3 |
1 |
Работать приходится не в невесомости. Чтобы провода не оторвались от провисания надо жестко закрепить платы на общей подложке |
LapTop |
1 |
Для программирования плат |
Перемычки вилка-вилка |
n |
Для соединения плат между собой |
Микроконтроллер |
1 |
Для конфигурирования кодеке по I2C |
Логический анализатор |
1 |
Для наблюдения за работой аудиокодека |
Наушники |
1 |
Для воспроизведения звука |
Микрофон |
1 |
Для тестирования звуко-излучателя в режиме Side Tone |
Вот блок схема SoC WM8731
или такая более подробная:
А так чип выглядит в реальной жизни:
Для чипа существует весьма удобная отладочная плата. Называется ALINX AN831 c WM8731 на борту. Вот так она выглядит:
Габариты отладочной платы ALINX AN831:
Вот блок-схема платы ALINX AN831:
Распиновку пришлось восстанавливать по внешним признакам. Тут помог микроскоп, чтобы проследить путь дорожек на PCB от чипа U11 к основному разъёму J3.
Сразу хочу отметить, что при макетировании особенно прочно надо закрепить провод управления частоты дискретизации LRC. Так как если он по каким-то причинам отвалится, то вы в наушниках услышите крайне невыносимый скрежет.
Компактная карта 11ти 9ти битных регистров чипа WM8731. Совсем немного конфигов.
Вы спросите где взять драйвер для чипа WM8731? А вот где. Есть 3 варианта.
1--Достать из сорцов ОС Zephyr RTOS
2--извлечь из состава ядра Linux https://elixir.bootlin.com/linux/latest/source/sound/soc/codecs/wm8731.c
3--Выбрать драйвер на github.com
Вот такой я собрал макет для отладки аудио прошивок.
Потом первая проблема с которой я столкнулся это то, что чип WM8731 не заработал после инициализации. Я специально в инициализации поставил режим side tone. Это режим аналогового слухового аппарата. Однако ничего не произошло. Забегая вперед скажу, что в этом чипе прочитать регистры нельзя. Понять, что произошло чисто програмно не выйдет. Однако тут мне помог логический анализатор Saleae. На осциллограмме было видно, что MCU просто прописывал не тот I2C адрес. Я поставил адрес 0x1A и side tone включился. Чудно. Достучались до регистров.
Если что-то не работает, то без осциллографа или логического анализатора тут никак не обойтись. Вот разбор образцовой I2C осциллограммы (записи регистра 0). Как видно чип WM8731 послушно отзывается на адрес 0x1A. Ок. двигаемся дальше.
Фаза 2. Как проверить, что работает цифровой тракт? Для проверки аудио тракта я обычно воспроизвожу синус. Его очень просто расcчитать прямо на MCU(шке). Достаточно циклически отправлять всего пары периодов. Инициирую генерацию синуса прямо в RunTime из-под Debug CLI Terminal поверх UART.
Логический анализатор Seleae(сало) показывает, что на проводах Right и Left Headphone период равен 1ms значит частота 1kHz. Успех! Его же можно послушать на наушниках. Всё работает:
Также можно проверить правильность воспроизведения синуса мобильным приложением Spectroid. Приложение строит график зависимости амплитуды сигнала от частот (Фурье преобразование в частотной области). Вот тут видно как наушники воспроизводят синус на частоте точно 2kHz.
Типичные пробелы при работе с DAC чипом WM8731:
Проблема |
Решение |
звук приходящий с I2S хрипящий и бубнящий. Как будто кто-то говорит в трубу диаметром 70мм. |
проверить контакты. I2S провода DATA WS CLK должны быть очень жесткими. Частоты бешеные. По 3 MHz. Любой дребезг искажает значения PCM семплов |
Появился скрежет |
Закрепить прочнее провод WS. Лучше припаять. |
Не применяются конфиги. Init не отработал. |
Проверить осциллографом адрес I2C чипа прямо в шине I2C |
Недостаток чипа WM8731
1--I2C не поддерживает чтение регистров. Это очень плохо. Нельзя делать диагностику и авто тесты. Об этом прямо в спеке прописано.
2--Чип иногда зависает. Приходится пере сбрасывать питание и заново конфигурить I2C регистры.
3--Нет пина Reset.
Достоинства чипа WM8731
1--Простота чипа WM8731. У него внутри всего-навсего одиннадцать 9-битных регистров (99 битиков) конфигурации. Это ни о чем в сравнении с современными аудиокодеками такими как CS47L63 у которого 936 регистров по 32 bit каждый (29952 бит). Чип WM8731 в 302 раза проще CS47L63 (современных кодеков).
2--Малые габариты отладочной платы Alinx.
3--Дешевизна. Отладка всего за 1450 RUR.
Идеи проектов на WM8731 или любом другом аудио-кодеке
Простые аудио проекты:
1--Диктофон.
2--Плейер Wav файлов.
3--Электронный камертон для пианистов.
4--Стенд для тестирования наушников.
5--Караоке. Чип может усиливать аналоговый сигнал от микрофона.
6--Слуховой аппарат.
7--Двухканальный осциллограф на основе LineIn входов
8--Генератор сигналов на основе LineOut выходов
Сложные аудио проекты:
1--Звуковая локализация. Входы LineIn можно использовать как 2 независимых микрофона. Это значит, что можно вычислять корреляцию 2х сигналов и выявлять угол направления прихода звуковой волны (AngleOfArrival). У меня получалось +-5 градусов. Это может пригодится для ориентации поворотных видеокамер или для выявления источника стрельбы.
2--Звуковые эффекты: Эхо, дисторшн. Так как можно считывать и воспроизводить звук в цифровом виде, то тут можно по-разному экспериментировать с синтезом разнообразных цифровых фильтров или изучать их используя реальных звук в real-time.
3--Звуковой сонар для определения расстояния до препятствия.
4--Передача и прем бинарных данных по звуку. Беспроводной аудио интерфейс. Можно написать DeskTop утилиту, которая будет воспроизводить файлы и через провод AudioJack переливать файлы в AudioFlash(ку). И никакой детектор USB трафика этого не заметит. Или сделать обновление прошивки по звуку. Надо лишь понять какая нужна модуляция.
Вывод
WM8731 чип очень доступный. Однако я бы не рекомендовал чип WM8731 для применения в новых серьезных проектах так как отсутствие поддержки чтения регистров не позволит делать надежные и безопасные устройства и присутствующие ему зависания будут мешать. Это кодек подойдет разве что только для прототипов и тестовой оснастки. Отладочная плата может быть очень полезна для тех случаев, если надо быстро воспроизвести или записать звук. Плюс WM8731 только в малых габаритах платы и простоте.
Quiz
--Какой модульный автотест можно написать, чтобы проверить корректность работы I2S?
--Какой модульный автотест можно написать, чтобы проверить корректность работы I2С?
--Как можно отладить драйвер I2S когда он работает в режиме I2S loopback?
--Что такое De-emphasis?
Links
Комментарии (7)
t1m89
09.12.2022 13:40+2А известны ли примеры подключения нескольких одновременно работающих аудио чипов на шину I2S? Знаю, что по умолчанию можно по этому интерфейсу присоединиться только к одному чипу.
aabzel Автор
09.12.2022 18:04+1I2S DAC(и) можно параллельно подключать до тех пор пока паразитная емкость не завалит фронты клоков.
DagothNik
12.12.2022 00:27+1Я хоть и не имел дела с ПЛИС, но тем не менее этот чип мне тоже показался знакомым. Проверил по записям и точно: его устанавливали в iPod mini и iPod третьего поколения.
SergeyMax
Я правильно вас понял, что вы подключили QFN чип навесным монтажом, и не рекомендуете его, потому что он зависает?
aabzel Автор
Макет собран на подложке. Платы соединены перемычками. Не рекомендую чип так как он не поддерживает чтение регистров по I2C.