Rockchip平台数字音频接口(DAI)全维度解析与调试指南 电子说
数字音频接口(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(帧时钟/声道时钟)这两条线。它们是"标尺",所有数据信号都参照时钟来解读。

图: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 边沿同时变化:

图: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 就开始:

图: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 对齐帧的末尾,数据在帧中靠后放置:

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 开始:

图:PCM-A (DSP-A) Mode 时序图 — FS 脉冲 1 SCLK 宽,数据延迟 1 SCLK 后开始
PCM-B(DSP-B,No Delay)
LRCK 产生一个 1 BCLK 宽的脉冲,数据立即开始:

图: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 都需要它:

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 的本质区别:

为什么需要 TDM?
•一个 I2S 接口传输 8 通道音频(8 路麦克风阵列)
•多个 CODEC 共享一个 I2S 接口
•节省 PCB 引脚和走线
1.3.2 TDM 帧结构

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 时序图解读

图: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%

图: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 数据路径接收:

数据路径映射:
| 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 时序图解读

图: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 输出链路:

这种方式适合低成本的便携设备,但音质低于外接 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 帧结构

1.7.4 SPDIF 时序解读

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)作为标尺,确认数据采样边沿,数出帧结构和数据对齐位置,最后对照标准格式验证。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !