RP2040로 만든 다채널 HDA 코덱
HDA Link, 일명 Azalia 인터페이스는 보통 PC 칩셋에서만 볼 수 있습니다. Хабр의 한 저자는 Raspberry Pi Pico의 RP2040 마이크로컨트롤러가 이 인터페이스의 호스트 역할을 할 수 있는지 확인해 보기로 했습니다. 기대 효과는 분명합니다. HDA 다채널 오디오 코덱은 채널 수에서 I²S보다 훨씬 풍부합니다.
프로젝트의 기반은 PIO 블록이 있는 RP2040과 보드에 올라간 Realtek ALC889 코덱입니다. 이 보드는 앞서 STM32F103과 Spartan-3로 시도하다 실패한 뒤 남은 것입니다. BCLK는 안정적인 24MHz여야 하므로 소프트웨어로 만들 수 없습니다. 인터페이스는 BCLK, SYNC, SDO, SDI 네 개의 선을 쓰고, 한 프레임은 1000비트로 48kHz를 만듭니다. 96kHz와 192kHz에서는 프레임당 샘플 수가 늘어납니다.
구현은 PIO 상태 기계 네 개로 이루어집니다. SDO 출력, SYNC 출력, BCLK 생성을 포함한 SDI 입력, 코덱에 주소를 부여하는 상태 기계입니다. 데이터는 DMA로 오가고, RP2040의 두 번째 코어가 샘플과 명령을 묶고 코덱의 응답을 해석합니다. 데모 프로젝트는 다섯 개의 스테레오 DAC에서 사인파를 생성하며, 3차 고조파는 약 −123dB입니다.
코덱은 192kHz 샘플링으로 동작했습니다. RP2040을 32MHz(256kHz)로 오버클록했을 때도 작동했지만 코덱이 심하게 발열했습니다. 보드는 3.3V에서 150~270mA를 소비합니다. 한계도 있습니다. 내장 필터는 약 4Hz 차단 주파수의 1차 고역통과 필터처럼 동작하고, 입력 HDA 대역폭으로는 24/192 스테레오 세 채널을 동시에 처리할 수 없습니다.
저자는 또한 DMA, USB, XIP 샘플링이 동시에 동작할 때 생기는 RP2040의 동기화 오류를 발견했고, 그 원인은 Raspberry Pi 측 전문가들이 밝혀냈습니다. 복잡한 처리에는 DSP 명령을 갖춘 RP2350을 추천합니다. 결과와 약점을 모두 솔직하게 보여 주는 점이 마음에 듭니다.
출처: Хабр
프로젝트의 기반은 PIO 블록이 있는 RP2040과 보드에 올라간 Realtek ALC889 코덱입니다. 이 보드는 앞서 STM32F103과 Spartan-3로 시도하다 실패한 뒤 남은 것입니다. BCLK는 안정적인 24MHz여야 하므로 소프트웨어로 만들 수 없습니다. 인터페이스는 BCLK, SYNC, SDO, SDI 네 개의 선을 쓰고, 한 프레임은 1000비트로 48kHz를 만듭니다. 96kHz와 192kHz에서는 프레임당 샘플 수가 늘어납니다.
구현은 PIO 상태 기계 네 개로 이루어집니다. SDO 출력, SYNC 출력, BCLK 생성을 포함한 SDI 입력, 코덱에 주소를 부여하는 상태 기계입니다. 데이터는 DMA로 오가고, RP2040의 두 번째 코어가 샘플과 명령을 묶고 코덱의 응답을 해석합니다. 데모 프로젝트는 다섯 개의 스테레오 DAC에서 사인파를 생성하며, 3차 고조파는 약 −123dB입니다.
코덱은 192kHz 샘플링으로 동작했습니다. RP2040을 32MHz(256kHz)로 오버클록했을 때도 작동했지만 코덱이 심하게 발열했습니다. 보드는 3.3V에서 150~270mA를 소비합니다. 한계도 있습니다. 내장 필터는 약 4Hz 차단 주파수의 1차 고역통과 필터처럼 동작하고, 입력 HDA 대역폭으로는 24/192 스테레오 세 채널을 동시에 처리할 수 없습니다.
저자는 또한 DMA, USB, XIP 샘플링이 동시에 동작할 때 생기는 RP2040의 동기화 오류를 발견했고, 그 원인은 Raspberry Pi 측 전문가들이 밝혀냈습니다. 복잡한 처리에는 DSP 명령을 갖춘 RP2350을 추천합니다. 결과와 약점을 모두 솔직하게 보여 주는 점이 마음에 듭니다.
출처: Хабр
댓글 0
첫 댓글을 남겨 보세요. 어느 나라 말이든 괜찮아요.
로그인하고 댓글 남기기