2、WM8960芯片深度解析:芯片特性、内部框图、电源管理、时钟树、音频路径(ADC/DAC路径)
各位同学,大家好。今天我们来啃一块硬骨头——WM8960这颗编解码芯片。说实话,在嵌入式音频领域,WM8960算是一颗“常青树”了。我最早接触它是在一个便携式录音笔的项目上,那时候就被它丰富的功能和灵活的配置给吸引了。你想想看,一颗芯片集成了立体声ADC/DAC、耳机驱动、扬声器功放,还支持多种音频路径切换,这在十年前简直是神器。
咱们这节课,不搞虚的。我会从芯片特性、内部框图、电源管理、时钟树,再到ADC/DAC的音频路径,一层层剥开来看。嗯,这里要注意,很多同学拿到芯片手册就懵,觉得寄存器太多。其实只要理解了内部数据流,寄存器配置就是水到渠成的事。
2.1 芯片特性概览
先看一张表,把WM8960的核心参数捋一遍。我个人习惯,拿到新芯片第一件事就是看它的“硬指标”,这决定了它能不能用在你的项目里。
| 特性类别 | 具体参数 | 备注 |
|---|---|---|
| 音频性能 | 信噪比(SNR) 98dB (ADC), 98dB (DAC) | 典型值,实际取决于PCB布局 |
| 采样率 | 8kHz ~ 96kHz | 支持标准音频采样率 |
| 音频接口 | I2S / 左对齐 / DSP 模式 | 兼容主流SoC |
| 控制接口 | I2C (最高400kHz) | 用于寄存器配置 |
| 输出驱动 | 耳机: 40mW @ 16Ω; 扬声器: 1W @ 8Ω | 单声道BTL模式 |
| 电源 | 核心: 2.7V~3.6V; 数字IO: 1.65V~3.6V | 支持独立IO电压域 |
| 封装 | QFN-32 (5mm x 5mm) | 小尺寸,适合便携设备 |
2.2 内部框图:数据流才是王道
理解了参数,我们来看内部结构。下面这张SVG图,是我根据手册重新整理的,去掉了那些不常用的辅助模块,只保留了核心数据流。你跟着箭头走一遍,基本就明白WM8960是怎么工作的了。
从这张图你能看到,WM8960的核心就是两个混音器——输入混音器和输出混音器。所有音频路径都围绕着它们展开。说白了,你配置芯片的过程,就是在告诉这两个混音器:“把哪几路信号混合,再送到哪里去。”
2.3 电源管理:别让功耗坑了你
WM8960的电源管理非常灵活,但也容易踩坑。它内部有多个独立的电源域,你可以通过寄存器按需开启或关闭。
电源管理的核心寄存器是 R2 (Power Management 1)、R3 (Power Management 2) 和 R4 (Power Management 3)。我习惯把它们叫做“三兄弟”。
| 寄存器 | 控制对象 | 典型配置 |
|---|---|---|
| R2 (0x02) | MICBIAS、VMID、输入混音器、ADC | 录音时开启,播放时可关 |
| R3 (0x03) | 输出混音器、DAC、耳机功放 | 播放时开启,录音时可关 |
| R4 (0x04) | 扬声器功放、BYPASS路径 | 按需开启,默认关闭 |
这里有个小技巧:VMID(中间电压)一定要先开启,再开其他模块。VMID是内部模拟电路的参考地,它没稳定之前,开ADC或DAC会导致输出直流偏移,严重时会烧喇叭。我一般会在初始化时先开VMID,然后等10ms,再开其他电源。
2.4 时钟树:音频的“心跳”
时钟是音频系统的命脉。WM8960的时钟树设计得相当灵活,它可以从MCLK(主时钟)或BCLK(位时钟)中衍生出所有内部需要的时钟。
核心时钟路径是这样的:
- MCLK 或 BCLK 进入芯片后,先经过一个 时钟分频器。
- 分频后的时钟送给 内部PLL(锁相环),PLL可以倍频或分频。
- PLL输出再经过 可编程分频器,生成 ADC/DAC采样时钟 和 系统时钟。
关键公式:
采样率 (Fs) = (MCLK / 分频系数) / (256 或 384)
为什么是256或384?这是WM8960内部过采样率(OSR)决定的。比如你设OSR=128,那内部DAC会以128*Fs的频率工作。
我建议你直接用MCLK作为主时钟源,省去PLL配置的麻烦。比如你系统里有一个12.288MHz的晶振,那它可以直接产生48kHz及其倍数的采样率。如果你只有24MHz的晶振,那就必须用PLL了。
配置PLL时,有一个公式要记住:
PLL输出频率 = (MCLK * (N + 1)) / (R * 2^K)
其中:
- N: 分频比 (0~7)
- R: 参考分频 (1~15)
- K: 后分频 (0~7)
嗯,这个公式看着有点绕。我一般会直接用Wolfson官方提供的PLL计算工具,或者自己写个Python脚本算。手动算容易出错,我曾经因为算错一个N值,导致音频变调,听起来像“慢放”,排查了半天。
2.5 音频路径:ADC与DAC的“高速公路”
最后,我们来看最核心的音频路径。这部分理解了,寄存器配置就是填空。
2.5.1 ADC路径(录音)
信号从麦克风或线路输入,到I2S接口输出,中间经过以下关卡:
- 输入引脚:LINPUT1/2、RINPUT1/2 或 MIC输入。
- 输入混音器:可以混合多路输入,并调节增益(-17.25dB ~ +30dB)。
- ADC:模拟信号转数字,支持可编程增益放大器(PGA)。
- 数字滤波:包括高通滤波器(HPF)和数字音量控制。
- I2S接口:将数字音频数据发送给CPU。
2.5.2 DAC路径(播放)
信号从I2S接口进来,到耳机或扬声器输出,路径如下:
- I2S接口:接收CPU送来的数字音频数据。
- 数字滤波:包括插值滤波器和数字音量控制。
- DAC:数字信号转模拟,内置低通滤波器。
- 输出混音器:可以混合DAC输出和直通信号(Bypass)。
- 输出功放:耳机功放(HPOUT)或扬声器功放(SPKOUT)。
这里有一个很实用的功能——模拟直通 (Analog Bypass)。你可以把LINE_IN的信号直接送到输出混音器,不经过ADC/DAC。这在一些对延迟要求高的场景(比如K歌监听)非常有用。配置也很简单,只需要在输出混音器寄存器里把对应的输入通道使能即可。
好了,关于WM8960的芯片特性、内部框图、电源管理、时钟树和音频路径,我们就讲到这里。这些是后续配置驱动和优化性能的基础。你把这些概念吃透了,后面写代码的时候就会觉得“原来如此”。