1. 概述

I2S(Inter-IC Sound,集成电路间音频总线)是飞利浦于 1986 年制定的一种用于数字音频设备之间传输 PCM 数据的串行总线标准。瑞芯微(Rockchip)SoC 内部集成了多路 I2S/PCM/TDM 控制器,广泛应用于 RK3566、RK3568、RK3588、RK3399、RV1126、RK3562 等系列芯片中,承担与外部 Codec、蓝牙音频、HDMI、DP、SoC 内部音频总线(如 SPDIF、PDM)之间的数字音频传输任务。

本篇从协议层、信号定义、典型连接、瑞芯微控制器特性四个维度建立整体认知,为后续驱动和应用开发打下基础。


2. I2S 协议基础

2.1 信号线定义

经典 I2S 总线由以下几根信号组成:

信号 方向 说明
BCLK Controller → Peripheral 位时钟(Bit Clock),每一位数据对应一个 BCLK 脉冲
LRCLK / WS Controller → Peripheral 左右声道选择时钟(Word Select / Left-Right Clock),低电平表示左声道,高电平表示右声道
SDOUT / SDI Controller → Peripheral 控制器发送数据(控制器侧的 TX)
SDIN / SDO Peripheral → Controller 控制器接收数据(控制器侧的 RX)
MCLK Controller → Peripheral 主时钟(Master Clock),可选,提供 Codec 内部 PLL 参考时钟

瑞芯微 I2S 控制器既可作为 Master,也可作为 Slave;通常应用为主模式,由 SoC 提供 BCLK 和 LRCLK。

2.2 时序要点

  • 数据相对于 LRCLK 边沿的采样:标准 I2S 在 LRCLK 变化后的第二个 BCLK 上升沿开始传输左声道 MSB;左对齐(Left-Justified)在第一个 BCLK 上升沿开始;右对齐(Right-Justified)数据 LSB 在 LRCLK 切换前一个 BCLK 结束。
  • 数据宽度:常见 16/20/24/32 bit。
  • 字长度:BCLK 周期数大于数据位宽时,会自动补零或重复 MSB(取决于 Codec 配置)。
  • LRCLK 频率 = 采样率(Fs),例如 48 kHz 音频的 LRCLK 即 48 kHz。

2.3 三种对齐格式

              LRCLK
   ___        |____________________________________
  | L |  R  |
__|   |______|____________________________________
   ^         ^
   |         |
 LRCLK 下降沿(标准 I2S: 数据延迟 1 BCLK;左对齐: 数据从下降沿立即有效)
  • Standard / Philips I2S:LRCLK 变化后第二个 BCLK 上升沿采样 MSB。
  • Left-Justified (MSB-First, LJ):LRCLK 变化后第一个 BCLK 上升沿采样 MSB。
  • Right-Justified (LSB-First, RJ):数据右对齐到 LRCLK 切换沿前一位,常用于 DSP 与 Codec 直连。

2.4 TDM 与多声道扩展

当需要传输超过 2 声道(如 4/6/8 声道)时,I2S 进入 TDM(Time-Division Multiplexing)模式:

  • LRCLK 不再代表左右声道,而是"帧同步"信号(FSYNC)。
  • 每一帧内通过时隙(slot 0..N-1)分配多路数据。
  • 瑞芯微 I2S 控制器原生支持 TDM8/TDM16,可直接对接 HDMI、DP 音频或多麦克风阵列。

3. 瑞芯微 I2S 控制器架构

3.1 在 SoC 中的位置

以 RK3588 为例,音频子系统路径如下:

            ┌──────────────────────────────────────┐
            │            Application               │
            │      (ALSA / tinyalsa / pulseaudio)   │
            └──────────────────────────────────────┘
                          │   /dev/snd/...
            ┌─────────────▼────────────────────────┐
            │        ASoC Core / DAI / PCM         │
            └──────────────────────────────────────┘
            ┌───────┬───────────────────┬──────────┐
            │       │                   │          │
        ┌───▼──┐ ┌──▼───┐         ┌─────▼────┐ ┌──▼───┐
        │ I2S0 │ │ I2S1 │  ...    │ SPDIF TX │ │ PDM  │
        │ (CPU)│ │(HDMI)│         └──────────┘ └──────┘
        └──┬───┘ └──┬───┘
           │        │
        ┌──▼───┐ ┌──▼──────────────┐
        │Codec │ │HDMI PHY/eDP PHY │
        └──────┘ └─────────────────┘

瑞芯微芯片内部通常包含 2~4 路 I2S 控制器,部分型号带有 HDMIAudio、SPDIF、PDM、VAD(语音活动检测)等模块。各路 I2S 互相独立,可独立工作于不同采样率与位宽。

3.2 RK3588 I2S 控制器特性

特性 说明
接口数 I2S0 / I2S1 / I2S2 / I2S3 共 4 路
工作模式 I2S 主/从,PCM 主/从,TDM 主/从
数据位宽 16 / 20 / 24 / 32 bit
采样率 8 kHz ~ 192 kHz
时钟源 SoC 内部 PLL 派生,支持 fractional divider
传输通道 RX / TX 各独立 FIFO,可配置 DMA 触发水位
音频格式 Philips I2S / Left-Justified / Right-Justified / PCM A / PCM B
TDM 支持最多 16 slot,单 slot 8~32 bit
数字混音 部分型号内置数字 mixer、I2S 间 loopback

3.3 寄存器组成(简化)

瑞芯微 I2S 控制器的寄存器布局大致相同,常见功能组包括:

  • 全局控制CR(控制寄存器)、IER/ISR(中断使能与状态)、RXFFR/TXFFR(FIFO 复位)、CLEAR(中断清除)。
  • 时钟分频CLKDIVMCLK_DIVBCLK_DIVLRCLK_DIVSAMPLE_RATE 派生计算器。
  • 传输格式TXCR/RXCR(位宽、对齐方式、LR/PCM 模式)、TXSLOT/RXSLOT(TDM slot 位置)、TXCHMAP/RXCHMAP(通道映射)。
  • FIFO / DMATXFIFOLR/RXFIFOLR(当前水位)、DMA/DMATR(DMA 控制)、TDM_TXCR/TDM_RXCR

不同型号寄存器细节会有差异,但编程模型一致:先配时钟,再配格式,最后配 FIFO/DMA。


4. 典型硬件连接

4.1 I2S 接外部 Codec

        RK3588                   ES8388 / ALC5616 / AC108 ...
        ┌─────┐                  ┌──────────────┐
             ---BCLK----------> BCLK         
 I2S0    I2S ---LRCLK---------> LRCLK / WS   
        │CTRL ---SDOUT---------> SDIN         
             <--SDIN----------- SDOUT        
             ---MCLK----------> MCLK         
        └─────┘                  └──────────────┘

要点:

  • MCLK 频率 = 采样率 × MCLKFS,通常为 256 Fs / 384 Fs / 512 Fs。
  • 多个 Codec 共享 BCLK/LRCLK 时,需关注总线驱动能力(一般只允许 1 主 1 从,多从会因负载过大导致信号畸变)。
  • MCLK 可由 I2S 控制器内部派生,也可由独立 GPIO + I2S 衍生的 mclk 引脚提供。

4.2 I2S 桥接 HDMI / DP 音频

HDMI/DP 的音频子包通过 I2S 总线传输给 PHY:

 I2S1 (RK3588) ──► HDMI PHY ──► HDMI Tx Controller ──► HDMI Connector

HDMI 音频采用 2/4/6/8 声道,I2S 必须配置为 TDM 模式,时隙分配遵循 HDMI 规范:slot 0~3 分别对应 FL/FR/RL/RR。瑞芯微 BSP 默认提供 rk_hdmi_sound 节点做对应绑定。

4.3 PDM 数字麦克风

PDM 数字麦通过 RK 芯片内的 PDM 控制器接出,不再走 I2S;但若芯片没有 PDM(如早期 RK3328),可通过 I2S 外接 PDM-to-PCM 转换 IC 实现拾音。

4.4 多板互连

