Arduino e Raspberry Pi

Um codec HDA multicanal no RP2040

A interface HDA Link, também chamada Azalia, costuma aparecer apenas em chipsets de PC. O autor de um artigo no Habr quis verificar se o microcontrolador RP2040 da Raspberry Pi Pico poderia atuar como host dessa interface. A vantagem é clara: codecs de áudio HDA multicanal oferecem muito mais canais do que o I²S.

O projeto gira em torno de um RP2040 com blocos PIO e de um codec Realtek ALC889 presente na placa, que sobrou de uma tentativa anterior fracassada com um STM32F103 e um Spartan-3. O sinal BCLK precisa ser estável em 24 MHz, por isso não pode ser gerado por software. A interface usa quatro linhas: BCLK, SYNC, SDO e SDI, e um quadro de 1000 bits resulta em 48 kHz; para 96 e 192 kHz, o número de amostras por quadro aumenta.

A implementação usa quatro máquinas de estado PIO: saída SDO, saída SYNC, entrada SDI com geração do BCLK e uma máquina que atribui endereço ao codec. Os dados trafegam por DMA, enquanto o segundo núcleo do RP2040 empacota amostras e comandos e interpreta as respostas do codec. O projeto de demonstração gera senoides em cinco DACs estéreo, com a terceira harmônica perto de −123 dB.

O codec funcionou a 192 kHz. Fazer overclock do RP2040 para 32 MHz (256 kHz) também funcionou, mas o codec esquentou bastante. A placa consome de 150 a 270 mA em 3,3 V. Há limitações: os filtros embutidos funcionam como um passa-altas de primeira ordem com frequência de corte de cerca de 4 Hz, e a largura de banda de entrada HDA não permite três canais estéreo de 24/192 ao mesmo tempo.

O autor também encontrou um erro de sincronização do RP2040 quando DMA, USB e a amostragem via XIP funcionam juntos; a causa foi identificada por especialistas da Raspberry Pi. Para processamento complexo, ele recomenda o RP2350, que tem instruções DSP. Gosto de como o projeto mostra com honestidade tanto os resultados quanto os pontos fracos.

Fonte: Habr

Comentários 0

Deixe o primeiro comentário, em qualquer idioma.

Entre para comentar