3、I2S协议详解:I2S总线标准、信号定义(SCK/WS/SD)、时序图、数据格式(左对齐/右对齐/I2S标准)

I2S(Inter-IC Sound)总线由Philips Semiconductor(现NXP)于1986年提出,是数字音频系统中连接控制器(如SoC、MCU、DSP)与音频编解码器(Codec)、ADC/DAC、数字音频处理器之间最主流的串行音频传输协议。与I2C、SPI等通用总线不同,I2S专为音频流设计,强调时钟同步、数据连续性和声道区分。理解I2S的物理信号、时序关系以及三种主流数据格式(I2S标准、左对齐、右对齐),是多通道音频系统设计(如TDM级联、多路麦克风阵列、智能音箱)的基础。本章将从信号定义、时序参数、数据格式对比、典型配置案例及常见设计误区五个维度展开。

I2S 总线信号与数据格式关系图 主控制器 (SoC / MCU / FPGA) Master 模式 产生 SCK / WS 音频编解码器 (Codec / ADC / DAC) Slave 模式 接收 SCK / WS SCK WS SD 数据/控制流向 三种数据格式对比(以 16-bit 数据,24-bit 帧长为例) ① I2S 标准(Philips) WS 变化后延迟 1 个 SCK 周期输出 MSB WS=0 (左声道) WS=1 (右声道) ② 左对齐(Left Justified) WS 变化后立即输出 MSB,无延迟 MSB 与 WS 边沿对齐 ③ 右对齐(Right Justified) 数据 LSB 与 WS 边沿对齐,MSB 在帧尾

3.1 I2S总线标准与信号定义

I2S总线采用三线制串行连接,分别为:SCK(串行位时钟,也称BCLK)、WS(声道选择,也称LRCLK)和SD(串行数据)。在某些多通道扩展场景下,还会增加一条MCLK(主时钟),用于为Codec内部Δ-Σ调制器提供基准时钟,但MCLK不属于I2S标准定义的必要信号。

  • SCK(Bit Clock):每一位音频数据对应一个SCK脉冲。SCK频率 = 采样率 × 声道数 × 位深。例如:48kHz采样、16bit、立体声时,SCK = 48k × 2 × 16 = 1.536MHz。SCK由主设备(Master)产生,从设备(Slave)接收。
  • WS(Word Select):用于区分左右声道。WS频率等于采样率(fs)。WS为低电平时传输左声道数据,高电平时传输右声道数据(Philips标准定义;部分Codec可能相反,需查阅数据手册)。WS信号在SCK的下降沿变化,数据在SCK上升沿采样。
  • SD(Serial Data):串行数据线,二进制补码格式传输音频样本。数据位在SCK上升沿稳定,由发送端在SCK下降沿更新。SD可以是单向(播放或录音)或双向(通过GPIO方向控制实现半双工)。
工程要点:在FPGA或MCU中实现I2S Master时,SCK和WS必须由内部时钟分频产生,且WS的切换必须与SCK的下降沿对齐,否则从设备可能采样到错误的声道边界。建议使用DCM/PLL生成低抖动时钟,避免使用软件翻转GPIO模拟时序。

3.2 时序图与关键参数

I2S时序的核心在于建立时间(Setup Time)和保持时间(Hold Time)。发送端在SCK下降沿更新SD数据,接收端在SCK上升沿采样。因此,数据必须在上升沿之前稳定(建立时间),并在上升沿之后保持一段时间(保持时间)。

参数符号典型值说明
SCK频率f_SCK1.024 ~ 24.576 MHz取决于采样率与位深
SCK高电平时间t_H≥ 20 ns保证上升沿采样稳定
SCK低电平时间t_L≥ 20 ns保证下降沿数据更新
数据建立时间t_su≥ 10 ns数据在SCK上升沿前稳定
数据保持时间t_h≥ 5 ns数据在SCK上升沿后保持
WS建立时间t_ws_su≥ 10 nsWS在SCK下降沿前稳定

实际设计中,若SCK频率超过12.288MHz(如192kHz/24bit/2ch),建议使用硬件I2S外设而非GPIO模拟,因为GPIO翻转延迟(通常>20ns)会导致建立时间不足。对于PCB布线,SCK与SD走线长度差应控制在±5mm以内,避免因传播延迟差异导致采样错误。

3.3 数据格式:左对齐、右对齐与I2S标准

三种格式的核心区别在于MSB(最高有效位)与WS边沿的对齐关系。以16bit数据、24bit帧长(即每个声道占用24个SCK周期)为例:

  1. I2S标准(Philips):MSB在WS变化后的第2个SCK上升沿被采样。即WS变化后延迟1个SCK周期才开始传输数据。这种设计允许从设备有更多时间检测WS边沿,兼容性最好。
  2. 左对齐(Left Justified):MSB与WS变化边沿同时出现在SCK上升沿。数据帧紧贴WS边沿,无延迟。这种格式常用于TI(Texas Instruments)的Codec,如TLV320AIC系列。
  3. 右对齐(Right Justified):数据的LSB(最低有效位)与WS结束边沿对齐。MSB位于帧的末尾,因此数据位宽必须小于或等于帧长。例如16bit数据在24bit帧中,MSB位于第9个SCK周期。这种格式在DAC中常见,如AKM的AK4458。
