硬件 DAC/功放上电即出声,无需驱动——那么软件侧究竟要做什么才能真的播放出声音?
署名:原作者:罗总(Rockchip),于 2026-08-25 发布于微信公众号 “罗总开发笔记”。原文链接:mp.weixin.qq.com/s/CqBo2NonYYGqC99ojL--4Q。系列:《如何编写你自己的 CODEC 驱动》第 2 篇(DAC 播放)。版权归原作者所有,经授权转载。
规范注解版 → 技术笔记 · 第 2 篇:DAC 播放(完整翻译 + 百斯通工程注解)。
许多 DAC 芯片(如 TI 的 PCM5102A)根本不需要控制接口:接上 I2S 数据线并上电,即可输出声音——它内置 PLL,甚至不需要 MCLK。本文讲解如何在 Rockchip Linux 上用 dummy-codec 驱动此类“零控制”DAC,搭建完整的播放链路:
- 方向:声明一个 playback DAI 流(
.playback),声卡会创建/dev/snd/pcmC0D0p。这与上一篇 PDM 采集文章(capture /pcmC0D0c)正好相反。 - 驱动:dummy-codec 的
.playback能力声明只是一个占位符——零行驱动代码。真实芯片驱动(如pcm5102a.c)必须严格按照 datasheet 声明其能力。 - DTS 三件套:Codec DAI(dummy-codec 占位)→ CPU DAI(使能
&i2s0+ 引脚复用)→ Machine(multicodecs-card组装声卡)。把 PDM 换成 I2S、把采集换成播放,原理相同。 - 验证:
cat /proc/asound/cards→ls /dev/snd/→aplay -D hw:0,0 ...;数据通路为 wav → 环形缓冲区 → DMA → I2S → DAC → 扬声器。
/* dummy-codec playback 能力声明 (kernel-6.1) */
struct snd_soc_dai_driver dummy_dai = {
.name = "dummy_codec",
.playback = {
.stream_name = "Dummy Playback",
.channels_min = 1, .channels_max = 384,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.formats = SNDRV_PCM_FMTBIT_S16_LE | ... ,
},
};
百斯通关联 · 我们的音频平台基于同一框架
本文的 dummy-codec + I2S 三件套 DTS,正是百斯通 RK2108D(M08D 模组)、RK2118(旗舰车载音频,含 40 GOPS Audio-NPU) 与 RK962(无线音频) 量产音频方案背后的框架。在此之上我们叠加:麦克风阵列波束成形、低功耗语音唤醒(RT-Thread)、HiFi DSP 前端处理,以及面向录音笔 / 智能音箱 / 车载音频的整板交付。
阅读完整技术笔记版本 → 原文(罗总 · 微信,中文) 版权 © 罗总(Rockchip)。经授权转载。