I2S 音频总线:数字音频怎么传
想做个语音助手,让单片机听见说话、再开口回应。第一个绕不过的问题是:声音怎么进到芯片里?麦克风采到的是空气振动,最终要变成芯片能读的一串数字。负责搬运这串数字的,多数情况下就是 I2S 总线。
I2S 是专传音频的总线(和 I2C 无关)
名字长得像,作用完全两码事。I2C 是慢速控制总线,传几个寄存器配置、读个温度值,几百 kHz 就够,两根线轮流收发。I2S(Inter-IC Sound,飞利浦定的音频接口标准)是高速单向数据流,专门搬音频采样,传起来不停歇。
想清楚它俩为啥不能互相顶替,就懂了音频总线的门道。音频不是"读一次就完事"的量——它是连续的流,每秒要不间断地灌进成千上万个采样点,中间断一下、抖一下,耳朵立刻听出爆音和卡顿。I2C 每传一字节都要收 ACK、还要塞地址帧,开销大、走走停停,喂不动这种连续流;而且它半双工,读的时候没法同时写。I2S 把时钟和数据分成独立的线,数据顺着时钟一位一位地流,没有握手、没有停顿,天生就是给这种"永不断流"的音频设计的。
接错是新手常踩的坑——把 I2S 麦克风接到 I2C 引脚上,怎么调都没声音。两者引脚、时序、协议都不一样,不能混用。
I2S 不是 I2C,别接错。I2S 的 L/R(或 SEL)引脚决定这路设备走左声道还是右声道,接 GND 走左、接 VDD 走右,两个麦克风组立体声时一个拉低一个拉高。
三根线各干嘛
I2S 最少三根信号线,用打拍子来理解最直观。
- SCK / BCLK(位时钟,Bit Clock):节拍器。每传一个数据位,它打一拍。16 位采样就是 16 拍,主控按这个拍子去读数据线上的电平。
- WS / LRCLK(字选择,Word Select):指挥棒,告诉接收方现在传的是左声道还是右声道。它电平翻转一次就换一个声道,所以它的频率正好等于采样率——一个采样周期内左右各传一次。
- SD / DATA(音频数据):实际的声音数据,一位一位顺着 BCLK 的节拍流出来。
谁来打拍子(出 BCLK 和 WS)的一方叫主机。数字麦克风通常做从机,听 ESP32 给的时钟把数据吐出来。
采样率与位深
两个数决定音质。
采样率:每秒采多少个点。语音识别用 16kHz(每秒 16000 个采样)就够,人声主要能量在 8kHz 以下。播放音乐要 44.1kHz 或 48kHz,才能还原高频。采样率越高,BCLK 拍得越快。
位深:每个采样点用多少位表示振幅。16 位是常见档位,动态范围够用;24 位、32 位给高保真音频留余量。这就是为什么麦克风手册上常写 24-bit PCM 输出——PCM 指的是这种「采样率 + 位深」的原始数字音频格式,没经过压缩。
这两个数直接定死了 BCLK 要跑多快。记住这个关系就够用:
BCLK 频率 = 采样率 × 位深 × 声道数
因为每个采样周期内,WS 翻转一圈(左一次、右一次),每声道要塞进「位深」个 bit,而每个 bit 占 BCLK 的一拍。举个具体的:48kHz 采样、16 位、立体声,BCLK = 48000 × 16 × 2 = 1.536 MHz;语音识别常用的 16kHz、16 位、单声道则是 16000 × 16 × 1 = 256 kHz。采样率和位深越高,BCLK 拍得越急。普通 GPIO 软件模拟根本顶不住这种连续高速流,时钟一抖音频就卡顿、爆音、失真,所以才需要硬件 I2S 外设来稳住节拍。
ESP32-S3 上怎么接这三类设备
ESP32-S3 内置硬件 I2S 控制器,能直接收发,不占 CPU 去软件凑时钟,这是它适合做语音项目的原因之一。三类常见音频器件,接法各有讲究:
输入端——INMP441 数字麦克风。 这是最常见的数字 MEMS 麦克风:内部把声音采好、量化成 24 位 PCM,直接从 I2S 吐出来,省掉外置 ADC,接线干净。它做从机,听 S3 给的 BCLK/WS 出数据;L/R 脚接 GND 走左声道、接 VDD 走右声道,两颗组立体声就一拉低一拉高。详见 INMP441 数字麦克风。
输出端(喇叭)——MAX98357A 功放。 它是「I2S 解码 + D 类功放」二合一:接收 I2S 数字音频,内部转成模拟并直接放大驱动小喇叭,中间不用你操心。省事,适合语音播报、提示音这类不追求 Hi-Fi 的场合。
输出端(高音质)——PCM5102 外置 DAC。 要好音质就用它:一颗纯粹的 I2S 数模转换器,把数字音频还原成干净的模拟线路电平(line-out),后面再接功放或耳机放大。它把「数模转换」这一步单独拎出来做到极致,动态范围和信噪比都比二合一功放强。数模转换本身是怎么回事,见 DAC 数模转换原理。
三者一凑,麦克风听、喇叭说,语音设备的音频闭环就搭起来了。
还有一种 PDM 麦克风,只用一根时钟加一根数据、传的是 1-bit 高速脉冲密度流,不是标准 I2S 的多-bit 帧,需要芯片端做抽取滤波还原成 PCM——ESP32-S3 的 I2S 外设支持 PDM 模式。入门做语音先用 I2S 的 INMP441 最省心,PDM 知道有这回事即可。
数据对齐:声音"小一半"或夹杂音的元凶
I2S 还藏着一个容易被忽略、却经常让人抓狂的细节:数据对齐格式。同样是"WS 翻转、DATA 按位流出",但那串 bit 到底从 WS 翻转后第几拍开始,其实有好几种约定:
- 标准 I2S(Philips):数据比 WS 翻转晚一个 BCLK 才开始,高位在前。最通用。
- 左对齐(Left-Justified / MSB):数据和 WS 翻转同时开始,不延迟那一拍。
- 右对齐(Right-Justified):数据靠一帧末尾对齐。
麦克风、DAC、主控三方的对齐方式必须说好。要是芯片端配成标准 I2S、麦克风却按左对齐吐数据,那错开的一拍会让所有采样值整体移位,表现就是音量明显偏小、失真、或夹着周期性杂音——听着像坏了,其实只是对齐没对上。ESP-IDF 的 I2S 驱动里能选这个格式,接了新麦克风声音不对,先怀疑它,别急着换硬件。
一句话口诀
I2S 是专搬连续音频流的单向总线,别和 I2C 搞混。三根线记牢:BCLK 打拍子、WS 分左右声道、DATA 出数据;速度看一个公式——BCLK = 采样率 × 位深 × 声道数。ESP32-S3 上,输入用 INMP441 麦克风,喇叭图省事用 MAX98357 功放、图音质用 PCM5102 外置 DAC,接错到 I2C 脚一定没声音。
和 AI 语音的关系
I2S 是 AI 语音硬件的地基。声音经 I2S 进芯片后,往上才是识别和合成:把音频转成文字、把回复文字转成语音,也就是 ASR/TTS 语音识别与合成 那一层。
想完整走一遍「麦克风采集 → I2S 传输 → 联网识别 → 喇叭播报」,小智 AI 语音项目 是个好起点,配套的 L4 I2S 音频实战 会把接线和代码落到实处。