3. PCM接口标准:PCM编码原理、PCM与I2S的区别与联系、时分复用(TDM)模式

3.1 PCM编码原理

PCM(Pulse Code Modulation,脉冲编码调制)是将模拟音频信号转换为数字信号的基础编码方式。其核心流程包含三个步骤:采样、量化、编码。

  1. 采样(Sampling):以固定时间间隔(采样周期)对连续模拟信号进行离散取值。根据奈奎斯特采样定理,采样频率必须大于信号最高频率的两倍,才能无失真地重建原始信号。音频领域常见采样率:8kHz(语音)、44.1kHz(CD)、48kHz(专业音频)、96kHz/192kHz(高保真)。
  2. 量化(Quantization):将采样得到的连续幅度值映射到有限个离散电平上。量化位数(位深)决定动态范围:16bit 提供 96dB 动态范围,24bit 提供 144dB。量化过程会引入量化噪声,增加位深可降低噪声。
  3. 编码(Encoding):将量化后的每个采样值用固定位数的二进制码表示。常见的编码格式包括:二进制补码(Two's Complement,最常用)、偏移二进制码(Offset Binary)、符号-幅度码(Sign-Magnitude)。
关键指标速查: PCM 数据速率 = 采样频率 × 量化位数 × 声道数。例如:CD 音质(44.1kHz × 16bit × 2ch)= 1.4112 Mbps。
PCM编码流程示意图 PCM 编码流程:采样 → 量化 → 编码 模拟音频信号(连续) 采样 fs = 44.1kHz 量化 16bit / 24bit 编码 二进制补码 PCM 数字流 0101 0011 1100 ... PCM 数据速率公式: fs × 位深 × 声道数

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 帧结构时序图(4声道示例) TDM 帧结构(4声道 × 16bit 示例) FS 帧同步脉冲(一个采样周期) BCLK ▁▔▁▔▁▔▁▔ ▁▔▁▔▁▔▁▔ ▁▔▁▔▁▔▁▔ ▁▔▁▔▁▔▁▔ ▁▔▁▔▁▔▁▔ SD Slot 0 (CH0) Slot 1 (CH1) Slot 2 (CH2) Slot 3 (CH3) 16 BCLK TDM 帧周期 = 64 BCLK(4 × 16bit)

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 路由映射。