Wielokanałowy kodek HDA na RP2040
Interfejs HDA Link, zwany też Azalia, występuje zwykle tylko w chipsetach komputerów PC. Autor artykułu na Habr chciał sprawdzić, czy mikrokontroler RP2040 z Raspberry Pi Pico może pełnić funkcję hosta tego interfejsu. Zaleta jest oczywista: wielokanałowe kodeki audio HDA oferują znacznie więcej kanałów niż I²S.
Projekt opiera się na RP2040 z blokami PIO oraz kodeku Realtek ALC889 umieszczonym na płytce. Płytka pochodzi z wcześniejszej, nieudanej próby z STM32F103 i Spartanem-3. Sygnał BCLK musi być stabilny na poziomie 24 MHz, więc nie da się go wygenerować programowo. Interfejs używa czterech linii: BCLK, SYNC, SDO i SDI, a ramka z 1000 bitów daje 48 kHz; dla 96 i 192 kHz rośnie liczba próbek w ramce.
Implementacja korzysta z czterech automatów stanów PIO: wyjścia SDO, wyjścia SYNC, wejścia SDI z generowaniem BCLK oraz automatu przypisującego adres kodekowi. Dane przesyłane są przez DMA, a drugi rdzeń RP2040 pakuje próbki i polecam oraz interpretuje odpowiedzi kodeka. Projekt demonstracyjny generuje sinusoidy na pięciu stereofonicznych przetwornikach DAC, a trzecia harmoniczna wynosi około −123 dB.
Kodek działał przy częstotliwości próbkowania 192 kHz. Podkręcenie RP2040 do 32 MHz (256 kHz) też zadziałało, ale kodek mocno się nagrzewał. Płytka pobiera od 150 do 270 mA przy 3,3 V. Są też ograniczenia: wbudowane filtry działają jak filtr górnoprzepustowy pierwszego rzędu o częstotliwości granicznej około 4 Hz, a przepustowość wejścia HDA nie pozwala na jednoczesne trzy kanały stereo 24/192.
Autor znalazł też błąd synchronizacji RP2040, gdy jednocześnie działają DMA, USB i próbkowanie z XIP; jego przyczynę ustalili specjaliści Raspberry Pi. Do bardziej złożonego przetwarzania polecam RP2350 z instrukcjami DSP. Podoba mi się, że projekt uczciwie pokazuje zarówno wyniki, jak i słabe strony.
Źródło: Habr
Projekt opiera się na RP2040 z blokami PIO oraz kodeku Realtek ALC889 umieszczonym na płytce. Płytka pochodzi z wcześniejszej, nieudanej próby z STM32F103 i Spartanem-3. Sygnał BCLK musi być stabilny na poziomie 24 MHz, więc nie da się go wygenerować programowo. Interfejs używa czterech linii: BCLK, SYNC, SDO i SDI, a ramka z 1000 bitów daje 48 kHz; dla 96 i 192 kHz rośnie liczba próbek w ramce.
Implementacja korzysta z czterech automatów stanów PIO: wyjścia SDO, wyjścia SYNC, wejścia SDI z generowaniem BCLK oraz automatu przypisującego adres kodekowi. Dane przesyłane są przez DMA, a drugi rdzeń RP2040 pakuje próbki i polecam oraz interpretuje odpowiedzi kodeka. Projekt demonstracyjny generuje sinusoidy na pięciu stereofonicznych przetwornikach DAC, a trzecia harmoniczna wynosi około −123 dB.
Kodek działał przy częstotliwości próbkowania 192 kHz. Podkręcenie RP2040 do 32 MHz (256 kHz) też zadziałało, ale kodek mocno się nagrzewał. Płytka pobiera od 150 do 270 mA przy 3,3 V. Są też ograniczenia: wbudowane filtry działają jak filtr górnoprzepustowy pierwszego rzędu o częstotliwości granicznej około 4 Hz, a przepustowość wejścia HDA nie pozwala na jednoczesne trzy kanały stereo 24/192.
Autor znalazł też błąd synchronizacji RP2040, gdy jednocześnie działają DMA, USB i próbkowanie z XIP; jego przyczynę ustalili specjaliści Raspberry Pi. Do bardziej złożonego przetwarzania polecam RP2350 z instrukcjami DSP. Podoba mi się, że projekt uczciwie pokazuje zarówno wyniki, jak i słabe strony.
Źródło: Habr
Komentarze 0
Dodaj pierwszy komentarz, w dowolnym języku.
Zaloguj się, aby komentować