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

电子说

1.4w人已加入

描述

 

 

一、核心概述

 

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

 

 

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

 

 

二、声卡核心构成组件

 

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

 

 

组件

 

 

英文全称

 

 

核心作用

 

 

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通道限制)、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. 播放流程(数字模拟 数字输出)

 

Rockchip

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

 

Rockchip

关键说明

 

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

 

 

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

 

 

2CHLPCM/7.1CH(压缩)

 

 

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

 

 

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

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

TAS5731类功放 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.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),关联 DAI 与 CODEC

 

 

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

 

 

六、声卡构成脑图

 

Rockchip

七、关键总结

 

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

 

 

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

 

 

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

 

 

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

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分