RK平台声卡基础知识总结(基于ALSA框架) 电子说
RK 平台声卡基于ALSA(Advanced Linux Sound Architecture)框架构建,核心目标是实现音频数据的“采集 - 传输 - 处理 - 输出” 全链路管理。其本质是通过多个功能模块的协作,将 SoC 内部的数字音频信号与外部音频设备(麦克风、耳机、HDMI 等)连接,同时解决数据同步、格式兼容、硬件适配等问题。
根据《Rockchip Audio 开发指南》,RK 平台声卡的核心特点是模块化设计和高灵活性,支持 I2S/SAI/PDM 等多种数字音频接口、内部 / 外部 CODEC 组合,以及多声道、异步采样率转换(ASRC)、数字回采(DLP)等高级功能,可适配智能家居、SoundBar、OTT 盒子等多种场景。
RK 平台声卡由 5 大核心组件构成,各组件职责明确且协同工作,具体定义与功能如下:
|
组件
|
英文全称
|
核心作用
|
RK 平台特有细节
|
|
DAI
|
Digital Audio Interface
|
数字音频接口,连接 SoC 与 CODEC,负责传输数字音频信号(时序控制、格式解析)
|
支持 SAI(灵活协议)、I2S/I2S-TDM(多声道)、PDM(数字麦)、SPDIF(数字输出)等类型
|
|
MACHINE
|
声卡整合层
|
关联 DAI 与 CODEC,配置音频拓扑(如协议格式、时钟主从),生成最终声卡设备
|
支持 Simple Card(通用场景)、Multi Codecs Machine Driver(多 CODEC 场景)
|
|
DMAENGINE
|
DMA 控制器
|
实现内存(DDR/SRAM)与 DAI FIFO 之间的高速数据传输,避免 CPU 占用
|
支持 PL330(8 通道限制)、RKDMA(无通道限制),可动态申请释放通道(CONFIG_SND_SOC_DYNAMIC_DMA_CHAN)
|
|
CODEC
|
Coder-Decoder
|
实现“数字信号模拟信号” 转换,含增益控制、滤波、静音等功能
|
分内部 CODEC(如 RK812/RK817,集成于 PMIC)、外部 CODEC(如 ES8388、TAS5731)、Combo CODEC(如 HDMI + 模拟输出)
|
|
PCM
|
Pulse Code Modulation
|
ALSA 框架的核心接口,向上提供应用层访问接口(如 aplay/arecord),向下适配硬件
|
支持多种采样率(8k~384k)、位宽(16bit~32bit)、声道数(2CH~256CH)
|
RK 平台声卡的数据流分为播放(输出) 和录音(输入) 两大方向,所有数据均通过 DMAENGINE 实现无 CPU 干预的传输,确保低延迟和高稳定性。


