基于 RP2040 的多声道 HDA 编解码器
HDA Link,也就是 Azalia 接口,通常只出现在 PC 芯片组中。一位 Habr 作者想验证树莓派 Pico 上的 RP2040 微控制器能否充当它的主机。目标很明确:多声道 HDA 音频编解码器的声道数远多于 I²S。
项目以带有 PIO 模块的 RP2040 为核心,板上是 Realtek ALC889 编解码器。这块板子是之前用 STM32F103 和 Spartan-3 的尝试失败后留下的。BCLK 必须是稳定的 24 MHz,无法用软件生成。接口使用 BCLK、SYNC、SDO、SDI 四根线,一帧 1000 位即可得到 48 kHz;96 kHz 和 192 kHz 时,每帧的采样数会增加。
实现使用了四个 PIO 状态机:SDO 输出、SYNC 输出、包含 BCLK 生成的 SDI 输入,以及为编解码器分配地址的状态机。数据通过 DMA 传输,RP2040 的第二个核心负责打包采样和命令,并解析编解码器的回应。演示项目在五个立体声 DAC 上生成正弦波,三次谐波约为 −123 dB。
编解码器在 192 kHz 采样率下正常工作。将 RP2040 超频到 32 MHz(256 kHz)也能运行,但编解码器发热明显。板子在 3.3 V 下功耗为 150 至 270 mA。也存在限制:内置滤波器相当于截止频率约 4 Hz 的一阶高通,而且 HDA 输入带宽无法同时支持三路 24/192 立体声。
作者还发现,DMA、USB 和 XIP 采样同时工作时 RP2040 存在同步问题,其原因由 Raspberry Pi 的专家查明。对于复杂处理,他推荐带有 DSP 指令的 RP2350。这篇文章既展示了结果,也坦诚地指出了弱点,我很喜欢这一点。
来源:Habr
项目以带有 PIO 模块的 RP2040 为核心,板上是 Realtek ALC889 编解码器。这块板子是之前用 STM32F103 和 Spartan-3 的尝试失败后留下的。BCLK 必须是稳定的 24 MHz,无法用软件生成。接口使用 BCLK、SYNC、SDO、SDI 四根线,一帧 1000 位即可得到 48 kHz;96 kHz 和 192 kHz 时,每帧的采样数会增加。
实现使用了四个 PIO 状态机:SDO 输出、SYNC 输出、包含 BCLK 生成的 SDI 输入,以及为编解码器分配地址的状态机。数据通过 DMA 传输,RP2040 的第二个核心负责打包采样和命令,并解析编解码器的回应。演示项目在五个立体声 DAC 上生成正弦波,三次谐波约为 −123 dB。
编解码器在 192 kHz 采样率下正常工作。将 RP2040 超频到 32 MHz(256 kHz)也能运行,但编解码器发热明显。板子在 3.3 V 下功耗为 150 至 270 mA。也存在限制:内置滤波器相当于截止频率约 4 Hz 的一阶高通,而且 HDA 输入带宽无法同时支持三路 24/192 立体声。
作者还发现,DMA、USB 和 XIP 采样同时工作时 RP2040 存在同步问题,其原因由 Raspberry Pi 的专家查明。对于复杂处理,他推荐带有 DSP 指令的 RP2350。这篇文章既展示了结果,也坦诚地指出了弱点,我很喜欢这一点。
来源:Habr
评论 0
来写第一条评论吧,用任何语言都行。
登录后评论