通讯协议-IIS(I²S)
I²S(Inter-IC Sound,也常写作 IIS)是用于数字音频设备之间传输 PCM 音频数据的同步串行接口。它常连接 MCU、DSP、Codec、ADC、DAC 和数字功放,只负责连续音频样本的传输,不负责设备寄存器配置。
I²S 用于传输音频样本,I²C 常用于配置音频芯片寄存器。两者名称相似,但信号、电气时序和用途完全不同。
信号线
| 信号 | 常见别名 | 作用 |
|---|---|---|
| SCK | BCLK、Bit Clock | 每个音频数据位对应的位时钟 |
| WS | LRCLK、Word Select | 标识当前传输的声道 |
| SD | SDOUT、SDIN、DATA | 串行音频数据 |
| MCLK | Master Clock、SYSCLK | 可选的高频主时钟,供 Codec 等器件内部使用 |
| GND | - | 公共参考地 |
I²S 可以有独立的发送与接收数据线,也可以只连接单向数据线。谁产生 BCLK、WS 和 MCLK,取决于系统中的时钟主设备配置。
标准 I²S 时序
标准 I²S 中,WS 改变后延迟一个 BCLK 周期,再发送新声道样本的最高有效位(MSB)。数据通常按 MSB first 传输。
WS 左声道 右声道
_________ _________
______| |____________| |____
BCLK _/-\_/-\_/-\_/-\_/-\_/-\_/-\_/-\_/-\_
DATA x MSB ... LSB MSB ... LSB
↑ WS 改变后延迟 1 bit
具体的 WS 高低电平对应左声道还是右声道,应结合控制器和器件手册核对。
常见数据格式
不同音频串行格式的主要差异在于数据相对 WS 边沿的位置:
| 格式 | 数据起始位置 | 特点 |
|---|---|---|
| 标准 I²S | WS 边沿后延迟 1 bit | 最常见的 I²S 格式 |
| Left Justified | 紧随 WS 边沿 | 数据 MSB 与 WS 边沿对齐 |
| Right Justified | 数据 LSB 与 WS 边沿对齐 | 需要双方明确字长 |
| DSP/PCM 模式 | WS 常表现为帧同步脉冲 | 适合多时隙或语音接口 |
| TDM | 一个帧内包含多个声道时隙 | 用较少数据线承载多声道 |
“支持 I²S”不代表双方默认格式一致。必须核对数据格式、声道极性、有效位数和时隙宽度。
时钟关系
设:
- 采样率为
Fs - 每个声道的时隙宽度为
SlotBits - 声道数为
Channels
位时钟通常满足:
BCLK = Fs × SlotBits × Channels
例如,48 kHz 双声道、每声道 32-bit 时隙:
BCLK = 48000 × 32 × 2 = 3.072 MHz
即使有效音频数据只有 16 或 24 bit,硬件仍可能使用 32-bit 时隙。因此计算 BCLK 时应使用时隙宽度,而不是仅使用有效位数。
MCLK 常为采样率的整数倍,例如 256 × Fs 或 512 × Fs,但实际支持的倍率必须以音频器件数据手册为准。
关键参数
| 参数 | 说明 |
|---|---|
| 采样率 | 每秒每声道的样本数量,如 44.1 kHz、48 kHz、96 kHz |
| 有效位深 | 每个样本的有效数据位数,如 16、24、32 bit |
| 时隙宽度 | 每声道在总线上占用的位数 |
| 声道数 | 单声道、双声道或 TDM 多声道 |
| 数据格式 | 标准 I²S、左对齐、右对齐、DSP/PCM、TDM |
| 时钟角色 | 哪个设备生成 BCLK、WS 和 MCLK |
| 数据极性与采样边沿 | 数据在哪个 BCLK 边沿改变和采样 |
| 数据补齐方式 | 有效位不足时如何补零或符号扩展 |
样本表示与字节序
音频样本通常使用有符号二进制补码。总线按位传输顺序和内存中的字节序是两个不同概念:
- 总线上通常先发送样本的 MSB。
- DMA 缓冲区中的字节顺序取决于 CPU、外设和驱动配置。
- 24-bit 样本可能存入 3 字节,也可能放入 32-bit 容器。
- 单声道数据可能只位于左时隙、右时隙,或复制到两个时隙。
出现严重失真、幅度异常或噪声时,应优先检查位宽、对齐方式和 DMA 缓冲区解释方式。
时钟主从设计
| 角色 | 职责 |
|---|---|
| 时钟主设备 | 产生 BCLK 和 WS,可能同时产生 MCLK |
| 时钟从设备 | 根据输入时钟发送或接收数据 |
一个链路中只能有一套有效的 BCLK/WS 时钟源。若两个设备都配置为主设备,会发生时钟冲突;若都配置为从设备,则总线没有时钟。
音频质量还受到时钟抖动和采样率误差影响。对高质量播放或录音,应结合 Codec 时钟树、PLL 和晶振要求进行设计。
常见问题与排查
| 现象 | 常见原因 | 排查方法 |
|---|---|---|
| 完全无声音 | 无 BCLK/WS、功放静音、数据方向错误 | 先检查时钟,再检查 SD 与器件使能 |
| 全是噪声 | 格式、位宽、采样边沿或字节序错误 | 用逻辑分析仪核对格式与样本 |
| 播放速度或音调错误 | 采样率或时钟树配置错误 | 测量 WS 频率并计算 BCLK |
| 左右声道交换 | WS 极性或声道映射不一致 | 核对左右声道定义 |
| 音量极小或削波 | 有效位对齐、符号扩展或增益配置错误 | 检查样本位位置与 Codec 增益 |
| 周期性爆音 | DMA 缓冲区欠载/溢出、时钟不同步 | 检查 DMA 中断、缓冲深度和时钟源 |
| 24-bit 数据失真 | 24/32-bit 容器和对齐方式不一致 | 核对有效位位于高位还是低位 |
调试步骤
- 确认音频芯片已通过 I²C/SPI 完成寄存器配置,并退出复位或静音。
- 测量 WS 频率,确认其等于预期采样率。
- 测量 BCLK,并用
BCLK / WS判断每帧总位数。 - 核对标准 I²S、左对齐、右对齐或 DSP/TDM 格式。
- 确认有效位深、时隙宽度、声道数和 WS 极性。
- 使用固定测试样本,例如静音、递增码或正弦波,观察 DATA。
- 检查 DMA 缓冲区的样本排列、字节序、欠载和溢出标志。
适用场景
I²S 适合 PCB 内数字音频器件间的连续 PCM 数据传输。它不提供寻址、确认、重试和长距离传输能力;设备控制通常另用 I²C 或 SPI,板外音频链路则需根据距离和系统要求选择 USB Audio、S/PDIF、网络音频等方案。