1. WM8960 芯片概述:特性、应用场景、内部框图与引脚功能解析
各位同学,咱们今天正式开讲 WM8960 这颗芯片。说实话,在嵌入式音频领域摸爬滚打这么多年,WM8960 是我个人用得最多、也最愿意推荐给新手的一颗编解码器。为什么?因为它皮实、功能全、资料好找,而且价格还算公道。我记得 2018 年做一款智能音箱项目时,选型会上大家争论了半天,最后还是定了 WM8960——原因很简单,它一颗芯片就把音频编解码、功放、耳机驱动全包了,省了不少外围器件。
1.1 芯片特性速览
先看核心参数。WM8960 是英国 Wolfson(现属 Cirrus Logic)推出的一款低功耗立体声音频编解码器。它支持双通道 DAC 和 ADC,信噪比分别达到 98dB 和 94dB——这个指标在消费级产品里已经相当能打了。
| 参数项 | 典型值 | 备注 |
|---|---|---|
| DAC 信噪比 | 98dB | A 加权,立体声 |
| ADC 信噪比 | 94dB | A 加权,立体声 |
| 采样率范围 | 8kHz ~ 96kHz | 支持标准音频速率 |
| 内置功放 | 2 × 1W @ 8Ω | 可直接驱动喇叭 |
| 耳机驱动 | 立体声,无电容输出 | Capless 架构 |
| 控制接口 | I²C / SPI | 寄存器配置用 |
| 音频接口 | I²S / PCM | 与 MCU 通信 |
| 工作电压 | 2.7V ~ 3.6V | 数字核心 1.8V 内部稳压 |
重点记住:WM8960 内置了 1W 立体声功放,这意味着你不需要额外加功放芯片就能直接驱动小喇叭。我在做便携式录音笔项目时,就靠这个特性省下了一颗 TPA3110 的空间和成本。
1.2 应用场景
说白了,这颗芯片就是为消费级音频产品量身定做的。你想想看,哪些设备需要同时处理录音和放音,还得体积小、功耗低?
- 智能音箱与语音助手:双麦克风输入 + 喇叭输出,WM8960 的 ADC 可以直接接 MEMS 麦克风。
- 便携式录音笔:低功耗模式下的录音续航表现不错,我测过,3.7V 锂电池供电能连续录 8 小时以上。
- 对讲机与 VoIP 终端:全双工通信场景,WM8960 的 ADC/DAC 同时工作延迟很低。
- 车载免提系统:虽然车规级有更高要求,但很多后装产品确实在用这颗芯片。
- 玩具与教育硬件:成本敏感但需要语音交互的产品,WM8960 的性价比优势很明显。
嗯,这里要注意——如果你做的是 Hi-Fi 级产品,WM8960 的 98dB 信噪比可能不够看。但话说回来,消费级市场里,这个指标已经能覆盖 90% 以上的需求了。
1.3 内部框图解析
下面这张 SVG 图是我根据官方 datasheet 重新整理的,把核心模块和信号流向画清楚了。你盯着看两分钟,基本就能理解这颗芯片的工作逻辑。
从这张图你能看到,WM8960 的核心架构其实不复杂。数字音频通过 I²S 进来,经过数字滤波和音量控制,送到 DAC 转成模拟信号,最后分配给功放、耳机或线路输出。反过来,录音时模拟信号从麦克风或线路输入进来,经过 ADC 转成数字信号,再通过 I²S 送回 MCU。
个人经验:刚开始接触 WM8960 时,我总搞混它的时钟树。后来发现一个规律——所有模块的时钟都源自 MCLK 或外部晶振,经过 PLL 倍频后分发给各个子模块。你配置寄存器时,只要保证 ADC 和 DAC 的采样率与 MCLK 成整数倍关系,基本不会出问题。
1.4 引脚功能解析
WM8960 采用 QFN-32 封装,5mm × 5mm,体积很小。但别因为它小就轻视——32 个引脚里,有一半以上是模拟信号,布局布线稍有不慎就会引入噪声。
我把引脚按功能分组整理成下表,方便你查阅:
| 引脚名 | 引脚号 | 类型 | 功能描述 |
|---|---|---|---|
| 电源类 | |||
| AVDD | 1 | 电源 | 模拟电源,2.7V ~ 3.6V |
| DVDD | 2 | 电源 | 数字电源,1.71V ~ 3.6V |
| PVDD | 3 | 电源 | 功放电源,2.7V ~ 5.5V |
| DGND / AGND / PGND | 4, 5, 6 | 地 | 数字地、模拟地、功放地 |
| 数字接口类 | |||
| MCLK | 7 | 输入 | 主时钟输入,12.288MHz 等 |
| BCLK | 8 | 输入/输出 | I²S 位时钟 |
| DACDAT | 9 | 输入 | I²S 数据输入(播放) |
| ADCDAT | 10 | 输出 | I²S 数据输出(录音) |
| LRCLK | 11 | 输入/输出 | I²S 左右声道时钟 |
| SCLK / SDA | 12, 13 | 输入/输出 | I²C 时钟和数据(或 SPI) |
| 模拟输出类 | |||
| SPK_L / SPK_R | 14, 15 | 输出 | 喇叭输出,1W @ 8Ω |
| HP_L / HP_R | 16, 17 | 输出 | 耳机输出,无电容 |
| OUT3 / OUT4 | 18, 19 | 输出 | 线路输出或辅助输出 |
| 模拟输入类 | |||
| MIC1 / MIC2 | 20, 21 | 输入 | 麦克风输入,内置偏置 |
| LINPUT1 / LINPUT2 | 22, 23 | 输入 | 线路输入,可配置增益 |
| RINPUT1 / RINPUT2 | 24, 25 | 输入 | 右声道线路输入 |
⚠️ 避坑指南:我曾经在一个项目里把 AVDD 和 DVDD 用同一路 LDO 供电,结果底噪大得离谱。后来才意识到——模拟电源和数字电源必须分开走线,最好用磁珠隔离。另外,PGND 是大电流回路,千万别和 AGND 混在一起,否则功放开启时你会听到明显的“滋滋”声。
1.5 控制接口与音频接口
WM8960 支持两种控制接口:I²C 和 SPI。默认是 I²C,地址为 0x1A(7 位地址)。如果你要用 SPI,需要把 MODE 引脚拉高。
音频接口方面,它支持标准的 I²S 协议,也兼容左对齐和右对齐格式。我个人习惯用 I²S,因为 STM32 的 HAL 库对 I²S 支持得最好,代码写起来最顺手。
关键配置参数:
- I²C 地址:0x1A(7 位)或 0x34(8 位)
- I²S 格式:I²S 左对齐,16/20/24/32 位可选
- MCLK 频率:通常为 12.288MHz 或 24.576MHz
- 采样率:48kHz 时 MCLK 为 12.288MHz(256 × fs)