第1章 WM8960芯片概述:一颗音频Codec的自我修养

各位同学,咱们这门课要啃的硬骨头是WM8960。在动手写代码之前,我觉得有必要先聊聊这颗芯片到底是个什么来头。说白了,WM8960就是一颗集成了双声道DAC/ADC、内置PLL、还能直接驱动扬声器的音频Codec。我最早接触它是在一个便携音箱项目上,当时选型选了一圈,最后发现这颗料在功耗和性能之间平衡得最好。

1.1 WM8960是什么?

WM8960是英国Wolfson Microelectronics(现在属于Cirrus Logic)推出的一款低功耗立体声音频Codec。你想想看,一颗芯片里同时塞进了DAC、ADC、耳机放大器、扬声器驱动器、还有PLL时钟发生器,这在十年前可是很奢侈的事情。

它的核心任务就两个:

  • 录音:把麦克风采集的模拟信号转成数字信号(ADC)
  • 放音:把数字音频流还原成模拟信号驱动耳机或喇叭(DAC)

嗯,这里要注意,WM8960不是简单的ADC+DAC拼凑。它内部有一套完整的信号路由矩阵,你可以灵活配置输入输出路径。我记得第一次看它的数据手册时,被那个信号路径图绕晕了——后来才发现,搞懂了那个图,整个芯片就懂了一半。

1.2 主要特性详解

咱们挑几个关键特性展开聊聊,这些都是后面写驱动时绕不开的硬知识点。

特性 参数/说明 我的经验
双声道DAC 24位,信噪比98dB 实际听感底噪控制得很好
双声道ADC 24位,信噪比94dB 做语音识别够用了
内置PLL 支持多种MCLK频率输入 省掉一颗外部晶振,爽
扬声器驱动器 每通道1W(8Ω负载) 直接推小喇叭,省功放
低功耗 典型功耗约10mW 电池供电项目的福音
I²S接口 支持标准I²S、左对齐、DSP模式 和STM32的SAI完美对接

核心亮点:WM8960的扬声器驱动器是BTL(桥接负载)架构,输出功率虽然只有1W,但效率很高。我曾经在一个对讲机项目里用它直接驱动3W的喇叭(降额使用),连续通话测试没出问题。

1.2.1 双声道DAC/ADC

DAC和ADC都是24位的,采样率支持8kHz到96kHz。我个人习惯把采样率固定在48kHz,因为这是大多数音频处理算法的标准输入。你可能会问:为什么不用192kHz?说实话,对于嵌入式音频应用,48kHz已经能覆盖人耳听觉范围的两倍以上,再高只会增加MCU的运算负担。

ADC部分内置了可编程增益放大器(PGA),增益范围从-17.25dB到+30dB,步进0.75dB。这个设计很贴心——我在调试麦克风输入时,经常需要微调增益来避免削波失真。

1.2.2 内置PLL

WM8960内部有一个灵活的PLL,可以从多种参考时钟(比如MCLK、BCLK甚至LRCLK)产生所需的内部时钟。这意味着你不一定非要给芯片提供精确的MCLK。举个例子,如果你的STM32主板上只有12MHz晶振,PLL可以把它倍频到需要的音频时钟频率。

避坑指南:我曾经在项目里直接用MCLK=12MHz,PLL配置为SYSCLK=49.152MHz(48kHz采样率的整数倍)。结果发现I²S的BCLK和LRCLK总是对不上。后来查手册才发现,PLL的N分频系数不能随便设,必须满足输入频率在PLL锁定范围内。嗯,这个坑我替你们踩过了。

1.2.3 扬声器驱动器

这是WM8960最吸引人的地方——内置了能直接驱动8Ω扬声器的BTL功放。每通道1W的输出功率,对于便携音箱、智能语音设备来说绰绰有余。而且它还有防削波(Anti-Clipping)功能,可以自动降低增益来避免失真。

不过要注意,扬声器输出引脚(SPK_OUTP/SPK_OUTN)是BTL输出,不能接地或短路。我见过有人直接把喇叭接在SPK_OUTP和GND之间,结果芯片直接保护了。正确的接法是喇叭接在SPK_OUTP和SPK_OUTN之间。

1.2.4 低功耗设计

WM8960的功耗控制做得相当精细。它内部有多个电源域:

  • 数字核心电压:1.8V(典型)
  • 模拟电压:2.7V~3.6V
  • 扬声器驱动电压:2.7V~5.5V

通过关闭不用的模块(比如只放音时关掉ADC),可以把功耗降到微安级别。我在做电池供电的智能语音设备时,待机功耗做到了50μA以下,全靠WM8960的电源管理功能。

1.3 典型应用场景

根据我这几年的项目经验,WM8960主要出现在三类产品里:

  1. 便携音箱:蓝牙音箱、Wi-Fi音箱。WM8960内置的扬声器驱动器和低功耗特性非常适合这类产品。我做过一个项目,用STM32F4+WM8960+蓝牙模块,整机续航能达到8小时。
  2. 智能语音设备:智能音箱、语音助手、会议麦克风。WM8960的ADC性能不错,配合麦克风阵列可以做语音唤醒和识别。我记得有个客户要求远场拾音,我们用了双麦克风+WM8960的差分输入,效果比单端输入好很多。
  3. 对讲机/无线通话设备:半双工或全双工对讲。WM8960支持全双工同时录音和放音,而且回音抑制效果不错。我在一个数字对讲机项目里,用WM8960实现了PTT(按下通话)功能,音频延迟控制在20ms以内。

重要提醒:WM8960虽然功能强大,但它不是万能的。如果你需要驱动4Ω或更低阻抗的扬声器,或者需要超过1W的输出功率,建议外接独立的D类功放。WM8960的扬声器驱动器更适合8Ω负载。

1.4 内部架构速览

为了让大家对WM8960有个整体印象,我画了一张内部架构图。这张图涵盖了芯片的主要功能模块和信号流向,后面写驱动时会反复用到这些概念。

WM8960 内部架构框图 模拟输入 LINE_IN / MIC 输入选择器 信号路由 ADC 24位 立体声 数字接口 I²S / PCM DAC 24位 立体声