Arduino & Raspberry Pi

En flerkanalig HDA-kodek på RP2040

HDA Link-gränssnittet, även kallat Azalia, finns oftast bara i PC-chipset. Författaren till en artikel på Habr ville undersöka om mikrokontrollern RP2040 på Raspberry Pi Pico kunde fungera som värd för gränssnittet. Fördelen är tydlig: flerkanaliga HDA-ljudkodekar har betydligt fler kanaler än I²S.

Projektet bygger på en RP2040 med PIO-block och en Realtek ALC889-kodek på kortet, ett kort som blev över från ett tidigare misslyckat försök med en STM32F103 och en Spartan-3. BCLK-signalen måste vara stabil på 24 MHz och kan därför inte genereras i mjukvara. Gränssnittet använder fyra linjer: BCLK, SYNC, SDO och SDI, och en ram på 1000 bitar ger 48 kHz; vid 96 och 192 kHz ökar antalet samplingar per ram.

Implementationen använder fyra PIO-tillståndsmaskiner: SDO-utgång, SYNC-utgång, SDI-ingång med BCLK-generering och en maskin som tilldelar kodeken en adress. Data går via DMA, medan RP2040:s andra kärna packar samplingar och kommandon och tolkar kodekens svar. Demoprojektet genererar sinusvågor på fem stereo-DAC:ar, med tredje övertonen runt −123 dB.

Kodeken fungerade vid 192 kHz samplingsfrekvens. Att överklocka RP2040 till 32 MHz (256 kHz) fungerade också, men kodeken blev kraftigt varm. Kortet drar 150 till 270 mA vid 3,3 V. Det finns också begränsningar: de inbyggda filtren fungerar som ett första ordningens högpassfilter med brytfrekvens på cirka 4 Hz, och HDA-ingångens bandbredd tillåter inte tre stereokanaler i 24/192 samtidigt.

Författaren hittade dessutom ett synkroniseringsfel i RP2040 när DMA, USB och XIP-sampling körs samtidigt; orsaken fastställdes av specialister på Raspberry Pi. För komplex bearbetning rekommenderar han RP2350, som har DSP-instruktioner. Jag gillar att projektet ärligt visar både resultat och svagheter.

Källa: Habr

Kommentarer 0

Skriv den första kommentaren, på vilket språk du vill.

Logga in för att kommentera