1. I2S协议基础:从飞利浦标准到TDM模式

各位同学,咱们今天聊聊I2S协议。说实话,我刚开始接触音频驱动时,也被这些时序图搞得头晕。但搞懂了I2S,后面PCM、TDM这些就一通百通了。

1.1 I2S总线标准——三条线搞定音频传输

I2S全称是Inter-IC Sound,飞利浦公司在1986年推出的。说白了,它就是用来在芯片之间传数字音频的。

标准I2S总线只需要三根线:

信号线 名称 作用
SCK 串行时钟 也叫位时钟(BCLK),每个脉冲对应一个数据位
WS 字选择 也叫帧时钟(LRCK),区分左/右声道
SD 串行数据 传输PCM音频数据

嗯,这里要注意:WS信号高电平通常代表左声道,低电平代表右声道。但有些芯片厂商会反过来,我就在一个项目中踩过这个坑——调了半天不出声,结果发现是WS极性反了。

1.2 飞利浦I2S协议——标准时序长什么样

飞利浦I2S协议有几个关键特征:

  • 数据在SCK的上升沿锁存——发送端在下降沿更新数据,接收端在上升沿采样
  • WS变化发生在SCK下降沿——比数据提前一个时钟周期
  • 数据从MSB开始传输——最高有效位先发
  • 数据位宽可配置——16位、24位、32位都常见

核心公式:

BCLK频率 = 采样率 × 位宽 × 声道数

例如:44.1kHz × 16bit × 2ch = 1.4112 MHz

我个人习惯用这个公式快速估算时钟频率。调试时拿示波器一量BCLK,就知道配置对不对。

1.3 左对齐与右对齐格式——别搞混了

除了飞利浦标准,还有两种常见格式:

格式 数据起始位置 与WS的关系
飞利浦I2S WS变化后延迟1个BCLK 数据比WS晚一拍
左对齐 WS变化后立即开始 MSB与WS边沿对齐
右对齐 数据靠右对齐 LSB在WS边沿前结束

我曾经在对接一颗DAC芯片时,数据手册写的是"Left Justified",我按飞利浦模式配的,结果出来的声音全是噪声。后来仔细看时序图才发现,左对齐模式下数据不延迟那一个BCLK周期。

避坑指南:很多CODEC芯片支持多种格式,但默认配置可能不同。上电后先读寄存器确认当前格式,别想当然。

1.4 PCM接口——不只是I2S的别名

很多人把PCM接口和I2S混为一谈。其实PCM接口更灵活:

  • 帧同步信号——可以是脉冲方式,不一定是50%占空比
  • 时隙可配置——每个声道占用的BCLK数量可调
  • 支持多声道——通过时分复用实现

我举个例子:标准的I2S是2声道,但PCM接口可以扩展到8声道甚至更多。这在车载音频系统中很常见——一个PCM接口同时传左前、右前、左后、右后四个声道。

1.5 TDM模式——多声道音频的利器

TDM(时分复用)是PCM接口的进阶玩法。它的核心思想是:在一根数据线上,按时间片轮流传输多个声道的数据。

TDM的关键参数:

  1. 帧长度——一个完整帧包含多少个BCLK周期
  2. 时隙数——每个帧分成几个时隙
  3. 时隙宽度——每个时隙占几个BCLK

实战经验:调试TDM时,我习惯先配成2声道模式验证基本通路,确认没问题后再扩展到多声道。这样排查问题快很多。

下面这张图展示了I2S、左对齐、TDM三种模式的时序差异:

I2S / 左对齐 / TDM 时序对比 BCLK WS/LRCK SD 飞利浦I2S WS变化在BCLK下降沿 数据延迟1个BCLK后开始 左对齐 WS变化后立即开始传数据 MSB与WS边沿对齐 TDM (4声道示例) 帧同步脉冲 Slot 0 Slot 1 Slot 2 Slot 3 TDM模式下,一个帧周期内依次传输多个声道的PCM数据

1.6 实际调试中的常见问题

我总结了几条实战经验,希望对你有帮助:

  • 时钟极性搞反——有些芯片用BCLK上升沿锁存数据,有些用下降沿。先看数据手册的时序图
  • 位宽不匹配——发送端发24位数据,接收端按16位解析,声音会变调
  • 帧同步信号宽度不对——TDM模式下尤其容易出这个问题

调试小技巧:用逻辑分析仪抓取BCLK、WS和SD三根线的波形,对照数据手册的时序图逐位检查。我每次调I2S都是这么干的,基本半小时内能定位问题。

好了,I2S协议基础就讲到这里。搞懂了这些概念,后面咱们写驱动时就知道寄存器该怎么配了。