1. 音频系统概述:嵌入式音频系统组成、Codec芯片作用、I2S/PCM/DMIC总线介绍
1.1 嵌入式音频系统的整体组成
嵌入式音频系统是一个典型的数字-模拟混合信号处理系统,其核心任务是将数字音频数据(如MP3、AAC、PCM流)转换为模拟声音信号驱动扬声器/耳机,或者将麦克风采集的模拟信号转换为数字数据供SoC处理。一个完整的嵌入式音频硬件链路通常包含以下四个层次:
| 层次 | 典型器件 | 功能说明 |
|---|---|---|
| 音频源/宿 | 麦克风、扬声器、耳机、LINE IN/OUT | 声电/电声换能器,完成声音与电信号之间的转换 |
| Codec芯片 | WM8960、ES8316、TLV320AIC3x | ADC/DAC、混音、增益控制、滤波、功率放大 |
| 数字音频总线 | I2S、PCM、TDM、DMIC | 在SoC与Codec之间传输数字音频数据流 |
| SoC音频控制器 | I2S控制器、SAI、McASP | 生成位时钟/帧时钟,收发PCM数据,DMA搬运 |
1.2 Codec芯片的核心作用
Codec(Coder-Decoder)是音频系统的中枢器件,它承担着数字域与模拟域之间的双向转换任务。在嵌入式Linux系统中,Codec芯片通常通过I2C或SPI总线接收SoC的控制命令,通过I2S/PCM总线传输音频数据。其核心功能模块包括:
- ADC(模数转换器):将麦克风或LINE IN输入的模拟信号转换为数字PCM数据。
- DAC(数模转换器):将SoC送来的数字PCM数据转换为模拟信号驱动耳机或扬声器。
- 混音器(Mixer):支持多路输入信号的混合、切换与衰减。
- 增益控制(Volume/Gain):可编程的模拟/数字音量调节,通常以dB步进。
- 滤波器(Filter):数字滤波、去加重、噪声门等信号处理功能。
- 功率放大器(PA):部分Codec内置D类或AB类功放,可直接驱动扬声器。
1.3 数字音频总线:I2S、PCM、DMIC
数字音频总线是SoC与Codec之间传输音频数据的物理通道。不同的总线协议在引脚数量、时钟方案、数据格式上有所差异。下表对比了三种最常见的嵌入式音频总线:
| 特性 | I2S(Inter-IC Sound) | PCM(Pulse Code Modulation) | DMIC(Digital Microphone) |
|---|---|---|---|
| 引脚数 | 3(BCLK、LRCLK、DIN/DOUT) | 3(BCLK、SYNC、DATA) | 2(CLK、DATA) |
| 帧同步方式 | 左右声道独立帧,LRCLK高/低电平指示 | SYNC脉冲指示帧起始,支持多时隙TDM | 由CLK上升沿触发数据输出 |
| 数据格式 | MSB对齐,左对齐或右对齐 | 时隙固定,支持8/16/20/24/32位 | 1位PDM流,需SoC端抽取滤波 |
| 典型应用 | 立体声Codec、Hi-Fi音频 | 多通道音频、语音编解码器 | 数字硅麦阵列、降噪麦克风 |
| ALSA驱动接口 | SND_SOC_DAIFMT_I2S |
SND_SOC_DAIFMT_DSP_A/B |
通常通过I2S控制器PDM模式 |
1.3.1 I2S总线详解
I2S是嵌入式音频领域最主流的数字音频总线,由Philips公司(现NXP)制定。其三条信号线定义如下:
- BCLK(位时钟):每个脉冲对应一个数据位,频率 = 采样率 × 位宽 × 通道数。
- LRCLK(帧时钟/字选择):频率等于采样率,高电平表示左声道,低电平表示右声道(或相反,可配置)。
- SD(串行数据):通常为I2S_DIN(Codec输出给SoC)和I2S_DOUT(SoC输出给Codec)。
I2S标准数据格式要求:数据在BCLK下降沿变化,在上升沿被采样;数据从MSB开始传输,且MSB在LRCLK切换后的第二个BCLK周期开始发送(比LRCLK延迟一个BCLK)。
1.3.2 PCM(DSP)总线
PCM总线(在ALSA中常称为DSP模式)与I2S类似,但帧同步方式不同:PCM使用短脉冲或长脉冲作为帧起始标志,而非电平持续。PCM总线支持TDM(时分复用)模式,可以在一条数据线上传输多达16个通道的音频数据,非常适合多麦克风阵列或多通道音频系统。
ALSA中通过SND_SOC_DAIFMT_DSP_A和SND_SOC_DAIFMT_DSP_B两种模式来配置PCM总线,区别在于数据相对于帧同步脉冲的起始位置偏移一个BCLK。
1.3.3 DMIC(数字麦克风)接口
数字麦克风(DMIC)内部集成了MEMS传感器和Σ-Δ调制器,直接输出1位PDM(脉冲密度调制)数据流。DMIC接口只有两条线:
- CLK:由SoC提供的时钟信号,频率通常为1~4 MHz。
- DATA:PDM数据输出,在CLK的上升沿或下降沿更新。
SoC端需要内置PDM抽取滤波器(Decimation Filter),将1位PDM流转换为标准的16/24位PCM数据。在ALSA驱动中,DMIC通常被抽象为一个独立的Codec组件,或者通过I2S控制器的PDM模式接入。
1.4 本章小结
嵌入式音频系统的硬件链路可以概括为:模拟信号 ↔ Codec(ADC/DAC) ↔ 数字总线(I2S/PCM) ↔ SoC(I2S控制器+DMA)。Codec芯片承担了模拟与数字域之间的桥梁作用,而数字音频总线则决定了音频数据的传输格式与时序。理解这三者的关系,是后续学习ALSA驱动框架的基础。在下一章中,我们将深入ALSA的软件架构,了解用户空间、内核空间与硬件之间的数据流。