3. I2S协议详解
I2S(Inter-IC Sound)是飞利浦公司为数字音频设备之间的 PCM 数据传输制定的专用串行总线标准。它把音频数据与时钟彻底分离,用独立的位时钟和帧时钟来界定每一位和每一帧,从而避免抖动在数据流中累积。理解 I2S 的关键,不是记住“三根线”,而是理解“谁产生时钟、时钟在哪个边沿采样、数据相对帧边界偏移多少”这三件事。这三件事分别对应主从模式、时钟极性和数据对齐方式,也是硬件设计中最容易出错的地方。
一、I2S 信号线定义
标准 I2S 总线由三根核心信号线构成,部分实现还会增加一根主时钟线:
- SCK / BCLK(Serial Clock / Bit Clock):位时钟,每个脉冲对应一位数据。频率 = 采样率 × 声道数 × 每声道位数。例如 48 kHz、双声道、32 bit 时,BCLK = 48 000 × 2 × 32 = 3.072 MHz。
- WS / LRCLK(Word Select / Left-Right Clock):帧时钟或声道选择信号,频率等于采样率。WS 为低电平表示当前传输左声道,高电平表示右声道(标准约定)。
- SD / SDATA(Serial Data):串行音频数据,通常由发送端在 BCLK 的某个边沿输出,接收端在另一个边沿采样。
- MCLK(Master Clock):主时钟,通常是采样率的 256 倍或 384 倍,供编解码器内部过采样和数字滤波使用。它不属于 I2S 标准三线,但在实际硬件中几乎必不可少。
二、主从模式:谁产生时钟
I2S 设备分为主机(Master)和从机(Slave)。主机负责产生 BCLK 和 WS,从机接收这两个时钟并据此收发数据。主从关系决定了时钟的走线方向和抖动来源:
- MCU/SoC 为主,Codec 为从:最常见。SoC 内部 PLL 产生精确音频时钟,Codec 只需跟随。此时 BCLK、WS 从 SoC 流向 Codec。
- Codec 为主,SoC 为从:Codec 作为时钟源,SoC 的 I2S 接口配置为从模式。常见于 Codec 需要主导采样率或 SoC 时钟资源紧张的场景。
- 双主或时钟共享:多设备共用同一组 BCLK/WS,必须明确只有一个主机,否则总线冲突。
主从配置错误是“无声”或“噪声”故障的首要原因。若 SoC 配为主、Codec 也配为主,两条时钟线会互相驱动,轻则波形畸变,重则损坏 IO。调试时应先用示波器确认 BCLK 和 WS 是否由预期的一方产生。
三、时钟极性与数据对齐方式
时钟极性描述数据在 BCLK 的哪个边沿有效。标准 I2S 规定:发送端在 BCLK 下降沿改变数据,接收端在 BCLK 上升沿采样。这样数据在采样边沿前后各保持半个周期,建立时间和保持时间最充裕。
数据对齐方式则描述数据相对 WS 边界的偏移,常见有三种:
| 对齐方式 | 数据起始位置 | 特点 |
|---|---|---|
| 标准 I2S(Philips) | WS 变化后第二个 BCLK 边沿 | MSB 延迟一位,与 WS 边沿错开 |
| 左对齐(Left Justified) | WS 变化后第一个 BCLK 边沿 | MSB 紧贴 WS 边沿,无延迟 |
| 右对齐(Right Justified) | 数据 LSB 对齐到 WS 结束前 | 低位对齐,高位补零,常见于 DSP |
三者最直观的区别是 MSB 出现的位置。标准 I2S 的 MSB 比 WS 边沿晚一个 BCLK;左对齐的 MSB 与 WS 边沿几乎同时;右对齐则把数据推到帧尾。若主从双方对齐方式不一致,会出现“数据整体移位一位”的现象,听感上表现为音量减半或严重失真。
四、标准时序与常见变体
下面是一段典型的标准 I2S 时序描述,可用于对照示波器或逻辑分析仪抓取的波形:
WS : 低(左) ──────────────┐ 高(右) ──────────────┐ 低(左)
BCLK : _|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_
SD : [MSB][ ][ ][ ][ ][ ][LSB][MSB][ ][ ][ ][LSB]
↑ 标准 I2S:MSB 在 WS 变化后的第 2 个 BCLK 上升沿有效
常见变体包括:
- 左对齐变体:MSB 在 WS 变化后的第 1 个 BCLK 有效,常用于 TI 部分 DSP 与 Codec 互联。
- 右对齐变体:数据低位对齐帧尾,高位补零,适合固定字长传输。
- TDM 模式:WS 变为帧同步脉冲,一帧内分多个时隙,可传 4/8/16 通道,是 I2S 的多通道扩展。
- DSP/PCM 模式:WS 变为短脉冲,数据在脉冲后固定延迟开始,常见于电话语音 Codec。
五、案例与排障复盘
某产品使用 SoC 主模式、Codec 从模式,采样率 48 kHz、32 bit、双声道。上电后左声道正常,右声道噪声。用逻辑分析仪抓取发现:WS 高电平期间数据只有 16 位有效,后 16 位为随机值。原因是 Codec 被配置为 16 bit 数据宽度,而 SoC 发送 32 bit,双方字长不匹配。将 Codec 改为 32 bit 后恢复正常。
另一个常见案例是“整体音量偏小且失真”。抓波形发现 MSB 比 WS 边沿晚了一个 BCLK,但 Codec 配置为左对齐,导致数据整体右移一位,相当于数值除以 2。把 Codec 改为标准 I2S 对齐后解决。
硬件设计上还需注意:BCLK 和 WS 应尽量等长走线,远离高频开关节点;MCLK 若由 SoC 提供,应确认其频率是采样率的整数倍且抖动足够低;多设备共享总线时,未选中的从机 SD 应置为高阻,避免总线争用。把这些约束落实到原理图和 PCB 阶段,才能让 I2S 链路在量产中稳定工作。