1. I2S协议基础

1.1 I2S总线定义

I2S(Inter-IC Sound,集成电路内置音频总线)是飞利浦公司(现恩智浦)于1986年制定的一种串行数字音频总线标准,专门用于连接数字音频设备(如编解码器、DSP、微控制器、数字功放等)之间的音频数据传输。I2S总线采用三线制同步串行接口,将时钟信号与数据信号分离,避免了时钟抖动对音频质量的影响。

I2S总线的核心设计理念是:时钟与数据分离,数据在时钟的边沿同步传输,左右声道数据在同一个数据线上分时传输,通过字选择信号区分声道。

I2S总线物理信号定义

信号名称 缩写 方向 功能描述
串行时钟 SCK / BCLK 主设备→从设备 位时钟,每个脉冲对应一位数据;频率 = 采样率 × 位宽 × 声道数
字选择 WS / LRCLK 主设备→从设备 帧时钟,高电平表示左声道,低电平表示右声道(或相反);频率 = 采样率
串行数据 SD / DATA 双向(半双工) 音频数据线,MSB优先传输,二进制补码格式
关键参数关系: BCLK = 采样率 × 位宽 × 2(声道数)。例如:44.1kHz采样率、16位数据、立体声 → BCLK = 44.1k × 16 × 2 = 1.4112 MHz。

1.2 飞利浦I2S标准时序

飞利浦I2S标准时序定义了数据与时钟、字选择信号之间的精确对齐关系。理解时序是驱动开发的基础,错误的时序配置会导致数据错位、声道反转或噪声。

时序核心规则

  • WS变化领先于数据MSB一个BCLK周期: WS在数据MSB传输之前的一个BCLK周期发生跳变,接收端利用此特性进行声道同步。
  • 数据在SCK下降沿锁存: 发送端在SCK上升沿更新数据,接收端在SCK下降沿采样数据(标准模式)。
  • MSB优先传输: 每个声道的数据从最高有效位(MSB)开始发送,LSB在最后。
  • 数据位宽可小于或等于声道槽位宽: 例如16位数据可以在32位槽位中传输,低位补0。
时序对齐要点: 飞利浦标准要求WS在第一个BCLK周期(MSB传输前)就完成跳变,这与左对齐(Left-Justified)模式不同——左对齐模式中WS与MSB同时开始。驱动开发时务必确认编解码器要求的对齐模式。
飞利浦I2S标准时序图 飞利浦I2S标准时序图(16位数据,32位槽位) BCLK T T WS 左声道 右声道 WS跳变点 DATA MSB bit14 ... LSB MSB bit14 ... LSB MSB在WS跳变后1T开始 接收端在下降沿采样

1.3 数据格式:16/24/32位

I2S协议支持多种数据位宽,常见的有16位、24位和32位。数据位宽决定了每个声道样本的精度,直接影响音频动态范围。驱动开发中需要正确配置MCU的I2S外设数据格式寄存器,使其与编解码器匹配。

数据位宽 动态范围(理论) 槽位宽(常见) 数据存储格式 典型应用
16位 96.3 dB 16位或32位 有符号16位补码,MSB对齐 CD音质、MP3播放、语音
24位 144.5 dB 32位(常用) 有符号24位补码,存储在32位容器的高24位 高保真音频、录音棚设备
32位 192.7 dB 32位 有符号32位补码,MSB对齐 专业音频、浮点DSP处理
位宽匹配陷阱: 当MCU发送16位数据而编解码器配置为24位槽位时,编解码器会读取槽位中的高24位数据。如果MCU将16位数据放在低16位,编解码器将读到全0或噪声。正确的做法是将16位数据左对齐到32位槽位的高16位,低16位补0。

数据格式存储示例(32位槽位)

// 16位数据左对齐到32位槽位(推荐)
uint32_t slot_32bit = (uint16_t)sample << 16;  // 高16位为有效数据,低16位补0

// 24位数据左对齐到32位槽位
uint32_t slot_32bit = (uint32_t)sample << 8;   // 高24位为有效数据,低8位补0

// 32位数据直接填充
uint32_t slot_32bit = sample;                    // 全32位有效

1.4 左右声道对齐方式

I2S协议中左右声道的区分由WS信号的电平决定。飞利浦标准规定:WS为高电平时传输左声道数据,WS为低电平时传输右声道数据(部分设备可能相反,需参考数据手册)。

除了飞利浦标准对齐方式,实际应用中还存在两种常见的变体:左对齐(Left-Justified)和右对齐(Right-Justified / I2S兼容)。驱动开发时必须明确编解码器使用的是哪种对齐模式。

对齐模式 WS与数据关系 数据起始位置 常见应用
飞利浦标准 WS在MSB前1个BCLK跳变 WS跳变后第2个BCLK开始 大多数I2S编解码器默认模式
左对齐 WS与MSB同时开始 WS跳变后第1个BCLK开始 部分DAC、ADC、DSP处理器
右对齐 数据LSB对齐到槽位末尾 数据在槽位最后N位(N=位宽) 旧式音频设备、兼容模式
三种I2S对齐方式对比 三种对齐方式对比(16位数据,32位槽位) BCLK WS DATA ① 飞利浦标准 WS跳变 空闲 MSB ... LSB ② 左对齐 WS与MSB同时 MSB ... LSB ③ 右对齐 空闲 空闲 空闲 MSB ... LSB 飞利浦标准:WS领先MSB 1个BCLK;左对齐:WS与MSB同时开始;右对齐:数据LSB对齐到槽位末尾

1.5 驱动开发中的关键配置项

在XMC系列MCU的I2S外设驱动开发中,以下配置项直接决定I2S总线能否正确工作:

  • 主从模式选择: MCU通常作为I2S主设备,产生SCK和WS时钟;也可配置为从设备接收外部时钟。
  • 数据位宽: 配置为16位、24位或32位,需与编解码器严格一致。
  • 槽位宽: 配置每个声道占用的BCLK周期数,通常为16、24或32。
  • WS极性: 配置WS高电平对应左声道还是右声道。
  • 数据对齐模式: 选择飞利浦标准、左对齐或右对齐。
  • 时钟极性: 配置数据在SCK上升沿还是下降沿采样。
XMC系列MCU I2S配置建议: XMC4000系列(基于Cortex-M4)的I2S模块支持灵活的位宽和对齐配置。建议在初始化时先读取编解码器的数据手册,确认其对WS极性、数据对齐和位宽的要求,再配置MCU侧寄存器。常见的编解码器(如WM8731、CS43L22、TLV320AIC23)默认使用飞利浦标准、16位或24位数据、32位槽位。