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必须接高电平。
硬件连接上,有几个关键点:
- 上拉电阻:SCL和SDA都是开漏输出,必须外接上拉电阻到VDDIO(通常3.3V)。阻值怎么选?我一般用4.7kΩ,总线电容不大时很稳。如果总线长度超过10cm或挂载设备多,可以降到2.2kΩ。
- 电平匹配:WM8960的I2C接口电平由DBVDD决定。如果STM32的I/O是3.3V,DBVDD也接3.3V,那就直接连,不用电平转换。如果STM32是5V,那就需要加电平转换芯片,或者用MOS管搭个双向电平转换电路。
- I2C地址:WM8960的7位I2C地址是0x1A(如果ADDR引脚接地)或0x1B(如果ADDR引脚接高)。我习惯把ADDR接地,地址固定为0x1A,省心。
💡 我的经验
上拉电阻不要小于1kΩ,否则灌电流太大,I/O口可能承受不住。也不要大于10kΩ,否则上升沿太慢,高速通信容易出错。100kHz标准模式下4.7kΩ基本通吃。
1.5 典型硬件连接图
下面这张SVG图展示了WM8960与STM32的典型硬件连接。我特意把电源、I2C、音频接口三条路径分开画,方便你理解信号流向。
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引脚固定好电平,基本就成功了一半。我个人觉得,硬件设计阶段多花点时间检查,比后面拿着示波器抓波形要划算得多。