I2S协议理解

一种名字跟I2C很像的音频协议。

参考资料:
文档 (中文)

I2S协议

I2S(Inter-IC Sound,集成电路内置音频总线)是一种同步串行通信协议
通常用于在两个数字音频设备之间传输音频数RGBL

简介

I2S各模式下所需管脚数量(ESP32)
参考来源:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/i2s.html

  • 标准模式

    • MCLK
      • 主时钟线。该信号线可选,具体取决于从机,主要用于向 I2S 从机提供参考时钟。
      • 通常为256×Fs或512×Fs,用于内部PLL锁相
      • 如果从机设备能通过 BCLK(位时钟)自适应时钟,或自带高精度晶振,或低精度应用,则无需主机提供 MCLK
    • BCLK/SCLK
      • 位时钟线,用于数据线的位时钟(BCLK - Bit Clock)。也称为串行时钟线(Serial Clock)。
      • 每次脉冲传输一位数据,决定数据速率
    • LRCK / WS
      • 字(声道)选择线。通常用于识别声道(除 PDM 模式外)。
      • 当 LRCK 为“0”时,传输左声道数据;当为“1”时,传输右声道数据。
      • 其频率等于音频的采样率(如 44.1kHz),用于标识一个完整数据帧的开始
    • DIN
      • 串行数据输入线。如果 DIN 和 DOUT 被配置到相同的 GPIO,数据将在内部回环。
    • DOUT
      • 串行数据输出线。如果 DIN 和 DOUT 被配置到相同的 GPIO,数据将在内部回环。
      • 传输音频采样值
  • PDM 通信模式

    • CLK:PDM 时钟线。
    • DIN/DOUT:串行数据输入/输出线。

每个 I2S 控制器都具备以下功能,可由 I2S 驱动进行配置:

  • 可用作系统主机或从机
  • 可用作发射器或接收器
  • DMA 控制器支持流数据采样,CPU 无需单独复制每个采样数据

术语解释

  • 采样率:单声道每秒采样数据数量。
  • SCLK:源时钟频率,即时钟源的频率。
  • MCLK:主时钟频率,BCLK 由其产生。MCLK 信号通常作为参考时钟,用于同步 I2S 主机和从机之间的 BCLK 和 WS。
  • BCLK
    • 位时钟频率,一个 BCLK 时钟周期代表数据管脚上的一个数据位。
    • 通过 i2s_std_slot_config_t::slot_bit_width 配置的通道位宽即为一个声道中的 BCLK 时钟周期数量,
    • 因此一个声道中可以有 8/16/24/32 个 BCLK 时钟周期。
  • LRCK / WS:左/右时钟或字选择时钟。在非 PDM 模式下,其频率等于采样率。

💡 通常,MCLK 应该同时是 采样率 和 BCLK 的倍数。

通信模式

标准模式
标准模式中有且仅有左右两个声道,驱动中将声道称为 slot。这些声道可以支持 8/16/24/32 位宽的采样数据
声道可用的通信格式有 Philips 格式\ MSB 格式\ PCM 帧同步

  • Philips 格式
    数据信号与 WS 信号相比有一个位的位移。WS 信号的占空比为 50%。
    wavedrom.png

  • MSB 格式
    与 Philips 格式基本相同,但其数据没有位移。
    wavedrom.png

  • PCM 帧同步
    数据有一个位的位移,同时 WS 信号变成脉冲,持续一个 BCLK 周期。
    wavedrom.png

PDM模式
PDM(Pulse-density Modulation,脉冲密度调制)通过采样的方式将模拟信号数字化为 1 位精度的数字信号。
它以脉冲密度的方式呈现模拟信号的大小,即密度越高,对应的模拟信号值越大。
wavedrom (1).png

  • PDM转换PCM
    PDM (脉冲密度调制)格式的数据通常可以经过以下几个步骤转换为 PCM (脉冲编码调制)格式:

    • 低通滤波:用于还原模拟信号波形。一般采用 FIR 滤波器;
    • 下采样:用于将 PDM 的过采样率降低到期望的 PCM 采样率。下采样可以用简单的抽值法实现;
    • 高通滤波:用于去除信号的直流部分;
    • 放大:用于调整转换后的 PCM 数据的増益。一般由转换后的 PCM 信号乘以一个系数得到最终 PCM 信号。

💡

无论原始 PDM 格式还是 PCM 格式,PDM 模式下的一个数据单元总是 16 比特的位宽。
例如,用原始 PDM 格式发送数据,那么您数组中的数据应该像这样排列:CH0 0x1234,CH1 0x5678,CH0 0x9abc,CH1 0xdef0。RX 方向同理。

通道状态

I2S通道有三种状态,分别为 registered(已注册)、 ready准备就绪) 和 running(运行中),它们的关系如下图所示:
i2s_state_machine.png

// TODO

EXAMPLE

https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/i2s.html