kubo
文章14
标签40
分类5

文章归档

I²S 协议详解

I²S 协议详解

I2S

I²S 核心原理(把位流变成样本)

1) 三根关键线

  • WS / LRCLK(“字选择”/左右声道时钟)
    频率 = 采样率 $f_s$。WS 低=Left、高=Right(标准 I²S 约定)。每个 WS 半周期称为一个“​槽位/slot”(一个声道的样本)。

  • BCLK / SCK(位时钟)
    每个 bit 的节拍。频率

    $$
    f_{\text{BCLK}} = f_s \times \text{slot_bits} \times \text{channels}
    $$

    例:48 kHz、32 bit 槽、立体声 → 3.072 MHz。

  • SD(数据线)
    MSB 先行;在 WS 翻转后的第 1 个 BCLK 才输出 MSB(I²S 特有“1 位延迟”)。未被选中的声道时,很多数字麦 ​SD 三态(Hi-Z)。

一帧(frame)= Left 槽 + Right 槽 = ​1 个采样时刻;帧时长 $T_{\text{frame}} = 1/f_s$。

2) “有效位数” vs “槽位宽度”

  • 有效位数​:器件实际的样本精度(例如数字麦 24 bit PCM)。
  • 槽位宽度 slot_bits​:总线为每个声道传输的位数(常设 ​32 bit,便于对齐/DMA)。
  • 常见做法:​24 bit 有效数据放在 32 bit 槽的高 24 位,低 8 位补 0​。接收后取高 24 位并符号扩展即可。

与采样率的关系(算清楚“时钟/时延/吞吐”)

  • WS 频率:$f_{\text{WS}} = f_s$
  • BCLK 频率:$f_{\text{BCLK}} = f_s \times \text{slot_bits} \times \text{channels}$
  • 一帧时长:$T_{\text{frame}} = 1/f_s$
  • 一次读取 N 个样本的窗口时长:$T_{\text{buffer}} = N/f_s$
    例:$f_s=48\text{kHz}, N=256 \Rightarrow 5.33\text{ms}$