1. WM8960概述与硬件接口

WM8960这颗音频编解码芯片,我这些年用过不下十次。从便携式录音笔到智能音箱,它几乎成了我项目中的「标配」。说白了,它就是个能把数字音频信号转成模拟声音,也能把麦克风采集的模拟信号转成数字的「翻译官」。但它的功能远不止这么简单。

1.1 芯片功能概览

WM8960是Wolfson(现属Cirrus Logic)推出的一款低功耗立体声编解码器。我最早接触它是在一个电池供电的录音设备上,当时看中的就是它超低的功耗——播放模式下典型功耗才14mW左右。

它的核心功能包括:

  • 立体声DAC与ADC:支持24位分辨率,采样率从8kHz到96kHz
  • 内置耳机放大器:可直接驱动16Ω或32Ω耳机,无需额外功放
  • 麦克风偏置与前置放大:支持驻极体麦克风,增益可调
  • 数字信号处理(DSP):3D增强、EQ均衡、自动电平控制(ALC)
  • 灵活的音频接口:支持I2S、左对齐、右对齐等多种数字音频格式
  • 控制接口:通过I2C或SPI配置内部寄存器

嗯,这里要注意:WM8960的控制接口和音频数据接口是分开的。控制接口负责配置寄存器,音频接口负责传输实际的音频数据。这个设计理念我一直觉得挺聪明的——配置和数据的通道分离,互不干扰。

1.2 引脚定义与功能分组

WM8960采用QFN封装,总共32个引脚。我第一次画它的原理图时,对着数据手册数了好几遍引脚编号,生怕搞错。下面这张表是我整理的关键引脚分组:

引脚分组 引脚名称 功能描述
电源 AVDD、DVDD、SPKVDD、DBVDD 模拟/数字/扬声器/缓冲器电源
控制接口 SCLK、SDIN、MODE I2C时钟、I2C数据、模式选择
音频接口 BCLK、DACDAT、ADCDAT、LRC 位时钟、DAC数据、ADC数据、帧时钟
模拟输入 LINPUT1/2/3、RINPUT1/2/3 左/右声道模拟输入
模拟输出 LOUT1/2、ROUT1/2、OUT3/4 左/右声道输出及辅助输出
麦克风 MICBIAS、MIC1/2 麦克风偏置电压、麦克风输入

我个人习惯把电源引脚和地引脚先画完,再处理控制接口,最后才是音频接口。这样布局清晰,不容易漏接。

1.3 电源要求与供电设计

WM8960需要多组电源供电,这一点很多新手容易忽略。我记得有个项目,板子回来后死活不出声,查了半天发现是SPKVDD没接——扬声器电源悬空了。

各组电源的要求如下:

  • AVDD(模拟电源):2.7V ~ 3.6V,推荐3.3V。给内部模拟电路供电,纹波要小
  • DVDD(数字核心电源):1.71V ~ 2.0V,推荐1.8V。给数字逻辑核心供电
  • SPKVDD(扬声器电源):2.7V ~ 5.5V,常用3.3V或5V。决定了耳机/扬声器的输出功率
  • DBVDD(缓冲器电源):1.71V ~ 3.6V,通常与AVDD同电压

⚠️ 上电时序问题

我曾经踩过一个坑:AVDD和DVDD的上电顺序搞反了,导致芯片偶尔无法正常启动。数据手册建议AVDD先于DVDD上电,或者同时上电。如果做不到,至少保证两者上电时间差不超过10ms。

1.4 I2C接口硬件连接

WM8960的I2C接口只有两根线:SCL(时钟)和SDA(数据)。MODE引脚决定控制接口模式——拉高选I2C,拉低选SPI。我们这系列课程都用I2C,所以MODE必须接高电平。

硬件连接上,有几个关键点:

  1. 上拉电阻:SCL和SDA都是开漏输出,必须外接上拉电阻到VDDIO(通常3.3V)。阻值怎么选?我一般用4.7kΩ,总线电容不大时很稳。如果总线长度超过10cm或挂载设备多,可以降到2.2kΩ。
  2. 电平匹配:WM8960的I2C接口电平由DBVDD决定。如果STM32的I/O是3.3V,DBVDD也接3.3V,那就直接连,不用电平转换。如果STM32是5V,那就需要加电平转换芯片,或者用MOS管搭个双向电平转换电路。
  3. I2C地址:WM8960的7位I2C地址是0x1A(如果ADDR引脚接地)或0x1B(如果ADDR引脚接高)。我习惯把ADDR接地,地址固定为0x1A,省心。

💡 我的经验

上拉电阻不要小于1kΩ,否则灌电流太大,I/O口可能承受不住。也不要大于10kΩ,否则上升沿太慢,高速通信容易出错。100kHz标准模式下4.7kΩ基本通吃。

1.5 典型硬件连接图

下面这张SVG图展示了WM8960与STM32的典型硬件连接。我特意把电源、I2C、音频接口三条路径分开画,方便你理解信号流向。

WM8960与STM32硬件连接框图 WM8960与STM32硬件连接框图 STM32F4/F7/H7 I2C1_SCL (PB6) I2C1_SDA (PB7) I2S_CK (PC10) I2S_SD (PC12) I2S_WS (PA4) 3.3V / GND WM8960 SCLK (I2C时钟) SDIN (I2C数据) BCLK (位时钟) DACDAT (音频数据) LRC (帧时钟) AVDD/DVDD/SPKVDD MODE=3.3V (I2C模式) I2C控制总线 I2S音频数据总线 4.7kΩ 4.7kΩ 3.3V 📌 关键连接说明 1. SCL/SDA需上拉至DBVDD(通常3.3V),阻值4.7kΩ 2. MODE引脚接3.3V,选择I2C控制模式 3. ADDR引脚接地,I2C设备地址为0x1A(7位) 4. 各电源引脚就近放置0.1μF+10μF去耦电容

1.6 避坑指南与设计检查清单

做硬件设计,有些坑我踩过,就不希望你重蹈覆辙了。下面这几条是我每次画WM8960原理图时都会逐项检查的:

✅ 硬件设计检查清单

  • 电源去耦:每个电源引脚旁边都要放0.1μF陶瓷电容,靠近引脚放置。我习惯再加一个10μF钽电容做储能。
  • 模拟地与数字地:WM8960底部有个散热焊盘,必须焊接到地。我建议模拟地和数字地单点连接,或者用0Ω电阻桥接,避免数字噪声串入模拟电路。
  • I2C上拉电阻:不要漏接!不要漏接!不要漏接!重要的事说三遍。我曾经见过一块板子,工程师忘了加上拉电阻,I2C死活不通,查了两天才发现。
  • MODE引脚固定电平:如果悬空,WM8960可能会随机进入SPI模式,导致I2C通信失败。直接接3.3V或GND,别偷懒。
  • 音频输入输出耦合电容:WM8960的模拟输入输出都是直流偏置的,需要串接隔直电容。我一般用22μF的陶瓷电容,效果不错。

⚠️ 我曾经踩过的坑

有一次,我把WM8960的AVDD和SPKVDD都接在同一个3.3V LDO上。结果耳机音量开大时,LDO输出电压被拉低,导致模拟电路工作异常,声音出现爆音。后来我把SPKVDD单独用一个LDO供电,问题就解决了。所以,如果条件允许,模拟电源和扬声器电源最好分开供电。

1.7 小结

WM8960这颗芯片,功能丰富但硬件连接并不复杂。只要把电源处理好、I2C上拉电阻接对、MODE引脚固定好电平,基本就成功了一半。我个人觉得,硬件设计阶段多花点时间检查,比后面拿着示波器抓波形要划算得多。