1. WM8960芯片概述:特性、内部框图与典型应用
各位同学,咱们这门课要做的,就是把WM8960这颗音频编解码芯片,跟STM32搭在一起,实现耳机输出和麦克风输入。第一节课,我先带大家认识一下这颗芯片。
WM8960是Cirrus Logic(现在叫Cirrus Logic了)推出的一款低功耗立体声编解码器。我最早接触它是在一个便携式录音笔项目里,当时选型选了一圈,最后发现这颗芯片在功耗、音质和外围电路复杂度上平衡得最好。嗯,从那以后,它就成了我音频项目里的常客。
1.1 芯片核心特性
先列一下它的关键参数,大家有个整体印象:
| 特性类别 | 具体参数 | 我的备注 |
|---|---|---|
| 电源电压 | 模拟:2.7V ~ 3.6V 数字:1.71V ~ 3.6V |
可以用单电源3.3V搞定,省事 |
| 信噪比(SNR) | DAC:98dB ADC:94dB |
对于消费级产品,这个指标够用了 |
| 输出功率 | 耳机输出:每通道40mW @ 16Ω | 推普通耳机绰绰有余 |
| 采样率 | 8kHz ~ 48kHz | 覆盖语音和音乐场景 |
| 接口 | I²S(音频数据)+ I²C(控制) | STM32标配外设,直接对接 |
| 封装 | QFN-32(5mm × 5mm) | 手工焊接有点考验手艺 |
我个人最看重的三个特性:
- 低功耗:工作模式下典型功耗仅14mW,省电模式下更低。做电池供电产品时,这个优势很明显。
- 内置D类耳机驱动器:不需要额外功放芯片,直接驱动耳机,省成本省面积。
- 灵活的音频路由:内部混音器可以任意组合输入输出路径,调试起来非常灵活。
1.2 内部框图解析
下面这张图是我根据官方数据手册重新绘制的内部结构框图。大家先看个全貌,我再拆开讲。
这张图里,我标出了三条关键信号路径。大家注意看:
- 录音路径:麦克风信号进入输入混音器,经过ADC转换成数字信号,通过I²S总线送到STM32。我在项目里调试这条路径时,踩过一个坑——麦克风偏置电压没配置对,导致录音声音特别小。后来查手册才发现,WM8960的MIC偏置需要单独使能。
- 播放路径:STM32通过I²S发送数字音频,DAC转换成模拟信号,经过输出混音器,最后由耳机驱动器放大输出。这里有个小技巧:输出混音器可以叠加多个音源,比如同时播放音乐和提示音。
- 模拟旁路路径:这是WM8960的一个特色功能。输入信号可以不经过ADC/DAC,直接在模拟域混音后输出。延迟极低,适合对实时性要求高的场景。我曾经用它做过一个对讲机功能,效果很不错。
1.3 典型应用场景
根据我这几年的项目经验,WM8960最常见的应用场景有这么几类:
| 应用场景 | 核心需求 | WM8960的优势 |
|---|---|---|
| 便携式音频播放器 | 低功耗、高音质、小体积 | 14mW功耗 + 98dB SNR + QFN小封装 |
| 智能语音助手 | 麦克风阵列、语音唤醒、回声消除 | 双通道ADC + 灵活的混音器 |
| 对讲机/双向无线电 | 半双工通信、低延迟、抗干扰 | 模拟旁路路径 + 快速启动 |
| IoT语音终端 | 网络音频流、低码率、稳定可靠 | 支持8kHz采样 + 稳定的I²S接口 |
我的选型建议:
如果你做的产品需要同时处理耳机输出和麦克风输入,而且对功耗和成本有要求,WM8960是个很稳妥的选择。它不像一些高端编解码器那样功能复杂到用不完,也不像低端芯片那样音质堪忧。说白了,它就是那种「刚刚好」的芯片。
1.4 为什么选它搭配STM32?
你可能会问:市面上音频编解码器那么多,为什么偏偏选WM8960跟STM32搭?
原因有三:
- 接口匹配:STM32的I²S和I²C外设可以直接对接WM8960,不需要额外的电平转换或协议适配。硬件连线就几根线,软件驱动也不复杂。
- 生态成熟:这颗芯片出来很多年了,网上能找到大量参考设计和代码。我当年做第一个项目时,就是靠着一块淘宝买的开发板和几篇博客文章入的门。
- 性价比高:在同等性能的芯片里,WM8960的价格算是比较亲民的。批量采购的话,一颗不到10块钱。对于成本敏感的产品来说,这个优势很明显。
注意:WM8960的I²C地址是7位0x1A(8位0x34)。STM32的HAL库默认使用7位地址,所以初始化时要填0x1A。我见过有同事填成0x34,结果I²C通信一直失败,查了半天才发现是地址搞错了。