USB интерфейс UI-01
USB интерфейс UI-01
Добрый вечер уважаемые 22(!) подписчика и многоуважаемые читатель Пикабу.
Продолжаю свой эльфийский бред, на тему проектирования и изготовления аудио железок.
Сегодня хочу рассказать о своей очередной разработке, USB-I2S аудиоинтерфейсе UI-01.
Идея сделать свой USB транспорт родилась во время проектирования АЦП. Проблема подключения к компьютеру изначально решалась с помощью SPDIF через звуковую карту E-MU 0404 PCIe. Но это накладывало определенные ограничения в виде лимита сэмплрейта в 44.1-96 кГц, сложность настройки PatchMixer'а, а так же глюки драйверов в современных ОС.
Первый адаптер пытался сделать на плате STM32Discovery на процессоре STM32F411, но очень быстро пришел к тому, что с этими процессорами нет возможности сделать хайрез адаптер, т.к. в процессоре присутствует только USB 1.0 PHY, а нужен был как минимум USB 2.0 PHY, цеплять внешний PHY небыло никакого желания.
Под рукой долгое время скучала плата XMOS startKit с 16 ядерным процессором, но в этой плате есть одно большое НО: 1 тайл залочен под дебаггер, а с ним и USB PHY, т.е. прямого доступа к порту USB нет, только 1 тайл с 8 ядрами и GPIO, поэтому было решено разработать собственную плату.
Выбор пал на процессор XUF208.
После довольно долгого изучения технической документации была разработана, заказана в китае и собрана первая плата:
На обратной стороне решил увековечить одного из героев MLP - Спайка, т.к. дочка очень любит этот мультсериал :)
Получился адаптер со следующими характеристиками:
- USB 2.0 High speed
- ввод: PCM 44.1 - 384 кГц, стерео
- вывод: PCM 44.1 - 384 кГц, DSD DoP 64-128, DSD Native 64-256, стерео
- формат ввода/вывода PCM - I2S
- тактирование от платы ЦАП/АЦП
- питание Self Power
- 8 линий GPIO
Плата программируется с помощью специализированного адаптера XA-XTAG:
Возможно обновление прошивки через DFU, т.е. прямо с компьютера без адаптера, по USB.
На плате предусмотрел разъем с I2C шиной для подключения дисплея, кнопок и т.п.
Задумал 3 режима работы: Legacy, Soft и Native.
Legacy
Параллельный режим работы, при котором управляющие команды выдаются как статические сигналы (MUTE, RESET, DSD, F0,F1). Этот режим позволяет работать интерфейсу без платы управления. Этот режим работы предназначен для плат ЦАП/АЦП с контроллером, управляющим режимами работы
Soft режим.
Режим, при котором управление ИМС ЦАП/АЦП осуществляется по шине I2C или SPI. Конфигурация выбирается из меню. Необходима плата управления.
Native режим.
Режим, при котором конфигурация управления хранится в EEPROM памяти на плате ЦАП/АЦП. Наиболее функциональный режим, при котором всё управление осуществляется с процессора интерфейса. Управляющие сигналы на плате ЦАП/АЦП формируются с помощью I2C экспандера. Этот режим позволит использовать самую различную периферию на плате преобразователя (регулятор громкости и т.п.) без необходимости настройки, т.к. конфигурация будет храниться в EEPROM. Разъем 10 пиновый, т.к достаточно только I2S и I2C сигналы. Этот режим позволяет работать интерфейсу как с платой управления, так и без неё.
Выводы сгруппированы по функциональному назначению, поэтому в случае неиспользуемых функций (например не нужен SPI), изолятор отвечающий за эту группу сигналов может не устанавливаться на плату.
Распиновка разъема I2S:
Полнофункциональные драйверы подходят отсюда:
http://jlsounds.com/drivers.html
Firmware. Написание прошивки оказалось непростой задачей. SDK, который предоставляет XMOS содержит кучу ошибок, которые приходится долго и муторно устранять.
Первое что попалось - неверное воспроизведение DSD, только с генератором на 48 кГц, порывшись на форуме xcore.com было найдено решение - добавление дефайнов в аудио ядро. Следующая проблема - исключение, при попытке "разбудить" устройство по шине USB, т.е. после того, как посылается команда Resume. Вылечилось костылём от прошивки evolution board на процессоре XE216, решение дубовое, но работает. Инженеры из XMOS скрыли исходный код модуля XUD, отвечающего за низкоуровневую работу с USB PHY, видимо там запрятан платный код, для работы с яблочными телефонами.
Необходимо будет провести проверку на битперфектность, для этого нужно написать софт, генерирующий Wav и записывающий звук. Грубо говоря сделать цифровой loop и посмотреть, что же возвращается по факту, ну и конечно же сосчитать кол-во ошибок.
На данный момент полностью реализован режим Legacy. Так же исправлены большинство "детских" болезней. В процессе работы удаление щелчков при переключении PCM-DSD и обратно.
Сейчас плата проходит стадию железотестирования и отладки ПО. Использую со свои ЦАПом на АК4490, звук устраивает, что же еще для счастья нужно?
На сегодня пока всё, всем добра и котиков.