Rockchip平台数字音频接口(DAI)全维度解析与调试指南

电子说

1.4w人已加入

描述

数字音频接口(DAI)是Rockchip系列SoC实现音频数据传输、编解码与交互的核心组件,其配置与调试直接决定了音频设备的音质、兼容性与稳定性。本文档聚焦Rockchip平台主流的DAI接口技术体系,从时序图解读方法入手,系统剖析I2S、I2S-TDM、PDM、DCODEC、VAD、SPDIF等核心接口的协议原理、时钟计算、时序特征、DTS配置及调试技巧,旨在为音频开发工程师提供从理论到实战的全维度参考,解决调试过程中常见的时序不匹配、时钟异常、多通道复用等关键问题。

1.1 如何看懂时序图

在深入各个 DAI 接口之前,先统一讲解如何看懂时序图。这是阅读芯片手册和调试音频问题时最重要的技能。

1.1.1 时序图的基本元素

时序图本质上是一组信号随时间变化的波形图,核心元素包括:

元素 含义 怎么看
水平轴 时间轴,从左到右时间递增 越靠右的事件越晚发生
高低电平 每个信号线只有 0(低电平)和 1(高电平)两种状态 高 = 1,低 = 0
信号线 每个信号单独一行,水平排列 从上到下阅读每条信号线
时钟边沿 上升沿(0→1)和下降沿(1→0) 上升沿用/ 表示,下降沿用 表示
位周期 一个 bit 持续的时间 = 1 / BCLK 频率
帧(Frame) 一个完整的采样周期(包含所有声道) 以 LRCK/FSYNC 的一个完整周期为单位

1.1.2 读时序图的步骤

第一步:找到时钟信号

在时序图中先找到 BCLK(位时钟)和 LRCK(帧时钟/声道时钟)这两条线。它们是"标尺",所有数据信号都参照时钟来解读。

Rockchip

图:I2S Normal Mode 时序图 — 注意 LRCK 跳变后延迟 1 个 BCLK 数据才开始(MSB 从第 2 个 BCLK 开始)

第二步:确认数据在哪个时钟边沿被采样

数据发送方(Tx)在某个时钟边沿改变数据,接收方(Rx)在另一个时钟边沿读取数据。通常:

•Tx 在 BCLK 的下降沿发送数据

•Rx 在 BCLK 的上升沿采样数据

这样保证了数据在采样时是稳定的。

第三步:数出帧结构和数据对齐

以 LRCK 为基准,看一个帧内有多少个 BCLK 周期,数据从第几个 BCLK 开始对齐。不同格式的对齐方式不同,见下方各格式的时序图。

第四步:对照格式标准验证

将观察到的特征对照标准定义:

格式 LRCK 高电平声道 LRCK 低电平声道 数据开始位置 典型位延迟
I2S 左声道 右声道 第 2 个 BCLK 1 BCLK
Left Justified 左声道 右声道 第 1 个 BCLK 0 BCLK
Right Justified 左声道 右声道 从 LSB 反推 取决于位深
PCM-A(DSP-A) 左声道(BCLK 上升沿) 右声道 第 2 个 BCLK 1 BCLK
PCM-B(DSP-B) 左声道(BCLK 上升沿) 右声道 第 1 个 BCLK 0 BCLK

1.1.3 用示波器实测时序图的方法

在板子上调试时,用示波器(或逻辑分析仪)可以抓取真实时序:

 

  示波器探头连接:  CH1 ──► BCLK  (位时钟)  CH2 ──► LRCK  (帧时钟/声道时钟)  CH3 ──► SDO   (数据输出)  CH4 ──► MCLK  (主时钟,可选)  示波器设置:  - 触发源:CH1 (BCLK)  - 触发模式:Normal  - 时间基准:根据 BCLK 频率调整  - 通道耦合:DC

 

实测时序图 vs 手册时序图的对照方法

1.用示波器抓取 4 条信号的波形

2.将示波器截图与芯片手册中的时序图并排对比

3.关键检查点:

○LRCK 高低电平宽度是否相等(I2S 模式下)

○SDO 数据是否在 LRCK 跳变后 1 个 BCLK 才开始(I2S 标准)

○数据位数是否和配置一致(16/24/32 bit)

