3. PCM接口标准:PCM与I2S的异同,PCM的时隙(Slot)与通道映射机制
PCM(Pulse Code Modulation)接口是数字音频传输的另一种主流串行总线标准,与I2S同源但面向不同的应用场景。理解PCM与I2S的差异,以及PCM独有的时隙(Slot)与通道映射机制,是配置多通道音频系统(如智能音箱阵列、车载多路麦克风)的关键前提。
3.1 PCM与I2S的核心异同
PCM和I2S都使用位时钟(BCLK)、帧同步(FS/WS)和数据线(SD)三线制传输。但两者在帧同步信号的物理定义和数据排列方式上存在根本区别。
| 对比维度 | I2S标准 | PCM标准 |
|---|---|---|
| 帧同步信号 | 左右声道选择(WS),高电平=左声道,低电平=右声道 | 帧同步脉冲(FSYNC),一个短脉冲标记一帧开始 |
| 数据对齐 | 数据在WS跳变后延迟1个BCLK开始(MSB对齐) | 数据在FSYNC脉冲后立即开始(MSB对齐) |
| 声道数 | 固定2声道(左/右) | 可扩展,支持2/4/8/16等多声道 |
| 时隙结构 | 无显式时隙,左右声道各占半个帧 | 显式时隙(Slot),每个Slot对应一个声道 |
| 典型应用 | 立体声音频播放(DAC、耳机、音响) | 多通道音频采集(麦克风阵列、TDM总线) |
| 帧长度 | 固定64 BCLK(32位/声道) | 可变,取决于Slot数×Slot位宽 |
关键区别总结: I2S的WS信号是电平状态(高/低),PCM的FSYNC是脉冲边沿(上升沿/下降沿触发)。这一差异决定了PCM天然支持更多声道,而I2S更简洁高效。
3.2 PCM时隙(Slot)与通道映射机制
PCM接口将一帧音频数据划分为多个连续的时隙(Slot),每个Slot承载一个声道的采样数据。时隙的编号、位宽和排列顺序构成了通道映射的核心规则。
3.2.1 时隙结构定义
一个完整的PCM帧由N个Slot组成,每个Slot包含M位数据(通常为16/24/32位)。帧同步脉冲FSYNC的宽度通常为1个BCLK周期,标记帧的起始位置。
PCM帧结构(4 Slot × 32位示例):
FSYNC ┌─┐ ┌─┐ ┌─┐ ┌─┐
│ │ │ │ │ │ │ │
└─┘ └─┘ └─┘ └─┘
BCLK ┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐┌┴┐
│ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ ││ │
└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘
SD [Slot0: CH0][Slot1: CH1][Slot2: CH2][Slot3: CH3]
[ 32位 ][ 32位 ][ 32位 ][ 32位 ]
3.2.2 通道映射规则
通道映射由硬件设计或软件配置决定,常见映射方式包括:
- 顺序映射: Slot0 → CH0, Slot1 → CH1, Slot2 → CH2, ...(最常用)
- 交错映射: 左声道数据分散到多个Slot(用于特定DSP预处理)
- 跳过映射: 某些Slot保留为空(用于对齐或未来扩展)
实战提示: 在Linux ALSA驱动中,PCM通道映射通过
snd_pcm_hw_params_set_channels() 和 snd_pcm_hw_params_set_slot() 系列API配置。对于TDM(时分复用)模式,Slot数量必须与硬件Codec的通道数严格匹配。
3.3 PCM与I2S的波形对比(SVG)
下图从波形角度直观对比I2S和PCM在传输立体声数据时的信号差异:
3.4 PCM时隙配置实战要点
在实际嵌入式系统中,配置PCM时隙需要关注以下参数:
| 参数 | 说明 | 典型值 |
|---|---|---|
| Slot数量 | 每帧包含的时隙数,等于声道数 | 2/4/8/16 |
| Slot位宽 | 每个时隙的数据位数 | 16/24/32 |
| FSYNC宽度 | 帧同步脉冲的BCLK周期数 | 1(常用)或Slot位宽 |
| 数据对齐 | MSB对齐或LSB对齐 | MSB对齐(主流) |
| Slot顺序 | Slot0~SlotN的物理排列 | 顺序映射(推荐) |
常见配置陷阱:
- Slot位宽与Codec采样精度不匹配(如Codec输出24位,但配置为16位Slot,导致数据截断)
- FSYNC极性错误(上升沿触发 vs 下降沿触发)导致帧同步偏移
- Slot数量超过硬件FIFO深度,引发数据溢出
3.5 PCM多通道映射架构(SVG)
下图展示了一个4通道PCM麦克风阵列的时隙与通道映射架构,体现数据从物理Slot到应用层通道的完整链路:
3.6 选择PCM还是I2S?
在实际项目选型中,可参考以下决策原则:
- 立体声播放(2声道): 优先选择I2S,硬件简单,驱动支持广泛
- 多通道采集(≥4声道): 必须使用PCM/TDM,利用时隙扩展
- 兼容性要求: 部分Codec同时支持I2S和PCM模式,通过寄存器切换
- 布线约束: PCM的FSYNC脉冲信号对时序要求略低于I2S的WS电平,长距离传输更稳定
核心结论: PCM的时隙机制使其成为多通道音频系统的事实标准。理解Slot与通道的映射关系,是配置TDM总线、麦克风阵列和智能音频前端的基础。在Linux驱动中,PCM时隙配置通常通过
snd_soc_dai_set_tdm_slot() 函数完成,该函数同时设置Slot数量、位宽和映射偏移。