2. I2S总线协议详解:I2S物理层、数据格式与飞利浦协议时序
I2S(Inter-IC Sound)总线是嵌入式音频系统中应用最广泛的数字音频接口标准,由飞利浦(现恩智浦)于1986年制定。本章从物理层信号定义、数据格式(左对齐、右对齐、标准I2S)以及飞利浦协议时序三个维度,系统讲解I2S总线的工作原理与配置要点。
2.1 I2S物理层信号定义
I2S总线由三条主要信号线组成,所有信号均与位时钟同步,采用主从架构进行数据传输。
| 信号名称 | 缩写 | 方向(主设备视角) | 功能描述 |
|---|---|---|---|
| 位时钟 | BCLK / SCK | 输出(主)→ 输入(从) | 每个脉冲对应一个数据位的传输,频率 = 采样率 × 位宽 × 通道数 |
| 帧时钟 | LRCK / WS | 输出(主)→ 输入(从) | 指示当前传输的是左声道还是右声道,频率等于采样率 |
| 串行数据 | SD / DATA | 双向(取决于收发角色) | 承载音频采样数据的串行位流,MSB优先传输 |
除上述三线外,部分I2S设备还包含可选的MCLK(主时钟)信号线,用于提供更高精度的时钟源,MCLK频率通常为BCLK的整数倍(如256×fs、512×fs)。
2.2 I2S数据格式详解
I2S协议定义了三种主流数据格式,区别在于数据相对于帧时钟(LRCK)边沿的对齐方式以及数据有效位的起始位置。
2.2.1 标准I2S格式(飞利浦格式)
标准I2S格式是飞利浦协议的原生格式,其核心特征为:数据在LRCK翻转后的第二个BCLK上升沿开始传输,且MSB优先。LRCK高电平表示左声道,低电平表示右声道(或相反,取决于具体实现)。
- 数据位在BCLK的上升沿被采样,在下降沿更新。
- MSB在LRCK翻转后延迟一个BCLK周期开始传输。
- 数据位宽可配置为16/24/32位,不足部分填充0。
2.2.2 左对齐格式(Left-Justified)
左对齐格式与标准I2S格式的主要区别在于:数据在LRCK翻转后的第一个BCLK上升沿立即开始传输,无延迟周期。MSB与LRCK边沿对齐,因此称为“左对齐”。
2.2.3 右对齐格式(Right-Justified)
右对齐格式中,数据的LSB与LRCK的翻转边沿对齐,即数据在帧时钟周期的末尾对齐。这种格式常用于与某些DAC/ADC的兼容性需求。
| 格式类型 | MSB起始位置 | LSB对齐方式 | 典型应用场景 |
|---|---|---|---|
| 标准I2S(飞利浦) | LRCK翻转后延迟1个BCLK | 自然对齐 | 飞利浦/恩智浦编解码器、主流SoC |
| 左对齐(Left-J) | LRCK翻转后立即开始 | 自然对齐 | 部分ADI/TI音频ADC |
| 右对齐(Right-J) | 根据位宽计算偏移 | LSB与LRCK边沿对齐 | 部分DAC、旧式音频设备 |
2.3 飞利浦协议时序详解
飞利浦I2S协议规范(I2S-bus specification)定义了完整的时序要求,包括时钟极性、数据建立/保持时间以及主从设备角色。
2.3.1 时钟极性配置
I2S协议支持两种时钟极性模式,通过配置BCLK和LRCK的极性寄存器位实现:
- 标准模式(Normal Polarity): BCLK空闲时为低电平,数据在BCLK上升沿采样;LRCK高电平=左声道,低电平=右声道。
- 反转模式(Inverted Polarity): BCLK空闲时为高电平,数据在BCLK下降沿采样;LRCK极性可独立反转。
2.3.2 数据建立与保持时间
飞利浦协议对数据相对于BCLK边沿的时序有明确要求:
| 时序参数 | 符号 | 最小值 | 说明 |
|---|---|---|---|
| 数据建立时间 | tsu | 10 ns | 数据在BCLK采样边沿前必须保持稳定的最短时间 |
| 数据保持时间 | th | 5 ns | 数据在BCLK采样边沿后必须保持稳定的最长时间 |
| BCLK周期 | tcy | 取决于采样率 | BCLK频率的倒数,决定了数据传输速率 |
2.3.3 主从设备角色
I2S总线中的主设备负责产生BCLK和LRCK时钟信号,从设备则接收时钟并同步数据传输。在嵌入式Linux系统中,SoC的I2S控制器通常配置为主设备,外部编解码器配置为从设备。
2.4 数据格式配置实战要点
在嵌入式Linux中配置I2S数据格式时,需要关注以下关键参数:
- 数据位宽(Data Width): 16位、24位或32位,必须与编解码器支持的位宽一致。
- 帧格式(Frame Format): 标准I2S、左对齐或右对齐,通过I2S控制器的FMT寄存器位选择。
- 时钟极性(Clock Polarity): BCLK和LRCK的极性配置,需与编解码器数据手册匹配。
- 主从模式(Master/Slave): 决定时钟由谁产生,通常SoC为主设备。
&i2s1 {
status = "okay";
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2s1>;
rockchip,format = "i2s"; /* 标准I2S格式 */
rockchip,bclk-fs = <32>; /* BCLK = 32 × fs(16位×2通道) */
rockchip,frame-master = <1>; /* SoC为主设备 */
rockchip,bitclock-master = <1>;/* SoC产生BCLK */
};