风险提示:右对齐格式下,若数据位宽等于帧长(如24bit数据+24bit帧),则右对齐与左对齐在物理时序上完全一致。但若数据位宽小于帧长(如16bit数据+32bit帧),右对齐格式会将数据“挤”在帧尾,导致MSB位置不固定,软件配置时必须明确指定数据位宽和帧长,否则会出现音量异常或噪声。

3.4 实战案例:基于STM32的I2S与CS42L51 Codec对接

某智能音频模块需要实现48kHz/16bit立体声播放与录音,主控为STM32F407(I2S外设支持Philips标准),Codec为Cirrus Logic CS42L51(支持左对齐/右对齐/I2S标准)。设计目标:通过I2S2接口连接,实现全双工音频传输。

关键配置参数:

  • 采样率:48kHz,SCK = 48k × 2 × 16 = 1.536MHz
  • MCLK:12.288MHz(由STM32的PLL输出,Codec要求MCLK = 256 × fs)
  • 数据格式:I2S标准(Philips),16bit数据,帧长16bit(因为数据位宽=帧长,左/右对齐无差异)

实施步骤:

  1. 初始化GPIO:PB12(I2S2_WS)、PB13(I2S2_CK)、PB15(I2S2_SD),复用为AF5。
  2. 配置SPI/I2S外设:使用SPI2的I2S模式,设置为主机、全双工、16bit数据、I2S标准。
  3. 配置Codec:通过I2C接口(地址0x4E)写入寄存器0x02(控制口)设为I2S标准,寄存器0x03(接口格式)设为16bit。
  4. 启动DMA传输:使用DMA1 Stream4(TX)和Stream5(RX),循环模式,数据缓冲区为16bit数组。

调试过程与问题:首次上电后,录音数据出现周期性“咔哒”声。使用逻辑分析仪抓取SCK/WS/SD波形,发现WS频率为48kHz,但SCK频率为1.536MHz,符合预期。进一步检查发现,CS42L51的MCLK实际输入为12.288MHz,但STM32的PLL配置错误,实际输出为11.2896MHz(256×44.1kHz),导致Codec内部时钟失锁。修正PLL分频系数后,问题解决。

复盘经验:I2S调试时,务必先验证MCLK频率是否精确匹配(误差应小于±0.1%),再检查SCK/WS时序。使用逻辑分析仪时,应同时抓取MCLK、SCK、WS、SD四路信号,观察WS边沿与SCK下降沿的对齐关系。若WS在SCK上升沿附近变化,说明时序裕量不足,需调整时钟相位或降低SCK频率。

3.5 常见误区与设计总结

误区一:混淆WS极性。部分Codec(如WM8960)的WS极性可通过寄存器反转。若主控输出WS低=左声道,而Codec配置为低=右声道,则左右声道互换。解决方法是查阅Codec数据手册的“Interface Control”寄存器,并做一次左右声道测试音频验证。

误区二:忽略帧长与数据位宽的差异。当使用16bit数据但帧长配置为32bit时,I2S标准格式下,数据后16位为0(或无效),但SCK频率需加倍。若主控未正确配置帧长,会导致数据错位。例如STM32的I2S外设,通过SPI_I2SCFGR的CHLEN和DATLEN位分别设置帧长和数据位宽,两者必须匹配。

误区三:多通道TDM时未处理WS的“空位”。在TDM8模式下,WS不再是简单的左右声道切换,而是以帧同步脉冲形式出现。此时I2S标准格式不再适用,需切换为DSP格式(TDM模式)。若沿用I2S标准,从设备将无法正确解析通道槽位。

对比维度I2S标准左对齐右对齐
MSB位置WS边沿后第2个SCKWS边沿处帧尾前(LSB对齐WS边沿)
典型厂商NXP, Cirrus LogicTI, Analog DevicesAKM, ESS
适用场景通用消费音频专业音频设备DAC输出,低延迟需求
数据位宽限制≤ 帧长≤ 帧长必须 ≤ 帧长,且MSB位置不固定

总结:I2S协议本身并不复杂,但工程实践中80%的音频链路问题源于时序细节和格式配置不匹配。设计时建议遵循以下流程:①确认Codec支持的格式与主控外设能力;②计算SCK/MCLK频率并验证PLL配置;③用逻辑分析仪抓取实际波形,对比数据手册时序图;④用1kHz正弦波测试左右声道分离度和THD+N。掌握I2S的三种格式差异,是后续理解TDM多通道扩展的基础。