○BCLK 频率 = 采样率 × 位深 × 声道数

1.2 I2S 接口详解

1.2.1 I2S 协议原理

I2S(Inter-IC Sound)是由 Philips 于 1986 年定义的数字音频数据传输标准,是目前最通用的数字音频接口协议。

I2S 只有 3 根信号线(不含 MCLK):

信号线 全称 功能 方向
BCLK Bit Clock 位时钟,每个 bit 传输一个周期 发送方或接收方提供
LRCK / WS Word Select / Left Right Clock 帧时钟,区分左声道和右声道 与 BCLK 同源
SDI / SDO Serial Data In / Out 串行数据线,传输音频采样值 双向各一条

外加一条MCLK(Master Clock),不是 I2S 协议要求的,但绝大多数 CODEC 需要它来驱动内部 PLL/ADC/DAC。

1.2.2 I2S 时钟频率计算

这是调试中最容易出错的地方,务必理解清楚:

 

BCLK 频率 = 采样率 × 采样位深 × 声道数LRCK 频率 = 采样率MCLK 频率 = 采样率 × mclk-fs(通常 256 或 512)

 

举例:48kHz 采样率,16 bit,立体声(2 声道)

 

BCLK = 48000 × 16 × 2 = 1,536,000 Hz = 1.536 MHzLRCK = 48,000 Hz = 48 kHzMCLK = 48000 × 256 = 12,288,000 Hz = 12.288 MHz(假设 mclk-fs = 256)

 

验证方法(Linux 和 Android 通用):

 

cat /sys/kernel/debug/clk/clk_summary | grep -E 'i2s|bclk|lrck|mclk'

 

1.2.3 I2S 标准格式

I2S 协议定义了 3 种标准格式,区别在于数据在帧中的对齐位置

I2S 标准格式(I2S Format)

数据延迟 1 个 BCLK 才开始,LRCK 在 BCLK 边沿同时变化:

Rockchip

图:I2S Normal Mode 时序图 — LRCK 跳变后延迟 1 个 BCLK,数据 MSB 从第 2 个 BCLK 开始

I2S 格式的核心特征

•LRCK 高电平 = 左声道,LRCK 低电平 = 右声道

•LRCK 与 BCLK 边沿同时变化(无延迟)

•SDO 数据在 LRCK 跳变后延迟 1 个 BCLK 才开始

•每个声道传输 N 个 bit(N = 采样位深),不足填充 0

为什么延迟 1 个 BCLK?

因为 LRCK 和 BCLK 同时变化,如果数据也在 LRCK 跳变时立即变化,接收方无法判断数据是新的还是旧的。延迟 1 个 BCLK 后,接收方先在 LRCK 跳变的上升沿确认声道切换,再在下一个 BCLK 上升沿采样第一个数据位。

Left Justified 格式(左对齐)

数据不延迟,从第 1 个 BCLK 就开始:

Rockchip

图:I2S Left Justified Mode 时序图 — LRCK 跳变后数据立即从 MSB 开始,无延迟

Left Justified 的核心特征

•LRCK 高电平 = 左声道,LRCK 低电平 = 右声道

•SDO 数据在 LRCK 跳变后立即开始,无延迟

•高位先传(MSB first)

•如果数据位深 < BCLK 位数,低位填充 0

I2S 与 Left Justified 的区别

特征 I2S Left Justified
数据开始位置 第 2 个 BCLK 第 1 个 BCLK
LRCK 与数据的关系 延迟 1 BCLK 同步
常见用途 标准音频传输 一些 DAC 内部连接

Right Justified 格式(右对齐)

数据的 LSB 对齐帧的末尾,数据在帧中靠后放置:

Rockchip

Right Justified 的核心特征

•LRCK 高电平 = 左声道,LRCK 低电平 = 右声道

•数据的LSB 对齐帧末尾

•如果数据位深 < BCLK 位数,高位填充 0(与 Left Justified 相反)

•不常用,主要用于特定的 DAC 芯片

1.2.4 PCM 格式

PCM(Pulse Code Modulation)格式是 I2S 的变种,主要用于电话语音和蓝牙音频。与 I2S 的区别在于 LRCK 的脉冲特性

PCM-A(DSP-A,Delayed)

LRCK 产生一个 1 BCLK 宽的脉冲,数据延迟 1 个 BCLK 开始:

