1. I2S 协议基础:总线定义与时序关系
I2S(Inter-IC Sound,集成电路内置音频总线)是飞利浦公司在 1986 年制定的串行数字音频总线标准,专门用于数字音频设备之间的 PCM 音频数据传输。在嵌入式音频系统中,I2S 是连接 SoC、DSP、CODEC、蓝牙音频 SoC 等核心器件的标准接口。理解 I2S 的总线定义、信号线功能以及位时钟与帧时钟的时序关系,是调试音频驱动、解决时钟同步问题的第一步。
1.1 I2S 总线信号定义
标准 I2S 总线由三条主要信号线组成,所有数据和控制信号均以位时钟为基准同步传输。
| 信号线 | 全称 | 方向(典型) | 功能描述 |
|---|---|---|---|
| SCK / BCLK | Serial Clock / Bit Clock | 主机 → 从机 | 位时钟,每个脉冲对应一个数据位的传输。频率 = 采样率 × 声道数 × 位深。 |
| WS / LRCLK | Word Select / Left-Right Clock | 主机 → 从机 | 帧时钟(声道选择),高电平表示左声道数据,低电平表示右声道数据(I2S 标准)。频率 = 采样率。 |
| SD / DATA | Serial Data | 双向(分时复用) | 串行数据线,MSB 对齐,高位在前。发送端在 BCLK 下降沿更新数据,接收端在 BCLK 上升沿采样。 |
关键概念: 在 I2S 标准中,LRCLK 的跳变沿发生在数据位的 MSB 之前一个 BCLK 周期,这被称为“左对齐偏移 1 位”。这是 I2S 区别于左对齐(Left-Justified)协议的核心特征。
1.2 数据线、位时钟与帧时钟的时序关系
I2S 的时序以 BCLK 为最小时间单位,LRCLK 定义声道边界,SD 线在 BCLK 的驱动下逐位传输。下图展示了标准 I2S 模式下 16 位立体声数据的时序关系。
1.3 位时钟频率计算
BCLK 频率由音频采样率、声道数和位深共同决定,是驱动配置中最容易出错的参数之一。计算公式如下:
BCLK_Hz = SampleRate × NumberOfChannels × BitsPerSample
常见音频格式的 BCLK 频率对照表:
| 采样率 (Hz) | 声道数 | 位深 (bits) | BCLK 频率 (MHz) | 典型应用 |
|---|---|---|---|---|
| 44100 | 2 (立体声) | 16 | 1.4112 | CD 音质播放 |
| 48000 | 2 | 16 | 1.536 | 标准音频设备 |
| 48000 | 2 | 24 | 2.304 | 高保真录音/播放 |
| 96000 | 2 | 24 | 4.608 | 高采样率音频 |
| 192000 | 2 | 32 | 12.288 | 专业音频设备 |
调试陷阱: 许多 SoC 的 I2S 外设要求 BCLK 频率必须能被系统 PLL 精确分频得到。如果配置的 BCLK 频率与 PLL 输出无法整除,会导致 LRCLK 产生周期性抖动(jitter),表现为音频爆音或声道串扰。调试时务必使用示波器测量 BCLK 和 LRCLK 的相位关系。
1.4 I2S 数据格式与 MSB 对齐
I2S 标准规定数据以 MSB(最高有效位)对齐方式传输,且发送端在 LRCLK 跳变后的第 2 个 BCLK 上升沿开始发送 MSB。这种设计使得接收端可以容忍发送端和接收端之间的位深差异。
- MSB 对齐: 无论数据位宽是多少(16/24/32 位),MSB 始终固定在 LRCLK 跳变后的固定位置。
- 左对齐偏移 1 位: 发送端在 LRCLK 跳变后等待 1 个 BCLK 周期才开始发送 MSB,接收端在 LRCLK 跳变后的第 2 个 BCLK 上升沿锁存 MSB。
- 数据有效性: 发送端在 BCLK 下降沿更新 SD 线数据,接收端在 BCLK 上升沿采样,保证数据在时钟边沿之间稳定。
1.5 I2S 系统连接架构
在嵌入式系统中,I2S 总线通常连接一个主机(Master)和一个或多个从机(Slave)。主机负责产生 BCLK 和 LRCLK,从机同步接收或发送数据。下图展示了一个典型的 I2S 音频系统连接架构。
1.6 常见 I2S 变体与兼容性
在实际项目中,除了标准 I2S 外,还会遇到左对齐(Left-Justified)、右对齐(Right-Justified)、TDM(时分复用)等变体。下表总结了它们的核心差异:
| 协议变体 | MSB 位置 | LRCLK 与数据关系 | 典型应用 |
|---|---|---|---|
| 标准 I2S | LRCLK 跳变后第 2 个 BCLK | LRCLK 高=左声道,低=右声道 | 飞利浦标准,最广泛 |
| 左对齐 (LJ) | LRCLK 跳变后第 1 个 BCLK | 与 I2S 相同 | 部分 DSP、老式 CODEC |
| 右对齐 (RJ) | 数据右对齐,LSB 在 LRCLK 跳变前 | 与 I2S 相同 | 部分日本厂商 CODEC |
| TDM (DSP 模式) | 帧同步脉冲后连续传输 | 单 LRCLK 脉冲标记帧起始 | 多通道音频、阵列麦克风 |
驱动开发提示: 在初始化 I2S 外设时,务必确认 CODEC 数据手册中要求的协议模式(I2S / LJ / RJ / TDM)。配置错误会导致数据移位、声道反转或完全无声。调试时可以通过发送已知的 16 位正弦波数据,用逻辑分析仪抓取 SD 线数据,与预期波形对比来验证协议配置是否正确。
1.7 本章小结
- I2S 总线由 BCLK(位时钟)、LRCLK(帧时钟/声道选择)和 SD(串行数据)三条信号线组成。
- BCLK 频率 = 采样率 × 声道数 × 位深,是驱动配置的核心参数。
- 标准 I2S 采用 MSB 对齐 且 左偏移 1 位 的时序,这是区别于其他协议变体的关键特征。
- 主机负责产生时钟,从机同步工作;时钟抖动是音频爆音的主要来源之一。
- 实际项目中需根据 CODEC 数据手册选择正确的协议变体(I2S / LJ / RJ / TDM)。