一、 物理层与电气特性深度对比
| 特性 | I2C | I2S |
|---|---|---|
| 输出结构 | 开漏输出 (Open-Drain) | 推挽输出 (Push-Pull) |
| 上拉电阻 | 必须有外部上拉电阻(如4.7kΩ)。因为开漏只能主动拉低,高电平靠上拉拉上去。 | 不需要上拉电阻。推挽结构内部直接有强上拉和强下拉,驱动能力极强。 |
| 总线电容限制 | 严格限制,通常不能超过 400pF。设备挂多了、线长了,上升沿变缓,通信就会失败。 | 无严格电容限制,线长主要受信号反射和时钟频率影响。 |
| 时钟频率 | 较低:100kHz(标准)、400kHz(快速)、1MHz或3.4MHz(高速)。 | 较高:由音频采样率和位深决定,通常 BCLK 在 1MHz ~ 24MHz 之间。 |
| 信号完整性 | 依靠上拉电阻和总线电容构成的 RC 充放电。 | 高速方波,边沿陡峭,走线必须考虑阻抗匹配(通常串联22Ω/33Ω匹配电阻)。 |
二、 协议层底层时序拆解
1. I2C 的"问答式"通信
I2C 的通信过程非常严谨,像是一场有礼貌的对话:
-
START (起始位):SCL 为高电平时,SDA 从高变低。
-
地址帧 :发送 7 位设备地址 + 1 位读写位 (R/W)。比如
0x24 << 1 | 0。 -
ACK/NACK (应答):发送完 8 位,接收方必须把 SDA 拉低(ACK),告诉发送方"我收到了"。如果没拉低(NACK),说明对方不在或忙。
-
数据帧:继续发送 8 位数据,每发完一个字节跟一个 ACK。
-
STOP (停止位):SCL 为高电平时,SDA 从低变高。
-
时钟拉伸 (Clock Stretching):如果从机处理不过来,可以强行把 SCL 拉低,让主机等待。这是 I2C 独有的"降速"机制。
2. I2S 的"广播式"通信
I2S 不需要地址,也没有 ACK,时钟一旦响起,数据就必须源源不断地流过去。
-
SCK/BCLK (位时钟):决定了每一位数据的节拍。
-
WS/LRCK (左右声道时钟/帧时钟):
-
通常频率等于音频采样率(如 44.1kHz、48kHz)。
-
WS = 0 (低电平)代表当前传输的是左声道数据。
-
WS = 1 (高电平)代表当前传输的是右声道数据。
-
它的占空比通常是 50%。
-
-
SD (串行数据):
-
数据通常采用 二进制补码 格式。
-
MSB (最高有效位) 先行。
-
在 BCLK 的下降沿或上升沿采样(取决于具体的 I2S 标准:飞利浦标准、左对齐、右对齐等)。
-
三、 带宽与数据量差距(为什么音频不能用 I2C)
我们算一笔账,以一首 无损高保真音频 为例(24位,96kHz采样率,双声道):
-
传输速率需求 = 24 bit × 96,000 Hz × 2 声道 = 4,608,000 bps (约 4.6 Mbps)。
-
I2C 的极限速率:即使是高速模式(3.4 Mbps),也无法满足连续传输。而且 I2C 还有寻址、ACK 等协议开销,实际带宽更低。
-
I2S 的速率 :BCLK = 24 bit × 96,000 Hz × 2 声道 = 4.608 MHz。这个速率对 I2S 来说是家常便饭,十分轻松。
-
结论:如果用 I2C 传音频,声音会严重卡顿、失真,完全无法使用。