Arduino & Raspberry Pi

Een meerkanaals HDA-codec op de RP2040

De HDA Link-interface, ook Azalia genoemd, komt meestal alleen voor in pc-chipsets. De auteur van een artikel op Habr wilde nagaan of de RP2040-microcontroller op de Raspberry Pi Pico als host voor die interface kan dienen. Het voordeel is duidelijk: meerkanaals HDA-audiocodecs bieden veel meer kanalen dan I²S.

Het project draait om een RP2040 met PIO-blokken en een Realtek ALC889-codec op de print, een print die overbleef van een eerdere mislukte poging met een STM32F103 en een Spartan-3. Het BCLK-signaal moet stabiel op 24 MHz liggen, dus het kan niet softwarematig worden gegenereerd. De interface gebruikt vier lijnen: BCLK, SYNC, SDO en SDI, en een frame van 1000 bits geeft 48 kHz; bij 96 en 192 kHz neemt het aantal samples per frame toe.

De implementatie gebruikt vier PIO-state machines: SDO-uitvoer, SYNC-uitvoer, SDI-invoer met BCLK-generatie en een state machine die de codec een adres toekent. De data gaat via DMA, terwijl de tweede kern van de RP2040 samples en commando's inpakt en de antwoorden van de codec uitleest. Het demoproject genereert sinusgolven op vijf stereo-DAC's, met de derde harmonische rond −123 dB.

De codec werkte bij een bemonsteringsfrequentie van 192 kHz. De RP2040 overklokken naar 32 MHz (256 kHz) lukte ook, maar de codec werd flink warm. De print trekt 150 tot 270 mA bij 3,3 V. Er zijn ook beperkingen: de ingebouwde filters werken als een eerste-orde hoogdoorlaatfilter met een afsnijfrequentie van ongeveer 4 Hz, en de HDA-invoerbandbreedte laat niet tegelijk drie stereokanalen van 24/192 toe.

De auteur vond bovendien een synchronisatiefout in de RP2040 wanneer DMA, USB en XIP-bemonstering tegelijk draaien; de oorzaak werd door specialisten van Raspberry Pi vastgesteld. Voor complexe verwerking adviseert hij de RP2350, die DSP-instructies heeft. Ik vind het goed dat het project zowel de resultaten als de zwakke punten eerlijk laat zien.

Bron: Habr

Reacties 0

Plaats de eerste reactie, in elke taal.

Log in om te reageren