Багатоканальний 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
Залиште перший коментар будь-якою мовою.
Увійдіть, щоб коментувати