Чип AudioСodec(а) WM8731 (или (ADC/DAC)*2)

Существует очень милый 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

e317c086c644b4b70a6f9618266e2fa9.png

или такая более подробная

66e0e6c60f7897af23fb38355807c94f.png


А так чип выглядит в реальной жизни

Расcпиновка чипа WM8731Расcпиновка чипа WM8731

Для чипа существует весьма удобная отладочная плата. Называется ALINX AN831 c WM8731 на борту. Вот так она выглядит

ALINXALINX

Габариты отладочной платы ALINX AN831.

e4a1c302d13a6757ed2f0d96c6aca3d2.png

вот блок-схема платы ALINX AN831

b19152dc6cfaf7d534f02d1d7f5b9bb4.png

Распиновку пришлось восстанавливать по внешним признакам. Тут помог микроскоп, чтобы проследить путь дорожек на PCB от чипа U11 к основному разъёму J3.

Сразу хочу отметить, что при макетировании особенно прочно надо закрепить провод управления частоты дискретизации LRC. Так как если он по каким-то причинам отвалится, то вы в наушниках услышите крайне невыносимый скрежет.

e0b30b7b8774e89102274f89154fdd54.PNG

Компактная карта 11ти 9ти битных регистров чипа WM8731. Совсем немного конфигов.

2d9225104f4612508ca7cb4ec6e2846e.png

Вы спросите где взять драйвер для чипа WM8731? А вот где. Есть 3 варианта.

1--Достать из сорцов ОС Zephyr RTOS

9676b25d2d5e25273246eba233f133c8.png

2--извлечь из состава ядра Linux https://elixir.bootlin.com/linux/latest/source/sound/soc/codecs/wm8731.c

3--Выбрать драйвер на github.com

971016231bf9103d2762416b99229e43.png


Потом первая проблема с которой я столкнулся это то, что чип WM8731 не заработал после инициализации. Я специально в инициализации поставил режим side tone. Это режим аналогового слухового аппарата. Однако ничего не произошло. Забегая вперед скажу, что в этом чипе прочитать регистры нельзя. Понять, что произошло чисто програмно не выйдет. Однако тут мне помог логический анализатор Saleae. На осциллограмме было видно, что MCU просто прописывал не тот I2C адрес. Я поставил адрес 0×1A и side tone включился. Чудно. Достучались до регистров.

Если что-то не работает, то без осциллографа или логического анализатора тут никак не обойтись. Вот разбор образцовой I2C осциллограммы (записи регистра 0). Как видно чип WM8731 послушно отзывается на адрес 0×1A. Ок. двигаемся дальше.

((

Фаза 2. Как проверить, что работает цифровой тракт? Для проверки аудио тракта я обычно воспроизвожу синус. Его очень просто расcчитать прямо на MCU (шке). Достаточно циклически отправлять всего пары периодов. Инициирую генерацию синуса прямо в RunTime из-под Debug CLI Terminal поверх UART.

fee9f07b4e3a373b3537ea68e9c430bd.png

Логический анализатор Seleae (сало) показывает, что на проводах Right и Left Headphone период равен 1ms значит частота 1kHz. Успех! Его же можно послушать на наушниках. Всё работает

54c732b90b699497b5c2290effcf36bd.png

Также можно проверить правильность воспроизведения синуса мобильным приложением Spectroid. Приложение строит график зависимости амплитуды сигнала от частот (Фурье преобразование в частотной области). Вот тут видно как наушники воспроизводят синус на частоте точно 2kHz.

e0365669cbba655621b587535e754636.jpg

Типичные пробелы при работе с DAC чипом WM8731:

Проблема

Решение

звук приходящий с I2S хрипящий и бубнящий. Как будто кто-то говорит в трубу диаметром 70 мм.

проверить контакты. I2S провода DATA WS CLK должны быть очень жесткими. Частоты бешеные. Любой дребезр искажает значения PCM семплов

Появился скрежет

Закрепить прочнее провод WS

Не применяются конфиги

Проверить осциллографом адрес I2C чипа прямо в шине I2C

Недостаток чипа WM8731

1--I2C не поддерживает чтение регистров. Это очень плохо. Нельзя делать диагностику и авто тесты. Об этом прямо в спеке прописано.

2b26f28531851a55c3e7fde73dbb1ad5.png

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

https://we.easyelectronics.ru/tag/WM8731/

https://www.youtube.com/watch? v=mTAcDftyYBs

© Habrahabr.ru