Rockchip

图:PCM-A (DSP-A) Mode 时序图 — FS 脉冲 1 SCLK 宽,数据延迟 1 SCLK 后开始

PCM-B(DSP-B,No Delay)

LRCK 产生一个 1 BCLK 宽的脉冲,数据立即开始:

Rockchip

图:PCM-B (DSP-B) Mode 时序图 — FS 脉冲后数据立即开始,无延迟

I2S 与 PCM 的区别

特征 I2S PCM-A PCM-B
LRCK 形状 50% 占空比方波 1 BCLK 宽脉冲 1 BCLK 宽脉冲
LRCK 高电平宽度 半个帧(半个声道) 1 个 BCLK 1 个 BCLK
数据开始延迟 1 BCLK 1 BCLK 0 BCLK
典型应用 高保真音频 蓝牙(HFP/HSP) 蓝牙/电话

1.2.5 Master / Slave 模式

Master(主)和 Slave(从)决定了谁产生时钟信号

模式 BCLK 提供方 LRCK 提供方 场景
Master(CPU 为主) CPU DAI CPU DAI 外部 CODEC 不产生时钟,CPU 驱动一切
Slave(CODEC 为主) External CODEC External CODEC CODEC 自带 PLL 生成精确时钟

Rockchip DTS 配置

 

/* CPU DAI 为 Master */simple-audio-card,bitclock-master = <&cpu_dai>;simple-audio-card,frame-master = <&cpu_dai>;/* CODEC 为 Master */simple-audio-card,bitclock-master = <&codec_dai>;simple-audio-card,frame-master = <&codec_dai>;

 

用示波器判断主从

•断开 CODEC,如果 BCLK 和 LRCK 还有信号 → CPU 是 Master

•断开 CODEC,BCLK 和 LRCK 消失 → CODEC 是 Master

1.2.6 MCLK 的重要性

MCLK(Master Clock)不是 I2S 协议的一部分,但几乎所有 CODEC 都需要它:

Rockchip

MCLK 频率与采样率的关系

 

MCLK = 采样率 × mclk-fs常见 mclk-fs 值:  256:最常见,适用于 8k ~ 96kHz  512:高采样率(192kHz)或高精度 CODEC  128:低采样率或低功耗场景  384:特殊 CODEC

 

MCLK 校准

Rockchip 提供 rockchip,mclk-calibrate DTS 属性,开启后会自动根据 LRCK 频率反推 MCLK 需要的频率:

 

&i2s0 {    rockchip,mclk-calibrate;  /* 开启 MCLK 自动校准 */};

 

MCLK 时钟源选择(以 RK3588 为例):

时钟源 精度 适用场景
clk_i2s_src PLL 整数分频 普通应用
clk_i2s_frac PLL 分数分频 高精度音频,44.1kHz 系列
i2s_mclkin 外部时钟 需要精确同步的外部时钟源
xin_osc0_half 晶振直接分频 低延迟、低抖动场景

1.2.7 I2S BCLK-FS 属性

rockchip,bclk-fs 用于强制指定每个采样的 BCLK 位数:

 

&i2s0 {    rockchip,bclk-fs = <64>;  /* 每采样 64 个 BCLK */};

 

何时需要设置 bclk-fs?

当实际传输的位深小于 BCLK 位数时:

•16 bit 音频,但 BCLK 周期为 32 → bclk-fs = 32

•24 bit 音频,但 BCLK 周期为 32 → bclk-fs = 32

如果不设置,驱动会根据位深自动计算,但某些 CODEC 要求特定的 BCLK 位数。

1.2.8 I2S 数据路由

Rockchip 的 I2S 支持将发送/接收数据路由到不同的物理引脚:

 

&i2s0 {    /* TX 路由:SDO3 → SDO2 → SDO1 → SDO0 */    rockchip,i2s-tx-route = <3 2 1 0>;    /* RX 路由:SDI3 → SDI2 → SDI1 → SDI0 */    rockchip,i2s-rx-route = <3 2 1 0>;};

 

这个属性在 PCB 布线与默认路由不匹配时特别有用。

1.3 I2S-TDM 接口详解

1.3.1 什么是 TDM?

