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 の4本の線を使い、1フレーム1000ビットで 48kHz を実現します。96kHz と 192kHz では、フレーム内のサンプル数が増えます。
実装は4つの PIO ステートマシンで構成されています。SDO 出力、SYNC 出力、BCLK 生成を含む SDI 入力、そしてコーデックにアドレスを割り当てるステートマシンです。データは DMA で転送され、RP2040 の2つ目のコアがサンプルとコマンドをまとめ、コーデックからの応答を解析します。デモでは5つのステレオ DAC から正弦波を出力し、3次高調波は約 −123dB です。
コーデックは 192kHz のサンプリングで動作しました。RP2040 を 32MHz(256kHz)にオーバークロックすると動作はしましたが、コーデックの発熱が大きくなりました。基板の消費電力は 3.3V で 150〜270mA です。制約もあります。内蔵フィルターは約 4Hz をカットオフとする1次ハイパスフィルターのように働き、HDA 入力の帯域では 24/192 のステレオ3チャンネルを同時に扱えません。
著者はまた、DMA、USB、XIP からのサンプリングが同時に動くと RP2040 の同期に不具合が出ることを見つけ、その原因は Raspberry Pi 側の専門家が特定しました。複雑な処理には DSP 命令を持つ RP2350 を勧めています。結果と弱点の両方を正直に示している点が良いと思いました。
出典:Хабр
プロジェクトは、PIO ブロックを備えた RP2040 と、基板に載った Realtek ALC889 コーデックを軸にしています。この基板は以前の STM32F103 と Spartan-3 による試みが失敗した後に残ったものです。BCLK は安定した 24MHz が必要なので、ソフトウェアで生成することはできません。インターフェースは BCLK、SYNC、SDO、SDI の4本の線を使い、1フレーム1000ビットで 48kHz を実現します。96kHz と 192kHz では、フレーム内のサンプル数が増えます。
実装は4つの PIO ステートマシンで構成されています。SDO 出力、SYNC 出力、BCLK 生成を含む SDI 入力、そしてコーデックにアドレスを割り当てるステートマシンです。データは DMA で転送され、RP2040 の2つ目のコアがサンプルとコマンドをまとめ、コーデックからの応答を解析します。デモでは5つのステレオ DAC から正弦波を出力し、3次高調波は約 −123dB です。
コーデックは 192kHz のサンプリングで動作しました。RP2040 を 32MHz(256kHz)にオーバークロックすると動作はしましたが、コーデックの発熱が大きくなりました。基板の消費電力は 3.3V で 150〜270mA です。制約もあります。内蔵フィルターは約 4Hz をカットオフとする1次ハイパスフィルターのように働き、HDA 入力の帯域では 24/192 のステレオ3チャンネルを同時に扱えません。
著者はまた、DMA、USB、XIP からのサンプリングが同時に動くと RP2040 の同期に不具合が出ることを見つけ、その原因は Raspberry Pi 側の専門家が特定しました。複雑な処理には DSP 命令を持つ RP2350 を勧めています。結果と弱点の両方を正直に示している点が良いと思いました。
出典:Хабр
コメント 0
最初のコメントをどうぞ。どの言語でも大丈夫です。
ログインしてコメント