3. PCM接口标准:PCM编码原理、PCM与I2S的区别与联系、时分复用(TDM)模式
3.1 PCM编码原理
PCM(Pulse Code Modulation,脉冲编码调制)是将模拟音频信号转换为数字信号的基础编码方式。其核心流程包含三个步骤:采样、量化、编码。
- 采样(Sampling):以固定时间间隔(采样周期)对连续模拟信号进行离散取值。根据奈奎斯特采样定理,采样频率必须大于信号最高频率的两倍,才能无失真地重建原始信号。音频领域常见采样率:8kHz(语音)、44.1kHz(CD)、48kHz(专业音频)、96kHz/192kHz(高保真)。
- 量化(Quantization):将采样得到的连续幅度值映射到有限个离散电平上。量化位数(位深)决定动态范围:16bit 提供 96dB 动态范围,24bit 提供 144dB。量化过程会引入量化噪声,增加位深可降低噪声。
- 编码(Encoding):将量化后的每个采样值用固定位数的二进制码表示。常见的编码格式包括:二进制补码(Two's Complement,最常用)、偏移二进制码(Offset Binary)、符号-幅度码(Sign-Magnitude)。
关键指标速查: PCM 数据速率 = 采样频率 × 量化位数 × 声道数。例如:CD 音质(44.1kHz × 16bit × 2ch)= 1.4112 Mbps。
3.2 PCM与I2S的区别与联系
PCM 和 I2S 是嵌入式音频系统中两个容易混淆的概念。简单来说:PCM 是数据编码格式,I2S 是传输总线协议。两者在音频系统中协同工作,但职责不同。
| 对比维度 | PCM(脉冲编码调制) | I2S(集成电路内置音频总线) |
|---|---|---|
| 本质 | 模拟→数字的编码方式(数据格式) | 数字音频芯片间的串行总线协议 |
| 关注点 | 采样率、量化位数、编码方式 | 时钟极性、帧同步、数据对齐、时序 |
| 信号线 | 无固定物理接口定义 | BCLK、LRCLK(WS)、SD(数据线) |
| 声道支持 | 单声道/立体声/多声道(通过TDM) | 标准 I2S 仅支持立体声(2声道) |
| 数据对齐 | 无固定对齐要求 | MSB 对齐,左声道在 LRCLK 低电平传输 |
| 典型应用 | 音频文件存储(WAV)、编解码器内部处理 | SoC ↔ Codec、DSP ↔ DAC/ADC 互联 |
理解要点: 在嵌入式 Linux 音频系统中,音频数据在内存中以 PCM 格式存储(如 16bit 有符号整数),通过 I2S 总线传输到 Codec 芯片进行 DAC 转换。I2S 是 PCM 数据的“运输通道”,PCM 是“货物本身”。
3.3 时分复用(TDM)模式
TDM(Time Division Multiplexing,时分复用)是在一条数据线上传输多个声道音频数据的技术。标准 I2S 只能传输 2 个声道(左/右),而 TDM 模式通过在一个帧周期内划分多个时隙(Slot),支持 4、8、16 甚至更多声道。
TDM 帧结构
- 帧同步(Frame Sync):标识一个 TDM 帧的开始,通常对应采样周期。
- 时隙(Slot):每个声道占用一个固定长度的时隙,时隙宽度 = 量化位数(如 16bit、24bit、32bit)。
- BCLK 计数:一个 TDM 帧的 BCLK 周期数 = 时隙数 × 每时隙位数。例如:8声道 × 32bit = 256 BCLK/帧。
- 数据对齐:每个时隙内的数据通常采用 MSB 优先、左对齐或 I2S 对齐方式。
TDM 在嵌入式 Linux 中的配置要点
| 配置项 | 说明 | 典型值 |
|---|---|---|
| DAI 格式 | 设置 DAI 链路为 TDM 模式 | SND_SOC_DAIFMT_DSP_A 或 DSP_B |
| 时隙数量 | 定义 TDM 帧包含的时隙数 | 2、4、8、16 |
| 时隙宽度 | 每个时隙的 bit 数 | 16、24、32 |
| 时隙映射 | 将 PCM 音频声道映射到指定时隙 | Slot 0 → 左声道,Slot 1 → 右声道 |
| BCLK 频率 | BCLK = 采样率 × 时隙数 × 时隙宽度 | 48kHz × 8 × 32 = 12.288MHz |
常见陷阱: 在配置 TDM 时,务必确认 Codec 和 CPU DAI 控制器支持的时隙数量与对齐方式是否一致。部分 Codec 要求帧同步信号在第一个 BCLK 上升沿之前有效(DSP_A),而另一些要求帧同步与第一个 BCLK 上升沿对齐(DSP_B)。配置错误会导致声道错位或无声。
PCM、I2S、TDM 三者的关系总结
- PCM:音频数据的“表示形式”——采样、量化、编码后的数字音频数据本身。
- I2S:音频数据的“传输协议”——定义了 BCLK、LRCLK、SD 三根线的时序关系,标准模式仅支持 2 声道。
- TDM:音频数据的“多路复用扩展”——在 I2S 物理层基础上扩展时隙,支持多声道传输,是 I2S 的超集。
工程实践建议: 在嵌入式 Linux 设备树中,通过
dai-format 属性选择 I2S 或 TDM 模式;通过 tdm-slot-num 和 tdm-slot-width 配置 TDM 参数。使用 amixer 或 tinymix 工具可以动态查看和调整 Codec 的 TDM 路由映射。