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干预的传输,确保低延迟和高稳定性。
1.播放流程(数字→模拟/数字输出)
2.录音流程(模拟/数字输入→数字)
关键说明
•时序同步:DAI负责与CODEC协商时钟(MCLK/BCLK/LRCK)和协议格式(如I2S、TDM),确保数据传输无错位;
•无CPU干预:DMAENGINE直接管理内存与DAI FIFO的数据搬运,仅在缓冲区满/空时触发中断通知CPU;
•格式适配:若输入输出采样率不一致(如UAC场景),可通过ASRC(异步采样率转换器)进行实时转换,避免失真。
四、RK平台声卡核心子模块详解
1. DAI(数字音频接口):声卡的“传输中枢”
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 /光纤输出)
|
2. CODEC(编解码器):“数模转换核心”
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)。
3. MACHINE(声卡整合层):“配置管家”
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)。
五、RK平台声卡开发关键点
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通路)等工具。
- RK平台声卡基础知识总结(基于ALSA框架)
- 赢在起跑线:其利天下暴力风扇驱动方案如何缩短产品上市周期?
- TMC260C-PA 为什么适配你的步进电机需求?
- 雷达车辆检测模组怎么选?
- 聚焦一致性:锂电池分选技术的革新者与推动者
- 使用LDO的VIOC特性降低输出噪声并提高热效率
- 告别单电压束缚, 让 Type-C 充电更智能、更节能
- 全志Android源码内核新增配置编译报错解决
- 变频器造成低压进线开关跳闸原因及解决方案
- 福禄克新款八位半标准数字多用表探秘
- 新农村智慧微电网管控平台:破解农村光储难题,赋能零碳乡村建设
- 超声波功率放大器驱动可以做什么实验
- 百亿营收、单季利润暴增十倍!存储行业惊现“印钞机”?
- 利用XStream Browser加快示波器程控设计
- 光纤光导照明技术助力半导体行业检测的精准度
- 京东价格API:促销价计算器,利润保障!