I2S、PCM/TDM 与 PDM:数字音频在芯片之间怎么传
更新时间:2026-09-24。本文是「集成电路大类 · 芯片设计」**入门层(beginner)**数字逻辑基础的一篇。手机录音、蓝牙音箱、智能音箱拾音,背后都在做同一件事:把声音变成一串按时钟节拍流动的采样样本,再在芯片和芯片之间搬来搬去。承担搬运的就是 I2S、PCM/TDM、PDM 这三类接口。它们不复杂,硬件骨架仍然是移位寄存器加时钟,这一篇把三者的线序、时序和典型接法讲清楚。
本文要回答的问题
- 声音在数字世界里到底是什么?采样率 48kHz、位宽 24bit 意味着每秒要传多少 bit?
- I2S 三根线 SCK、WS、SD 各传什么?位时钟频率和采样率、位宽之间是什么关系?
- WS 的高低电平怎么区分左右声道?标准 I2S 为什么让数据故意晚一个位时钟?
- 主模式和从模式差在哪?MCLK 是干什么的,为什么常取 256fs?
- PCM/TDM 怎么用一根数据线传十几个声道?时隙(slot)怎么划分、多个器件怎么不打架?
- PDM 麦克风为什么只发 1bit?那串「全是 0 和 1」的高速流怎么变回能听的声音?
一、先有样本,才有接口:数字声音长什么样
麦克风振膜感受到的声压是随时间连续变化的模拟量,芯片处理不了连续量,必须先做两件事:按固定时间间隔测量(采样)和把测量结果取整成整数(量化)。每秒测量的次数叫采样率 fs,常用 44.1kHz(CD 时代沿用,据说与早期 U-matic 录像带的行数有关)、48kHz(视频与消费电子主流)、16kHz(语音通话);每次测量用多少 bit 表示叫位宽,常用 16bit、24bit、32bit。一路声音于是变成「每秒 fs 个、每个 N bit」的整数序列,这就是 PCM(脉冲编码调制)——数字音频接口搬运的货物,本质上全是 PCM 样本。
采样率不是随便选的。按照奈奎斯特定理,采样率必须高于信号最高频率的两倍,否则高频成分会折叠成低频杂音(混叠)。人耳上限约 20kHz,所以 44.1kHz 刚好够用,工程上留余量取 48kHz,录音端还会先加模拟抗混叠滤波器把带外信号压下去。量化也有代价:16bit 只有 65536 个台阶,取整误差就是量化噪声;位宽越大台阶越细、动态范围越大,24bit 的理论动态范围约 144dB,远好过 16bit 的约 96dB。工程上幅度用 dBFS(满刻度分贝)表示,最大不失真样本记 0dBFS,正常音乐平均在 −20dBFS 上下。
立体声的 PCM 是左右两路独立样本交替排列的序列:L0、R0、L1、R1……在存储器里交织存放,但在时间上属于同一个采样时刻。先算一笔账,后面所有时序都从这笔账推出来:48kHz、24bit 的单声道每秒产生 48000×24 = 1.152Mbit,立体声翻倍到 2.304Mbit。接口要做的,就是提供一个不低于这个速率的串行通道,并且让收发双方知道「现在这一串 bit 属于哪个样本、哪个声道」。I2S 给出的答案是三根线。
一个常见疑问:24bit 的样本为什么常常放在 32bit 的时隙里传?这不是浪费,而是工程折中。32 是 2 的幂,移位计数和内存对齐都更规整;48kHz、32bit 帧宽时 BCLK = 3.072MHz,恰好是 12.288MHz 的四分频,时钟树更好接;多余的 8bit 在接收端直接忽略即可。看寄存器配置时若发现「24bit 数据、32bit 帧宽」,说的就是这件事。
二、I2S:三根线与一帧时序
I2S(Inter-IC Sound) 是飞利浦在 1980 年代定义、专为两颗芯片之间传立体声 PCM 设计的接口,三条核心信号:
| 信号 | 别名 | 作用 | 频率 |
|---|---|---|---|
| SCK | BCLK | 位时钟,每移位 1bit 一个脉冲 | fs × 位宽 × 2 |
| WS | LRCK、FS | 字时钟,高低电平区分左右声道 | 正好等于 fs |
| SD | DATA、SDATA | 串行数据,样本从高位 MSB 先发 | 随 SCK |
代入数字:48kHz、24bit 立体声,BCLK = 48k × 24 × 2 = 2.304MHz;WS 频率就是 48kHz,WS=0(低电平)期间传左声道的 24 个 bit,WS=1(高电平)期间传右声道。SD 上的样本以二进制补码表示、MSB 先发,发送端用并入串出移位寄存器把并行样本逐位推出,接收端用串入并出移位寄存器攒齐 24bit(串并转换的具体做法见移位寄存器)。
理解时序的最好方式,是把「一帧」(WS 的一个完整周期,时长 1/fs)画成一条被 SCK 切成小格的带子:
图的上半行是 I2S:一帧只有两个大格,低电平格子装左声道、高电平格子装右声道,每格 N 个 SCK 脉冲移位 N bit。对照此图看频率公式就很直白:一帧要装下「声道数 × 每声道 bit 数」个 bit,帧每秒重复 fs 次,所以 BCLK = fs × 每帧总 bit 数。
标准 I2S 有个看似奇怪、实则贴心的规定:数据的 MSB 不在 WS 翻转的那个 SCK 沿出现,而是在翻转之后的第二个 SCK 才上线——数据比声道切换晚整整 1 个位时钟。这样接收端先看到 WS 变化、有一个完整 SCK 周期判断「接下来是左还是右」,再锁存数据,避免 WS 和第一位数据同时变化时的竞争。电气上 I2S 没有统一物理层,常见 3.3V/1.8V CMOS 推挽电平,约定 SCK 在哪个边沿采样数据也要双方一致。
对接时还会遇到两个近亲变体:左对齐(LJ) 让 MSB 紧跟 WS 翻转、不晚那 1bit;右对齐(RJ) 让样本的 LSB 对齐帧尾。三者波形骨架相同,只是样本在帧里的横向位置不同,配置不一致时往往不报错,只是声道错位或音量怪异,排查起来很费时间。另外在没有有效样本的空闲时段,SD 通常被强制为 0 而非悬空,避免接收端把总线上的毛刺误当成样本;单声道设备也会照常输出完整左右两帧,只是不用的那一帧填 0,这让同一控制器可以兼容单声道和立体声器件。
三、主从模式与 MCLK:谁产生节拍
总线上的时钟必须有一个来源。产生 SCK 和 WS 的一方叫主设备(master),另一方叫从设备(slave)。最常见的接法是 SoC/MCU 做主、音频编解码器(codec)做从:SoC 按自己的播放节奏推出时钟,codec 跟着时钟吐出或吃进样本;录音场景也可以让 codec 做主、SoC 做从,使采样节奏完全由 codec 板上的高精度晶振决定。谁供时钟,时钟树就怎么接,这属于时钟与复位设计的一部分。播放时选 SoC 做主还有个好处:DMA 取数的节奏就是时钟节奏,缓冲区好算;录音时若 USB 等外部模块按自己的时钟喂数,则让外部做主更不容易溢出。
除三根必备线外,很多 codec 还要求第四根:MCLK(主时钟)。它是给 codec 内部 ΣΔ 调制器、数字滤波器和模拟部分用的高频参考,常见频率是 256fs 或 384fs:48kHz × 256 = 12.288MHz。注意 12.288MHz 同时是 BCLK(2.304MHz)的整数倍、是 fs 的 256 倍——整数倍关系意味着所有音频时钟都能从同一个根频率干净分频得到。根时钟通常由 SoC 里专门的音频 PLL 倍频产生。为什么如此较真?时钟一旦和 fs 不是整数比,分频就会产生周期性快慢抖动,频谱上表现为落在音频带内的杂散,最后变成喇叭里的嘶嘶声;时钟边沿的随机抖动(jitter)过大则会直接污染采样时刻,让信噪比下降。整数分频与时钟使能的硬件做法可回顾二进制分频与时钟使能。
四、PCM/TDM:一根数据线上分时塞十几个声道
I2S 一根 SD 只能传左右两个声道。手机要接多颗降噪麦克风、车载音响要推十几个喇叭,不能每路都铺三根线。PCM/TDM(时分复用,Time Division Multiplexing) 解决这个问题:信号仍是 SCK 加帧同步 FS(作用等同 WS,频率等于 fs)加数据线,但一个 FS 周期被划分成 N 个固定时隙,slot0、slot1……slotN−1 各放一路声道的样本。图的下半行就是 TDM:同样长的一帧被切成更多等宽小格。
多个器件挂同一根数据线为什么不冲突?靠三态总线:每个发送器件对 SCK 计数,只在本 slot 的 N 个 bit 期间使能输出、驱动电平,其余时间输出高阻让出总线。接收端同样按 slot 位置分捡——落在 slot3 的样本就是第 3 路麦克风,不需要任何地址信息。常见配置为每帧 4/8/16 个 slot、每 slot 16 或 32bit,于是一条 TDM 总线(含独立收发 DIN/DOUT 也才五根线)就能传 8 到 16 路声道,管脚和布线都大幅节省。手机基带和智能音箱的麦克风阵列几乎都这样汇聚。再算一次 BCLK:8 slot、每 slot 32bit、48kHz,每帧 256bit,BCLK = 48k × 256 = 12.288MHz——和前面的 MCLK 数字重合,这不是巧合,整条时钟树本来就按同一组数字设计。
TDM 的设计要点全在「对齐」:FS 脉冲是 1 个 SCK 宽(短帧同步)还是占一个 slot(长帧同步)、slot0 紧跟 FS 还是晚若干 bit、slot 内数据左对齐还是右对齐,各家组合不同。逻辑上实现它只需要一个按 FS 复位、按 SCK 自增的 slot 计数器加位计数器,再把计数区间译码成本器件的输出使能;配错参数的典型症状是相邻声道轻微串音,而不是彻底没声。
五、PDM:MEMS 麦克风的 1bit 高密度流
最近十年的麦克风越做越小,手机里的 MEMS 麦克风(微机电硅麦)干脆不输出多位 PCM,而是输出 PDM(脉冲密度调制):外部供一条 CLK(常见 1~3MHz)和一条 DATA,麦克风每个时钟沿给出 1bit。单个 bit 表示不了声音,PDM 用一段时间内 1 出现的密度:正半周时流里 1 多、0 少,负半周反过来,零点附近则 0 和 1 快速交替。它背后的 ΣΔ(Sigma-Delta)调制属于模拟混合信号话题,入门阶段记住一句话:以几百倍过采样换位宽,再用噪声整形把量化误差推到人耳听不到的高频。
这张图是 PDM 链路的全貌。3.072MHz 的 1bit 流不能直接听,接收端(SoC 内的 PDM 控制器或专用 DSP)做两级处理:先用 CIC(积分-梳状)滤波器抽取——它只有加法和延迟、不用乘法,适合直接对高速流降速 64 倍;再用 FIR 做补偿低通,把被噪声整形推到高频的量化噪声滤干净,输出才变成 48kHz、24bit PCM。多级滤波会引入几十到上百个样本的群延时,在回声消除、波束成形等多麦算法里要把这个延时和各通道一致性算进去。定点数和滤波系数在定点运算与数字滤波展开。
PDM 麦克风的数据手册还会给出几个入门必读指标:信噪比(SNR)典型在 64dB 上下,声学过载点(AOP)约 120~130dB SPL,决定了它在演唱会、鸣笛等强声压下是否先失真;灵敏度以 −26dBFS/Pa 一类数字给出,指标准声压下样本离满刻度多远。许多麦克风还支持省电模式:主控停掉 CLK 后器件自动进入微安级休眠,重新供时钟要等若干毫秒唤醒,所以间歇录音的调度要把这个启动时间留出来。
PDM 的工程优势很实际:模拟电路全封在麦克风里,线上跑不怕干扰的数字信号,两根线即可;一条 CLK 还可用「上升沿驱动一颗、下降沿驱动另一颗」的方式挂两颗麦克风,在同一条 DATA 上奇偶交替得到左右两路,手机双麦布线上常见这种接法。代价是把 ΣΔ 调制和 CIC 抽取的复杂度转嫁给麦克风和接收端。它和 PWM 与 D 类功放都用二电平编码模拟量,但 PWM 固定频率改变脉宽、没有噪声整形,PDM 过采样改变脉冲密度并带噪声整形,后者音频带内信噪比高得多。
六、三类接口的定位与音频链路设计注意
| 接口 | 信号线 | 声道数 | 数据形态 | 典型场景 |
|---|---|---|---|---|
| I2S | SCK / WS / SD(可选 MCLK) | 立体声 | 多位 PCM | SoC 与 codec、智能功放 |
| PCM/TDM | SCK / FS / DIN / DOUT | 4~16+ | 多位 PCM 分 slot | 手机语音、车载多声道 |
| PDM | CLK / DATA | 1~2 | 1bit 过采样流 | 数字 MEMS 麦克风 |
| SerDes | 差分对,极少 | 不区分 | 嵌入式时钟高速串行 | 板级、背板高速链路 |
选型上可以这样判断:板上只有一颗 codec 传立体声,用 I2S 最简单;器件分散、声道超过两个且都能接受同一时钟,用 TDM 省线;麦克风到主控的距离稍长、又想把模拟部分锁死在器件内,选 PDM。音频是「速率中等、但对时钟质量极端敏感」的业务,实际链路还有三个常见设计点:第一,BCLK 和 MCLK 都从干净的音频 PLL 整数分频得到,避免带内杂散;第二,音频时钟域与系统总线时钟域不同源,跨域传递样本要用异步 FIFO,FIFO 溢出或读空都会导致样本丢失或重复;第三,下游缓冲用 valid-ready 握手反压,保证一个样本都不丢。人耳对时间断续极其敏感,只丢一个样本就是清晰可闻的「咔哒」爆音——系统冷启动时 DMA 尚未准备好却先放了时钟,是爆音最常见的来源,因此上电顺序通常是先配好 codec、备好 DMA,最后再使能位时钟。
还有一个播放场景特有的问题:时钟来源不一致。USB 声卡按 USB 总线的 1ms 节奏送数,本地 codec 按自己的晶振放音,两边名义上都是 48kHz,实际总有几十 ppm(百万分之几十)的偏差,跑上几分钟就会差出若干样本,FIFO 终将读空或溢出。解决办法不是反复丢样本,而是做异步样本率转换(ASRC),用重采样把一路流平滑地拉到另一路的时钟上;高端 codec 会内置 ASRC 硬件,软件只需把两边的实时时钟比率喂给它。
这一篇在知识体系里的位置
本篇属于芯片设计入门层的接口与数字逻辑专题,回答「采样后的声音样本怎样在芯片之间流动」。向数字基础读,I2S/TDM 的收发电路就是移位寄存器串并转换加三态总线,帧计数器来自分频与时钟使能;向混合信号读,PDM 的 ΣΔ 调制与 PWM 同属用二电平表达模拟量,见模拟混合信号基础和 PWM 与 D 类功放;向工程实现读,音频时钟接 PLL,跨域用异步 FIFO、传输用 valid-ready 握手,更高速的通用串行链路则进入 SerDes 与 8b/10b。
总结
数字音频接口搬的全是 PCM 样本:I2S 用位时钟 SCK(频率=采样率×位宽×声道数)、字时钟 WS(频率等于采样率,高低电平区分左右声道)和串行数据 SD(MSB 先发)三根线传立体声,标准 I2S 让数据比 WS 翻转晚一个 SCK 以避开握手竞争,产生时钟的一方为主设备,MCLK 是 256/384fs 的 codec 高频参考、由音频 PLL 整数倍频以免带内杂散;要在一根数据线上汇聚更多声道就用 PCM/TDM,把帧同步周期切成固定时隙、各器件只在自己的 slot 用三态驱动总线,一条线可传 8 到 16 路;数字 MEMS 麦克风则输出 PDM——在 1~3MHz 时钟下每拍 1bit、用脉冲密度表示幅度,经数百倍过采样和噪声整形后,接收端必须用 CIC 抽取加 FIR 低通把它降成普通多位 PCM;整条音频链路怕时钟杂散、怕丢样本,跨时钟域靠异步 FIFO、传输靠 valid-ready 反压,因为丢掉一个样本就是人耳立刻能听到的爆音。