Многоканальный HDA-кодек на RP2040
Интерфейс HDA Link, он же Azalia, обычно встречается только в чипсетах ПК. Автор статьи на Хабре решил проверить, может ли микроконтроллер RP2040 на Raspberry Pi Pico стать его хостом. Выигрыш понятен: многоканальные аудиокодеки с HDA намного богаче I²S по числу каналов.
Основа проекта: RP2040 с блоками PIO и кодек Realtek ALC889 на плате, оставшейся от неудачной попытки на STM32F103 и Spartan-3. Тактовый сигнал BCLK должен быть стабильным 24 МГц, поэтому формировать его программно нельзя. Интерфейс использует четыре линии: BCLK, SYNC, SDO и SDI, а кадр содержит 1000 бит, что даёт 48 кГц; для 96 и 192 кГц число семплов в кадре увеличивается.
Реализация построена на четырёх автоматах PIO: вывод SDO, вывод SYNC, ввод SDI с формированием BCLK и автомат назначения адреса кодеку. Данные идут через DMA, а второе ядро RP2040 упаковывает семплы и команды и разбирает ответы кодека. Демо-проект генерирует синусоиды на пяти стереоЦАП, третья гармоника около −123 дБ.
Кодек работает на частоте дискретизации 192 кГц. Разгон RP2040 до 32 МГц (256 кГц) сработал, но кодек сильно нагревался. Плата потребляет от 150 до 270 мА при 3,3 В. Есть и ограничения: встроенные фильтры работают как ФВЧ первого порядка с частотой среза около 4 Гц, а полоса HDA на ввод не позволяет три стереоканала 24/192 одновременно.
Автор также нашёл ошибку синхронизации RP2040 при одновременной работе DMA, USB и выборки из XIP, причину которой выяснили специалисты Raspberry Pi. Для сложной обработки он советует RP2350 с DSP-инструкциями. Мне нравится, что проект честно показывает и результаты, и слабые места.
Источник: Хабр
Основа проекта: RP2040 с блоками PIO и кодек Realtek ALC889 на плате, оставшейся от неудачной попытки на STM32F103 и Spartan-3. Тактовый сигнал BCLK должен быть стабильным 24 МГц, поэтому формировать его программно нельзя. Интерфейс использует четыре линии: BCLK, SYNC, SDO и SDI, а кадр содержит 1000 бит, что даёт 48 кГц; для 96 и 192 кГц число семплов в кадре увеличивается.
Реализация построена на четырёх автоматах PIO: вывод SDO, вывод SYNC, ввод SDI с формированием BCLK и автомат назначения адреса кодеку. Данные идут через DMA, а второе ядро RP2040 упаковывает семплы и команды и разбирает ответы кодека. Демо-проект генерирует синусоиды на пяти стереоЦАП, третья гармоника около −123 дБ.
Кодек работает на частоте дискретизации 192 кГц. Разгон RP2040 до 32 МГц (256 кГц) сработал, но кодек сильно нагревался. Плата потребляет от 150 до 270 мА при 3,3 В. Есть и ограничения: встроенные фильтры работают как ФВЧ первого порядка с частотой среза около 4 Гц, а полоса HDA на ввод не позволяет три стереоканала 24/192 одновременно.
Автор также нашёл ошибку синхронизации RP2040 при одновременной работе DMA, USB и выборки из XIP, причину которой выяснили специалисты Raspberry Pi. Для сложной обработки он советует RP2350 с DSP-инструкциями. Мне нравится, что проект честно показывает и результаты, и слабые места.
Источник: Хабр
Комментарии 0
Оставьте первый комментарий на любом языке.
Войдите, чтобы комментировать