TDM(Time Division Multiplexing,时分复用)是在单条数据线上分时传输多个独立声道数据的技术。

I2S vs TDM 的本质区别

Rockchip

为什么需要 TDM?

•一个 I2S 接口传输 8 通道音频(8 路麦克风阵列)

•多个 CODEC 共享一个 I2S 接口

•节省 PCB 引脚和走线

1.3.2 TDM 帧结构

Rockchip

1.3.3 TDM 关键参数

Slot 数量:一帧中有多少个时隙,最多 8 个

 

dai-tdm-slot-num = <8>;    /* 8 个 Slot */

 

Slot 宽度:每个 Slot 占用多少个 BCLK

 

dai-tdm-slot-width = <32>; /* 每个 Slot 32 个 BCLK */

 

有效数据位宽:每个 Slot 中实际传输的音频数据位数(≤ Slot 宽度)

 

Slot 宽度 = 32 bits有效数据  = 24 bits填充      = 8 bits(在 LSB 端或 MSB 端补 0)

 

TDM 移位模式(Rockchip 特有):

模式 描述 适用场景
Normal Slot0 紧跟 FSYNC 标准 TDM
Left Shift 1/2 cycle Slot 向左偏移 1/2 个 BCLK 匹配特定 CODEC 的时序要求
Left Shift 1 cycle Slot 向左偏移 1 个 BCLK 匹配特定 CODEC 的时序要求
Left Shift 2 cycle Slot 向左偏移 2 个 BCLK 匹配特定 CODEC 的时序要求
Right Shift Slot 向右偏移 匹配特定 CODEC 的时序要求

1.3.4 TDM 的 FSYNC 特性

TDM 使用 FSYNC(Frame Sync)信号代替 I2S 的 LRCK:

模式 FSYNC 形状 描述
Half Frame 占帧的 50% 高电平半帧 + 低电平半帧,类似 I2S 的 LRCK
Whole Frame 1 BCLK 宽脉冲 类似 PCM 的脉冲模式
1~7 BCLK 宽 自定义脉冲宽度 灵活适配各种 CODEC

 

&i2s0 {    rockchip,tdm-fsync-half-frame;  /* 使用 half-frame 模式 */};

 

1.3.5 I2S-TDM 的 TX/RX 时钟模式

rockchip,clk-trcm 控制 TDM 模式下 TX 和 RX 的时钟共享方式:

TX 时钟 RX 时钟 说明
0 独立 独立 TX 和 RX 各有独立的 BCLK/LRCK,全双工
1 共享 共享 TX 和 RX 共享 BCLK/LRCK,节省引脚
2 TX 提供 RX 共享 TX TX 产生时钟,RX 用 TX 的时钟
Plaintext
&i2s0 {
    rockchip,clk-trcm = <1>;  /* TX/RX 共享时钟 */
};

1.3.6 TDM 时序图解读

Rockchip

图:TDM Mode 时序图 — 8 个 Slot,每个 32 bit,FSYNC 半帧模式,一帧 = 256 BCLK

用示波器验证 TDM 时序

 

关键检查点:1. FSYNC 频率 = 采样率(与 I2S 的 LRCK 相同)2. 一帧内的 BCLK 数量 = Slot 数量 × Slot 宽度   例:8 Slot × 32 bit = 256 BCLK / 帧3. BCLK 频率 = 采样率 × Slot 数量 × Slot 宽度   例:48kHz × 8 × 32 = 12.288 MHz4. 每个 Slot 内的数据 MSB 是否在正确位置开始

 

1.4 PDM 接口详解

1.4.1 PDM 协议原理

PDM(Pulse Density Modulation,脉冲密度调制)是一种 1-bit 数字音频编码方式,主要用于连接 MEMS 数字麦克风。

PDM 与 I2S 的本质区别

特性 I2S PDM
数据线位宽 多 bit(16/24/32) 1 bit
数据编码 PCM 采样值 脉冲密度(Σ-Δ 调制)
时钟线 BCLK + LRCK PDM_CLK
麦克风类型 模拟 MIC + 外部 ADC 数字 MEMS MIC
传输方向 双向(TX + RX) 仅 RX(麦克风只发送)

PDM 只有 2 根信号线

