Skip to content

LV020-PCM接口简介 ​

一、概述 ​

先吐槽一下???其实这里整的挺懵的,PCM、I2S、TDM,不同的芯片手册又是支持多种接口,不同的概念在不同的手册中交织,网上的资料也是给人整迷糊。一会是 PCM/TDM 的,一会又是 DSP/PCM 的,尽可能理解吧,这里 不保证完全正确,后续发现有误一定要注意更新。

1. PCM 简介 ​

PCM (Pulse Code Modulation) 脉冲编码调制是将模拟信号数字化的方法。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程(抽样、量化、编码三个过程)。下图为 4 bit 采样深度的 PCM 数据量化示意图。

img

而这个 PCM,也可以指一种 数字音频接口,即说明接口上传输的音频数据通过 PCM 方式采样得到的。在音频领域,PCM 接口常用于板级音频数字信号的传输,与 I2S 相似。PCM 和 I2S 的区别于数据相对于帧时钟(FSYNC/WS)的位置、时钟的极性和帧的长度。其实,I2S 上传输的也是 PCM 类型的数据,因此可以说 I2S 不过是 PCM 接口的特例。

相比于 I2S 接口,PCM 接口应用更加灵活。通过时分复用(TDM, Time Division Multiplexing)方式,PCM 接口支持同时传输多达 N 个(N > 8)声道的数据,减少了管脚数目(实际上是减少 I2S 的“组”数,因为每组 I2S 只能传输两声道数据嘛)。TDM 不像 I2S 有统一的标准,不同的 IC 厂商在应用 TDM 时可能略有差异,这些差异表现在时钟的极性、声道配置的触发条件和对闲置声道的处理等。

Tips:PCM 采用时分复用的方式,就是 TDM。

2. TDM 简介 ​

最开始出现的 I2S 只能传输左右两通道的数据,后来为了传输多通道数据,出现了 I2S 的变体,即应用了 TDM(时分复用)模式。协议时序与旧版 I2S 类似,但是出现了 slot(槽)的概念。slot 是指某个通道的一帧数据,数据传输示意图如下:

image-20251222203537891

如上图,TDM 数据传输示意图。 每个音频信号都被分配一个固定的 slot(时间槽),这些 slot 按顺序排列组成一个帧。每个 slot 的长度相等且固定,可以容纳一个音频信号的数据。通过按照事先约定的顺序轮流填充每个 slot,多个音频信号的数据被交错传输。

在发送端,音频 TDM 协议将多个音频信号的样本值分别放置在对应的 slot 中。在接收端,协议按照相同的顺序将 slot 的数据取出,并重新还原成原始的音频信号。通过这种方式,多个音频信号可以同时传输在同一个信道上,实现了信道资源的高效利用。

注意:上面提到的 slot 与音频的声道没有直接的对应关系,跟实际芯片平台和 Codec 定义有关,不能简单的讲 slot1 理解位音频数据的第一个声道。例如假设 slot1 的长度位 32bit 时,slot1 可以传输两路 16 位的音频数据。这种灵活性允许在不同的 TDM 实现中,根据具体的需求和约定来确定时间槽的长度以及每个时间槽所承载的音频信号的格式。

很多资料把这个单拎出来成为一个属于 I2S 或者 PCM 的概念,但这样造成了混淆,我们只要理解 TDM 模式可以传输多通道数据即可。

二、PCM 接口 ​

PCM 接口一般在手册中描述,与 I2S 的区别就是时序图的区别。具体要看芯片手册的定义。我们在这单拿出来让 PCM mode 成为一个接口概念,当然我们也可以认为它就是 I2S 的一个特例。有些地方会叫 TDM/PCM,有些地方会叫 DSP/PCM。

1. 信号定义 ​

很多资料中将 PCM 接口定义为(PCM-clock、PCM-sync、PCM-in、PCM-out),这可能与 I2S 的接口是对应的,之所以有这种定义可能是历史原因。

PCM 信号线 说明 与 I2S 接口对应情况
PCM_CLK 数据时钟信号 SCK
PCM_SYNC 帧同步时钟信号 WS
PCM_IN 接收数据信号 SD_IN
PCM_OUT 发送数据信号 SD_OUT

2. 时序 ​

我们可以看一下 WM8960_DS 的芯片手册,里面有一个 DSP/PCM Mode。根据 SD 相对帧同步时钟 FSYNC 的位置,TDM 分 两种 基本模式:

  • Mode A: 数据在 FSYNC 有效后,BCLK 的第 2 个上升沿有效(one clock delay)