板间音频互联场景(例如 SoM + 子板):

  • 主-从模式:让 SoM 输出 BCLK/LRCLK,子板 Codec 作从机,避免双方各自驱动导致频率漂移。
  • 共地 + 短走线:I2S 在 MCLK=24.576 MHz 时,信号上升沿应小于 5 ns,对走线长度、阻抗匹配敏感。

5. 采样率与时钟计算

瑞芯微 I2S 的 BCLK 派生关系:

BCLK = Clock Source / (BCLK_DIV + 1) / (LRCK_DIV + 1) = Fs × BitWidth × Channels

示例:48 kHz、24 bit、2 ch:

BCLK = 48000 × 24 × 2 = 2.304 MHz
LRCLK = 48 kHz
MCLK = 48000 × 256 = 12.288 MHz(当 MCLKFS = 256

如果采样率配置异常,常见症状是:

  • Codec 静音或出现咔嗒声;
  • HDMI 输出时被 HDMI 接收端判为 invalid format;
  • ALSA 报错 snd_pcm_hw_params failed

6. 时钟树与 PLL 配置

瑞芯微 I2S 的输入时钟源一般有:

  • clk_i2s0_frac —— 来自 CPLL/GPLL/AUDPLL;
  • clk_i2s0_src —— 二级 mux 选择;
  • i2s0_mclk_out —— 给 Codec 的主时钟。

在 RK3568/RK3588 上 AUDPLL 频率通常为 98.304 MHz / 90.3168 MHz,可整除 48k/96k 系列采样率,得到零分数偏差。

要避免常见坑:

  • 不要使用 GPLL 作为 MCLK 源,长时间运行可能因系统负载引起抖动;
  • 需要多路同步时(如 HDMI 视频与音频同步),使用同一 PLL 派生;
  • 若使用 44.1 kHz 系,需要在驱动层强制使用专门的 90.3168 MHz PLL。

7. 数据通路与缓冲机制

7.1 FIFO 行为

I2S 控制器内置 TX/RX FIFO(典型深度 64×32bit)。DMA 与 CPU 均可访问。

  • DMA 模式下,水位触发 DMA 请求;
  • 中断模式下,FIFO 达阈值触发中断;
  • FIFO 复位 (RXFFR/TXFFR) 用于暂停后的恢复。

7.2 DMA 通道

Linux 下通过 sound/soc/rockchip/ 驱动申请 DMA 通道:

struct snd_dmaengine_dai_dma_data *dma_data;

dma_data = devm_kzalloc(dev, sizeof(*dma_data), GFP_KERNEL);
dma_data->addr = res->start + I2S_TXDR;   /* TX FIFO 地址 */
dma_data->addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
dma_data->maxburst = 8;

DMA burst 设置会影响 ALSA period size 最佳值;瑞芯微 BSP 一般建议 period_size = 1024buffer_size = 4096

7.3 中断类型

  • TXE/RXF —— FIFO 阈值中断;
  • UNDR/OVR —— underrun / overrun;
  • CLR —— clear for next 帧;
  • 错误中断需要在 ISR 中清除并复位 FIFO。

8. 与其他音频接口的关系

接口 关系 说明
PCM 类似 通常用来接 Bluetooth/Modem,是 I2S 的子集
TDM I2S 扩展 多 slot,常用于 HDMI/DP/Multi-Mic
PDM 独立 数字麦接口,与 I2S 协议不同
SPDIF 独立 索尼/飞利浦数字音频接口
SoundWire 独立 MIPI SoundWire,瑞芯微部分新芯片支持
HDMI/DP Audio 走 I2S/TDM HDMI Tx 内部包含 I2S-to-HAD 转换

9. 关键性能指标

设计/选型时关注:

  • THD+N:Codec 决定,一般 ≤ 0.005 %;
  • 底噪:与电源、PCB 布局强相关,RK 控制器本底噪声 < -90 dB;
  • **抖动 (Jitter)**:MCLK 抖动 < 50 ps RMS;
  • 延迟:典型 ALSA 通路 round-trip 延迟 = 2 × period_size / Fs ≈ 21 ms @ 48 kHz / 1024 sample。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