信号线 功能 方向
PDM_CLK PDM 时钟,由 SoC 提供给麦克风 SoC → MIC
PDM_DATA 1-bit 数据流,由麦克风发送给 SoC MIC → SoC

1.4.2 PDM 工作原理

MEMS 麦克风内部包含:

 

声波 ──► 振膜 ──► 模拟电信号 ──► Σ-Δ 调制器 ──► 1-bit PDM 数据流 ──► PDM_DATA 引脚

 

Σ-Δ(Sigma-Delta)调制器的作用是将模拟信号转换为 1-bit 数字流:

•信号幅度大→ 1 的密度高(脉冲密集)

•信号幅度小→ 0 的密度高(脉冲稀疏)

•静音→ 0 和 1 各占 50%

Rockchip

图:PDM 工作原理 — MEMS 麦克风内部 Σ-Δ 调制器将模拟信号转换为 1-bit 脉冲密度调制数据流

SoC 收到 1-bit PDM 数据流后,通过抽取滤波器(Decimation Filter)将其转换为多 bit PCM 数据:

 

PDM 1-bit 流 ──► 抽取滤波器 ──► 下采样 ──► 多 bit PCM 数据   (1-bit, 高频)                    (16/24-bit, 低频)

 

1.4.3 PDM 通道与数据路径

Rockchip PDM 控制器最多支持 8 个麦克风通道,通过 4 条 SDI 数据路径接收:

Rockchip

数据路径映射

SDI 路径 通道 说明
SDI0 CH0 + CH1 第 1、2 个麦克风
SDI1 CH2 + CH3 第 3、4 个麦克风
SDI2 CH4 + CH5 第 5、6 个麦克风
SDI3 CH6 + CH7 第 7、8 个麦克风

PDM 时钟与采样率的关系

PDM_CLK 支持的采样率
1.024 MHz 8k, 16k, 32k, 64k
1.4112 MHz 11.025k, 22.05k, 44.1k, 88.2k
1.536 MHz 12k, 24k, 48k, 96k
2.048 MHz 8k, 16k, 32k, 64k, 128k
2.8224 MHz 11.025k, 22.05k, 44.1k, 88.2k, 176.4k
3.072 MHz 12k, 24k, 48k, 96k, 192k
4.096 MHz 8k, 16k, 32k, 64k, 128k(高频,高 SNR)
5.6448 MHz 11.025k ~ 176.4k(高频,高 SNR)
6.144 MHz 12k ~ 192k(高频,高 SNR)

高频时钟的好处:更高的 PDM_CLK 意味着更低的时钟抖动影响和更高的信噪比(SNR)。V3 版本 PDM 控制器新增了对 4.096/5.644/6.144 MHz 高频时钟的支持。

1.4.4 PDM Path Map

rockchip,path-map 用于映射 SDI 路径到内部通道:

 

&pdm_8ch {    /* SDI3 → CH0, SDI2 → CH1, SDI1 → CH2, SDI0 → CH3 */    rockchip,path-map = <3 2 1 0>;};

 

当 PCB 上 MIC 引脚与 SoC 的 SDI 引脚连接顺序不一致时,通过 path-map 调整。

1.4.5 PDM 时序图解读

Rockchip

图:PDM 接口时序 — 上方 PDM_CLK 为持续方波,下方 PDM_DATA 为 Sigma-Delta 调制的 1-bit 流,脉冲密度高=音量大,脉冲密度低=音量小

用示波器验证 PDM 时序

 

  关键检查点:  1. PDM_CLK 频率是否在预期值(如 3.072 MHz)  2. PDM_DATA 在 PDM_CLK 的哪个边沿变化  3. 静音时 PDM_DATA 的 0/1 比例是否接近 50%  4. 大音量时 1 的密度是否明显增加

 

1.4.6 PDM 时钟抖动对 SNR 的影响

PDM 时钟抖动(Jitter)会直接影响信噪比(SNR):

PDM_CLK 抖动 SNR 损失
< 1 ns 可忽略
1 ~ 2 ns 1~2 dB
3.8 ns 4~6 dB
> 5 ns > 6 dB,严重影响

降低抖动的方法

•使用分数 PLL(clk_i2s_frac)而非整数 PLL

•选择更高频率的 PDM_CLK(6.144MHz 比 3.072MHz 抗抖动更强)

•PCB 上 PDM_CLK 走线尽量短,远离高速信号

1.4.7 PDM vs I2S DMIC

除了 PDM 接口,Rockchip 也支持通过 I2S 接口连接 DMIC(Digital MIC):

 

  I2S DMIC 方案:  DMIC ──► I2S 接口 ──► 内部 decimation ──► PCM 数据          (BCLK/LRCK/SDO)  PDM 方案:  PDM MIC ──► PDM 接口 ──► 内部 decimation ──► PCM 数据             (PDM_CLK/PDM_DATA)  区别:  - I2S DMIC 使用标准 I2S 协议,兼容性更好  - PDM 使用 1-bit 协议,节省引脚,适合多麦克风阵列

 

1.5 DCODEC(Digital Codec)详解

1.5.1 DCODEC 是什么

DCODEC 是 Rockchip SoC 内部集成的数字音频编解码器,包含:

 

DCODEC 内部结构:  ADC (3 路) ──► 混音器 ──► DAC (2 路) ──► 扬声器/耳机     │                            │  MIC IN (3ch)                 LINE OUT (2ch)                                   │                              DSM 输出(可选)                                   │                              Class-D PA

 

DCODEC 的特点

•无需外部 CODEC 芯片,SoC 内置,节省 BOM 成本

•3 路 ADC(可接 3 个模拟 MIC)+ 2 路 DAC(可接扬声器/耳机)

•支持 PGA(可编程增益)和 ALC(自动电平控制)

•可外接 DSM(数字 sigma-delta 调制器)直接驱动 Class-D 功放

1.5.2 DCODEC 时钟同步模式

rockchip,clk-sync-mode 用于配置 ADC/DAC 的时钟同步方式:

 

&dig_acodec {    rockchip,clk-sync-mode;  /* ADC 与 DAC 共享时钟 */};

 

开启后:ADC 和 DAC 使用相同的时钟源,确保录播同步。
关闭时:ADC 和 DAC 可独立设置时钟,适用于不同采样率的录播场景。

1.5.3 DSM PWM 输出模式

DSM(Digital Sigma-Delta Modulator)可以将 DAC 输出直接通过 PWM 驱动 Class-D 功放,无需外接 DAC 芯片:

 

&dig_acodec {    rockchip,pwm-output-mode;  /* 开启 DSM PWM 输出 */    pinctrl-names = "default";    pinctrl-0 = <&audiopwmoutdiff_pins>;};

 

DSM PWM 输出链路

Rockchip

这种方式适合低成本的便携设备,但音质低于外接 CODEC 方案。

1.6 VAD(Voice Activity Detection)详解

1.6.1 VAD 是什么

VAD(语音活动检测)是一种硬件加速的语音唤醒方案,核心功能是:

 

  MIC 音频 ──► VAD 硬件模块                   │                   ├──► 持续监听语音幅度                   ├──► 检测到语音 → 触发中断唤醒 CPU                   └──► 未检测到语音 → CPU 保持休眠

 

VAD 与传统软件方案的区别

特性 软件 VAD 硬件 VAD
CPU 功耗 需持续运行,耗电 CPU 可休眠,VAD 硬件独立工作
响应延迟 取决于 CPU 调度 硬件实时检测,延迟低
实现复杂度 需要 ASR 算法 硬件内置,配置即可

1.6.2 VAD 数据流

 

 PDM/I2S MIC ──► DAI FIFO ──► VAD 模块 ──► SRAM/DDR 缓冲区                                     │                                     ├──► 语音检测                                     │     │                                     │     ├──► 有语音 ──► 中断 ──► CPU 唤醒                                     │     └──► 无语音 ──► 继续监听                                     │                                     └──► 唤醒后数据可用

 

1.6.3 VAD 工作模式

rockchip,mode 控制 VAD 的工作模式:

模式 描述
0 关闭 VAD 不工作
1 SRAM 模式 数据存到 SRAM,唤醒后再搬运到 DDR(低功耗)
2 DDR 模式 数据直接存到 DDR(DMA 模式)

 

&vad {    rockchip,mode = <1>;  /* SRAM 低功耗模式 */};

 

1.6.4 VAD DTS 配置详解

 