imgimg
  • Mode B: 数据在 FSYNC 有效后,BCLK 的第 1 个上升沿有效(no delay)
imgimg

Tips:

(1)也可以看 AN12202,这个芯片手册就神奇了,PCM、TDM、DSP 分别位于不同的小章节下,哎,反正用的哪款芯片就看他们自己的芯片手册吧。

(2)由于没有统一标准,不同厂商对 Mode A 和 Mode B 定义可能有所差别,一切都以芯片手册为准。

3. 长短帧同步 ​

在实际应用中,总是以帧同步时钟 FSYNC 的上升沿表示一次传输的开始。帧同步时钟的频率总是等于音频的采样率,比如 44.1 kHz,48 kHz 等。多数应用只用到 FSYNC 的上升沿,而忽略其下降沿。根据不同应用 FSYNC 脉冲宽度的差别,PCM 帧同步时钟模式大致分为两种:

  • 长帧同步 Long Frame Sync
  • 短帧同步 Short Frame Sync

关于长短帧同步、MSB/LSB 和量化深度的区别,对应的 PCM 时序模式,可以参考 CSR BC06 工具:pcmconfigv2_1 ,通过这个工具很容易理解这些变量的含义。

3.1 长帧同步 ​

长帧同步,如左图所示,FSYNC 脉冲宽度等于 1 个 Slot 的长度。Slot 在 TDM 中表示的是传输单个声道所占用的位数。

imgimg
长帧同步时序图 一个 8-bit 长帧同步模式示例

右是一个 8bit 长帧同步模式的时序图,图中中是的 TI McASP 接口,这个接口的 TDM 包括 6 个 Slots,即它最多可包括 6 声道数据。

注意,Slot 的位数并不一定等于音频的量化深度。比如 Slot 可能为 32 bit,其中包括 24 bit 有效数据位(Audio Word) + 8 bit 零填充(Zero Padding)。不同厂商对 Slot 的叫法可能有所区别,比如 Circus Logic 称之为 Channel Block。

Tips:TI McASP 在 AM275x 音频系统设计指南 有介绍

3.2 短帧同步 ​

短帧同步,FSYNC 脉冲宽度等于 1 个 BCLK 周期长度。如下图,这是一个 16-bit 短帧同步模式:

img

4. 模式设置 ​

虽然上面说了一堆模式,看似是不同的维度没啥关系的定义,但观察 codec 文档就会发现,从 code 芯片的角度,上面的模式都在一个维度讨论,就是时序图(数据传输格式)不同。

比如 WM8960_DS 芯片:芯片手册说支持下面几种数据传输格式:左对齐,右对齐,I2S 格式,DSP/PCM mode 具体去看时序图。再比如 AK4458 芯片:芯片手册说我支持 PCM 模式 和 DSD 模式,其中 PCM 模式又分为 25 种数据传输格式,这 25 种数据归类为 Normal mode, TDM128 Mode, TDM512 Mode,具体也去看我的时序图。

5. 时钟频率 ​

FSYNC 的频率等于音频的采样率(例如 44.1 kHz,48 kHz 等)。Frame 每次传输包括所有声道的数据。PCM 采样音频数据量化深度一般在 16-32bit(最常见为 16/24bit)。那么对于 8 声道,每个声道 32bit 音频数据,采样率 48kHz 的系统,TDM 的系统时钟速率为:8 × 32 × 48kHz = 12.288 MHz

在器件 Datasheet 中可以见到 TDM128/TDM256/TDM 384/TDM512 等说法,数字的含义为单个 TDM 数据帧包含数据的比特数(即帧长)。如上例 8 声道(Channels)32bit 的音频数据,亦称为 TDM256(= 8x32)。TDM 系统时钟速率就可以简单地用采样率乘以 TDM 帧长计算得出。相同的例子,TDM 系统时钟速率:48kHz × 256 = 12.288 MHz

下表列出系统时钟 SCK/BCLK 和采样率 fs 及 TDM 帧长的关系:

img

参考资料:

数字音频接口(I2S, PCM/TDM, PDM)_pdm 接口-CSDN 博客

音频常用协议说明 IIS TDM PDM PCM SPDIF 协议解析_pdm 协议-CSDN 博客

I2S 和 TDM 模式详解 - Dazz_24 - 博客园

音频信号类型及协议基础知识 - sheldon_blogs - 博客园