•时序同步:DAI 负责与 CODEC 协商时钟(MCLK/BCLK/LRCK)和协议格式(如 I2S、TDM),确保数据传输无错位;
•无 CPU 干预:DMAENGINE 直接管理内存与 DAI FIFO 的数据搬运,仅在缓冲区满 / 空时触发中断通知 CPU;
•格式适配:若输入输出采样率不一致(如 UAC 场景),可通过 ASRC(异步采样率转换器)进行实时转换,避免失真。
DAI 是 SoC 与 CODEC 的 “桥梁”,RK 平台支持多种 DAI 类型,适配不同场景需求:
|
DAI 类型
|
核心特点
|
支持声道数
|
典型应用场景
|
|
SAI
|
协议灵活(可构造 I2S/DSP/TDM 时序)、支持多 Lane 合并、FIFO 交织配置
|
8CH IN/OUT
|
SoundBar(多声道输出)、Mic Array
|
|
I2S
|
支持标准 I2S/PCM 协议,时钟补偿(ACC)
|
8CH IN/OUT
|
普通音频设备(耳机、单麦克风)
|
|
I2S-TDM
|
基于 I2S 扩展,支持 TDM 协议,可异步 / 同步模式
|
16CH IN/OUT
|
多麦克风阵列、多声道录音
|
|
PDM
|
仅 Master 模式,支持数字麦克风阵列,含高通滤波(HPF)
|
8CH IN / 2CH OUT
|
智能家居(远场语音唤醒)
|
|
SPDIF
|
支持 LPCM(无损)、DD/DTS(压缩)格式,数字透传
|
2CH(LPCM)/7.1CH(压缩)
|
家庭影院(HDMI / 光纤输出)
|
CODEC 是实现 “数字信号模拟信号” 转换的关键,RK 平台分为两类:
•内部 CODEC:集成于 SoC 或 PMIC,成本低、适配简单,如:
◦RK812/RK817:PMIC 集成 CODEC,支持立体声 DAC/ADC,可直驱外部 PA;
◦DCODEC:SoC 内置数字 CODEC,支持 DSM(Delta Sigma Modulation)模式,节省外部 PA 成本。
•外部 CODEC:独立芯片,音质优、功能丰富,需通过 I2C/SPI 控制,如:
◦ES8388:立体声 CODEC,支持高信噪比(SNR≥95dB);
◦TAS5731:D 类功放 CODEC,适合大音量场景(如 SoundBar)。
MACHINE 的核心是解析 DTS 配置并“绑定” DAI 与 CODEC,避免开发人员重复编写驱动。RK 平台支持两种主流 MACHINE 驱动:
•Simple Card:适用于“1 个 DAI+1 个 CODEC” 的通用场景,通过 DTS 配置协议格式(如simple-audio-card,format = "i2s")、时钟主从(simple-audio-card,bitclock-master)等参数,无需编写额外代码;
•Multi Codecs Machine Driver:适用于“1 个 DAI/Combo DAI + 多个 CODEC” 的复杂场景(如 HDMI + 模拟输出、DAI+VAD),需通过 DTS 配置rockchip,codec列表和音频路由(rockchip,audio-routing)。
1.驱动开发重点:
◦多数场景下,基于 RK SDK 开发只需移植 / 编写 CODEC 驱动(如 I2C 接口的 ES8388 驱动);
◦仅在多 CODEC、特殊时序(如自定义 TDM)场景下,需编写MACHINE 驱动;
◦DAI 驱动已由 RK 提供(如rockchip_i2s.c、rockchip_sai.c),无需修改,仅需通过 DTS 配置属性(如时钟、协议)。
1.核心代码路径(内核源码):
kernel/sound/soc/rockchip/ # RK平台核心音频驱动├─ rockchip_asrc.c # ASRC驱动├─ rockchip_i2s.c # I2S驱动├─ rockchip_i2s_tdm.c # I2S-TDM驱动├─ rockchip_pdm.c # PDM驱动├─ rockchip_sai.c # SAI驱动└─ rockchip_multicodecs.c # Multi Codecs Machine驱动kernel/sound/soc/codecs/ # CODEC驱动├─ rk817_codec.c # 内部CODEC(RK817)├─ es8388.c # 外部CODEC(ES8388)└─ hdmi-codec.c # HDMI CODEC
1.声卡添加步骤:
a.使能内核配置(如CONFIG_SND_SIMPLE_CARD、CONFIG_SND_SOC_ROCKCHIP_I2S);
b.在 DTS 中使能 DAI 节点(如 I2S/SAI),配置引脚、时钟;
c.在 DTS 中添加 CODEC 节点(如 I2C 总线下的 ES8388);
d.添加 MACHINE 节点(如 Simple Card),关联 DAI 与 CODEC;
e.编译内核,通过cat /proc/asound/cards验证声卡注册成功。

1.模块化设计:RK 声卡的 DAI、MACHINE、CODEC 等组件解耦,开发时可聚焦 “CODEC 移植” 和 “MACHINE 配置”,降低复杂度;
2.灵活性适配:通过 SAI 的灵活协议、Combo DAI 的多接口组合、ASRC 的异步同步,可覆盖从简单耳机到复杂多声道系统的场景;
3.开发简化:RK SDK 已提供完善的 DAI 驱动和 MACHINE 模板,多数场景下仅需修改 DTS 和 CODEC 驱动,无需从零开发。
如需进一步调试(如播放无声、录音失真),可使用示波器(测时钟 / 数据)、aplay/arecord(定位用户态 / 内核态问题)、amixer(控制 CODEC 通路)等工具。
全部0条评论
快来发表一下你的评论吧 !