RK平台声卡基础知识总结(基于ALSA框架)

科创闲谈 2026-02-07 趣味人生 54344

一、核心概述

RK平台声卡基于ALSAAdvanced Linux Sound Architecture)框架构建,核心目标是实现音频数据的采集-传输-处理-输出全链路管理。其本质是通过多个功能模块的协作,将SoC内部的数字音频信号与外部音频设备(麦克风、耳机、HDMI等)连接,同时解决数据同步、格式兼容、硬件适配等问题。

根据《Rockchip Audio开发指南》,RK平台声卡的核心特点是模块化设计高灵活性,支持I2S/SAI/PDM等多种数字音频接口、内部/外部CODEC组合,以及多声道、异步采样率转换(ASRC)、数字回采(DLP)等高级功能,可适配智能家居SoundBarOTT盒子等多种场景。

二、声卡核心构成组件

RK平台声卡由5大核心组件构成,各组件职责明确且协同工作,具体定义与功能如下:

组件

英文全称

核心作用

RK平台特有细节

DAI

Digital Audio Interface

数字音频接口,连接SoCCODEC,负责传输数字音频信号(时序控制、格式解析)

支持SAI(灵活协议)、I2S/I2S-TDM(多声道)、PDM(数字麦)、SPDIF(数字输出)等类型

MACHINE

声卡整合层

关联DAICODEC,配置音频拓扑(如协议格式、时钟主从),生成最终声卡设备

支持Simple Card(通用场景)、Multi Codecs Machine Driver(多CODEC场景)

DMAENGINE

DMA控制器

实现内存(DDR/SRAM)与DAI FIFO之间的高速数据传输,避免CPU占用

支持PL3308通道限制)、RKDMA(无通道限制),可动态申请释放通道(CONFIG_SND_SOC_DYNAMIC_DMA_CHAN

CODEC

Coder-Decoder

实现数字信号模拟信号转换,含增益控制、滤波、静音等功能

分内部CODEC(如RK812/RK817,集成于PMIC)、外部CODEC(如ES8388TAS5731)、Combo CODEC(如HDMI +模拟输出)

PCM

Pulse Code Modulation

ALSA框架的核心接口,向上提供应用层访问接口(如aplay/arecord),向下适配硬件

支持多种采样率(8k~384k)、位宽(16bit~32bit)、声道数(2CH~256CH

三、声卡数据传输流程(附流程图)

RK平台声卡的数据流分为播放(输出)录音(输入)两大方向,所有数据均通过DMAENGINE实现无CPU干预的传输,确保低延迟和高稳定性。

1.播放流程(数字模拟/数字输出)

wKgZPGkaixSABarZAAA2MYjCJjs194.png

2.录音流程(模拟/数字输入数字)

关键说明

时序同步DAI负责与CODEC协商时钟(MCLK/BCLK/LRCK)和协议格式(如I2STDM),确保数据传输无错位;

CPU干预DMAENGINE直接管理内存与DAI FIFO的数据搬运,仅在缓冲区满/空时触发中断通知CPU

格式适配:若输入输出采样率不一致(如UAC场景),可通过ASRC(异步采样率转换器)进行实时转换,避免失真。

四、RK平台声卡核心子模块详解

1. DAI(数字音频接口):声卡的传输中枢

DAISoCCODEC桥梁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(压缩)格式,数字透传

2CHLPCM/7.1CH(压缩)

家庭影院(HDMI /光纤输出)

2. CODEC(编解码器):数模转换核心

CODEC是实现数字信号模拟信号转换的关键,RK平台分为两类:

内部CODEC:集成于SoCPMIC,成本低、适配简单,如:

RK812/RK817PMIC集成CODEC,支持立体声DAC/ADC,可直驱外部PA

DCODECSoC内置数字CODEC,支持DSMDelta Sigma Modulation)模式,节省外部PA成本。

外部CODEC:独立芯片,音质优、功能丰富,需通过I2C/SPI控制,如:

ES8388:立体声CODEC,支持高信噪比(SNR≥95dB);

TAS5731D类功放CODEC,适合大音量场景(如SoundBar)。

3. MACHINE(声卡整合层):配置管家

MACHINE的核心是解析DTS配置绑定” DAICODEC,避免开发人员重复编写驱动。RK平台支持两种主流MACHINE驱动:

Simple Card:适用于“1DAI+1CODEC”的通用场景,通过DTS配置协议格式(如simple-audio-card,format = "i2s")、时钟主从(simple-audio-card,bitclock-master)等参数,无需编写额外代码;

Multi Codecs Machine Driver:适用于“1DAI/Combo DAI +多个CODEC”的复杂场景(如HDMI +模拟输出、DAI+VAD),需通过DTS配置rockchip,codec列表和音频路由(rockchip,audio-routing)。

五、RK平台声卡开发关键点

1.驱动开发重点

多数场景下,基于RK SDK开发只需移植/编写CODEC驱动(如I2C接口的ES8388驱动);

仅在多CODEC、特殊时序(如自定义TDM)场景下,需编写MACHINE驱动

DAI驱动已由RK提供(如rockchip_i2s.crockchip_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_CARDCONFIG_SND_SOC_ROCKCHIP_I2S);

b.DTS中使能DAI节点(如I2S/SAI),配置引脚、时钟;

c.DTS中添加CODEC节点(如I2C总线下的ES8388);

d.添加MACHINE节点(如Simple Card),关联DAICODEC

e.编译内核,通过cat /proc/asound/cards验证声卡注册成功。

六、声卡构成脑图

wKgZPGkaixSAKkj_AAGzrglaHZI956.png

七、关键总结

1.模块化设计RK声卡的DAIMACHINECODEC等组件解耦,开发时可聚焦“CODEC移植“MACHINE配置,降低复杂度;

2.灵活性适配:通过SAI的灵活协议、Combo DAI的多接口组合、ASRC的异步同步,可覆盖从简单耳机到复杂多声道系统的场景;

3.开发简化RK SDK已提供完善的DAI驱动和MACHINE模板,多数场景下仅需修改DTSCODEC驱动,无需从零开发。

如需进一步调试(如播放无声、录音失真),可使用示波器(测时钟/数据)、aplay/arecord(定位用户态/内核态问题)、amixer(控制CODEC通路)等工具。