【底层通信协议】I2S协议的记录与分析
一、简介
I2S(Inter-IC Sound,集成电路内置音频总线)是一种同步串行通信协议,通常用于在两个数字音频设备之间传输音频数据
- 支持全双工/半双工
- 支持主/从模式
- 适用场景:立体声系统,支持多声道
二、基本信号线
① BCLK(或 SCK)
- 用途:位时钟线,用于数据线的位时钟
- 频率: $$f_{BCLK}=\text{通道数量} \times \text{采样频率} \times \text{通道长度}$$
- 其中“通道长度”为每个声道在总线上占用的总位数(有效数据位 + Dont care 填充位),而通道数量通常为 2,即左右声道
② WS(或 LRCK)
- 用途:字(声道)选择线,用于识别当前传输的是左声道还是右声道的音频数据,也叫帧同步信号
- 频率:\[f_{LRCK}=\text{采样频率} \]
③ SD(串行数据)
- 用途:串行数据输入/输出线
- 方向
- TX 方向:SOUT
- RX 方向:SDIN
- 位宽:可以根据具体应用而变化,通常为 16 位或 32 位。
- 注意:如果 DIN 和 DOUT 被配置到相同的 GPIO,数据将在内部回环(loopback)
④ MCLK(可选)
- 用途:主时钟线,主要用于向 I2S 从机提供参考时钟。是否需要以及具体频率取决于从器件的要求
三、常见参数
- 时钟极性:确定数据位传输的时钟沿(上升沿或下降沿)
- 帧同步极性:确定帧同步信号的有效电平,指示音频数据的帧起始和结束位置
- 传输格式:定义音频数据的编码方式,以及数据的顺序(如左声道先传输还是右声道先传输)
四、主从工作模式
- 主模式:提供时钟信号 BCLK 和帧同步信号 LRCK
- 从模式:接收来自主机的 BCLK 和 LRCK
- 基于主从模式,可以延伸出三种常见工作场景,如下图所示:
五、数据传输模式(三种数据对齐格式)
① 飞利浦标准 I2S 模式
- 时序图如下:
-
SDIN 采样时机:BCLK 上升沿
-
SDOUT 发送时机:BCLK 下降沿
-
左右声道指定:
- LRCK 为低电平 → 左声道
- LRCK 为高电平 → 右声道
-
Data Delay:
- LRCK 跳变沿之后,延迟 1 个 BCLK 才开始发送当前声道的有效数据(MSB)
注意:这 1 个 BCLK 期间并非空闲,而是在传输上一个声道的最后一位(可能是有效 LSB 或 Dont care 填充位)
-
数据发送 - 大端模式:
- SDOUT 从 MSB 开始发送,MSB 与 LRCK 边沿相隔 1 个 BCLK
-
Dont care:
- 长度 = 通道长度 − 数据长度
- 位置:有效数据之后
② 左对齐模式
时序图如下:
- SDIN 采样时机:BCLK 上升沿
- SDOUT 发送时机:BCLK 下降沿
- 左右声道指定:
- LRCK 为高电平 → 左声道
- LRCK 为低电平 → 右声道
- 无 Data Delay:
- LRCK 跳变沿之后立即发送有效数据(MSB 与 LRCK 边沿对齐)。
- 数据发送 - 大端模式:从 MSB 开始发送。
- Dont care:
- 长度 = 通道长度 − 数据长度
- 位置:有效数据之后
③ 右对齐模式
时序图如下:
- SDIN 采样时机:BCLK 上升沿
- SDOUT 发送时机:BCLK 下降沿
- 左右声道指定(以芯片数据手册为准,无统一标准):
- 常见之一:LRCK 低电平 = 左声道,高电平 = 右声道(与飞利浦 I2S 相同)
- 常见之二:LRCK 高电平 = 左声道,低电平 = 右声道(与左对齐相同)
- 无 Data Delay:
- LRCK 跳变沿之后立即发送数据(MSB 与 LRCK 边沿对齐)
- 数据发送 - 大端模式:
- 从 MSB 开始发送
- Dont care:
- 长度 = 通道长度 − 数据长度
- 位置:有效数据之前
④ 三种格式对比
| 特性 | 飞利浦 I2S | 左对齐 | 右对齐 |
|---|---|---|---|
| Data delay | 1 BCLK | 无 | 无 |
| MSB 对齐位置 | LRCK 边沿后 1 BCLK | 与 LRCK 边沿对齐 | 与 LRCK 边沿对齐(数据整体右对齐) |
| Dont care 位置 | 有效数据后 | 有效数据后 | 有效数据前 |
| LRCK 极性(常见) | 低=左,高=右 | 高=左,低=右 | 不统一(需查手册) |
| 典型应用 | 绝大多数音频 Codec | 部分 DSP/ADC | 部分老旧设备 |
⑤ 关于通道长度、Data delay 和 Dont care
公式:\(\text{数据长度} + \text{Dont care长度} = \text{通道长度}\)
- 通道长度
- 非固定,可实时配置
- 在总线上为传输一个声道的数据所分配的固定时间槽(总位数)
- 必须大于或等于数据长度
- Dont care 的存在主要是为了在固定长度的传输帧中填充未使用的位,保持时钟连续和接口规整
- 1 BCLK 的 Data Delay 是飞利浦 I2S 的固定时序特征,目的是让接收端有更宽松的建立/保持时间,简化采样时序。
- 不计入通道长度
- 在连续传输中,Data delay 的那 1 个 BCLK 实际上传输的是上一个声道的最后一位(可能是有效 LSB,也可能是 Dont care 填充位)
六、数据位宽(位深)
- 用途:指定每个采样数据的位数,决定了量化精度(由主机配置决定)
- 常见值:16 位、24 位、32 位,较大的位宽可以提供更高的分辨率和动态范围
- 有效位宽 vs 通道长度:
- 有效位宽(数据长度)由主机软件配置
- 通道长度同样可配置(通常为 16 或 32 位),且必须 ≥ 有效位宽
- BCLK 频率由通道长度决定:\(f_{BCLK}=2\times f_s \times \text{通道长度}\),不能直接反推出有效位宽

浙公网安备 33010602011771号