&vad {    status = "okay";    rockchip,audio-src = <&pdm_8ch>;    /* VAD 的数据源 */    rockchip,det-channel = <2>;         /* 检测第 2 个通道 */    rockchip,mode = <1>;                /* SRAM 模式 */    rockchip,buffer-time-ms = <100>;    /* 缓存 100ms 数据 */};

 

各参数详解

•audio-src:指定 VAD 监听哪个 DAI(PDM / I2S),VAD 不直接连 MIC,而是从 DAI 的 FIFO 中取数据

•det-channel:指定检测哪个声道(0 = 所有通道,2 = 第 2 通道)

•buffer-time-ms:预缓存时间,单位毫秒。例如 100ms @ 16kHz / 16bit / 8ch = 204800 bytes

1.7 SPDIF 接口详解

1.7.1 SPDIF 协议原理

SPDIF(Sony/Philips Digital Interface Format)是一种数字音频传输协议,用于设备间的数字音频传输,无需 DAC/ADC 转换。

SPDIF 的特点

•仅 1 根信号线(同轴电缆或光纤)

•传输的是编码后的数字音频帧(不是原始 PCM)

•支持 2 声道 LPCM(16/20/24 bit)

•支持压缩音频(Dolby Digital, DTS)

•使用BMC(Biphase Mark Code)编码:每个 bit 用 2 个时钟周期表示

1.7.2 SPDIF TX vs SPDIF RX

特性 SPDIF TX SPDIF RX
方向 SoC 发送 → 外部设备 外部设备→ SoC 接收
用途 连接功放/AV 接收器/光纤输出 接收电视/机顶盒的光纤输入
Rockchip 支持 多数芯片 RK3308, RK3576, RK3588

1.7.3 SPDIF 帧结构

Rockchip

1.7.4 SPDIF 时序解读

Rockchip

1.7.5 SPDIF 传输格式

格式 描述 位深
LPCM 线性 PCM(未压缩立体声) 16/20/24 bits
Non-linear PCM 非压缩多声道(IEC61937) 16/24 bits
DD Dolby Digital(5.1 声道) 压缩
DD+ Dolby Digital Plus 压缩

1.7.6 SPDIF 调试

 

# 检查 SPDIF 时钟cat /sys/kernel/debug/clk/clk_summary | grep spdif# 检查 SPDIF 寄存器cat /sys/kernel/debug/regmap/0xfe4b0000/registers  # RK3588 SPDIF_TX0# 测试播放(输出到光纤/同轴)aplay -D hw:0,1 -f S16_LE -r 48000 -c 2 test.wav

 

1.8 各 DAI 接口对比总结

特性 I2S I2S-TDM PDM DCODEC VAD SPDIF
信号线数 3+MCLK 3+MCLK 2 内置 1
最大通道数 2 8 8 3ADC+2DAC 8 2
位深 16-32 bit 16-32 bit 16-24 bit 16 bit 16-24 bit 16-24 bit
采样率 8k-192k 8k-192k 8k-192k 8k-48k 8k-48k 32k-192k
传输方向 TX+RX TX+RX RX only TX+RX RX only TX/RX
典型应用 通用音频 多通道音频 MIC 阵列 低成本音频 语音唤醒 数字音频传输
芯片支持 全部 大部分 大部分 部分 RK3308/RK3588 大部分

1.9 小结

本部分详细讲解了 Rockchip 平台支持的 6 种 DAI 接口:

I2S:最通用的 2 声道音频接口,支持 I2S/Left Justified/Right Justified 三种格式和 PCM-A/PCM-B 两种 PCM 格式

I2S-TDM:I2S 的扩展,通过时分复用支持最多 8 通道,关键在于 Slot 数量和 FSYNC 配置

PDM:专为数字麦克风设计的 1-bit 接口,关键是 PDM 时钟频率选择和时钟抖动控制

DCODEC:SoC 内置数字编解码器,适合低成本方案,支持 DSM PWM 直接驱动 PA

VAD:硬件语音活动检测,关键是 SRAM 低功耗模式和预缓存配置

SPDIF:数字音频传输协议,支持 LPCM 和压缩音频,关键是 BMC 编码理解

阅读时序图的核心方法:先找时钟信号(BCLK/LRCK)作为标尺,确认数据采样边沿,数出帧结构和数据对齐位置,最后对照标准格式验证。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分