硬件原理与信号链路:WM8960内部框图、I2S/PCM接口、模拟输入输出路径、电源与参考电压
做音频调试,最怕什么?
怕拿到一块板子,焊好芯片,上电一测——没声。或者有声音,但噼里啪啦的爆音,或者底噪大得像收音机没收到台。
这时候你翻手册,看原理图,往往一头雾水。为什么?因为你不清楚信号到底是怎么走的。
我个人习惯,拿到一个新芯片,第一件事不是写驱动,而是把它的内部框图看懂。WM8960 也不例外。今天我们就把它掰开揉碎,看看音频信号从哪进、从哪出、中间经过了什么。
WM8960 内部框图:信号流的核心骨架
先看整体结构。WM8960 是一个低功耗立体声编解码器,内部大致分为四个功能区:
- 数字音频接口:负责和 STM32 交换数字音频数据,走 I2S 或 PCM 协议。
- 数字信号处理(DSP):包含数字音量控制、3D 增强、EQ 等。
- 模拟输入路径:从 LINE_IN、MIC 等引脚进来的模拟信号,经过 PGA、混音器,送到 ADC。
- 模拟输出路径:DAC 输出的模拟信号,经过混音器、音量控制、功放,送到耳机或喇叭。
嗯,这里要注意:数字和模拟之间,有一条清晰的界限。很多噪声问题,就是因为这条界限没处理好。
核心原则:数字信号和模拟信号在芯片内部是分开处理的。外部布局时,也要尽量让数字走线和模拟走线不交叉。
I2S / PCM 接口:数字音频的“高速公路”
WM8960 和 STM32 之间怎么传数据?靠 I2S 或 PCM 接口。你想想看,这就像两个人打电话,得有统一的协议才能听懂对方说什么。
I2S 总线有三条核心信号线:
- BCLK(位时钟):每个 bit 跳一次,频率 = 采样率 × 位深 × 通道数。
- LRCK(左右声道时钟):切换左右声道,频率等于采样率。
- DIN / DOUT(数据线):串行传输音频数据。
举个例子:采样率 48kHz,位深 16bit,立体声。BCLK 频率就是 48k × 16 × 2 = 1.536MHz。这个值你可以在逻辑分析仪上直接量到。
调试技巧:无声时,先用示波器看 BCLK 和 LRCK 有没有波形。如果时钟都没有,驱动配置肯定有问题。我曾经遇到过一例,折腾了两天,最后发现是 STM32 的 I2S 时钟分频算错了。
PCM 接口和 I2S 类似,区别在于时序和对齐方式。WM8960 两者都支持,通过寄存器配置选择。我个人习惯用 I2S,因为 STM32 的 I2S 外设支持更成熟。
模拟输入路径:从 LINE_IN 到 ADC
模拟信号进来,第一站是输入引脚。WM8960 的输入引脚包括:
- LINPUT1 / RINPUT1:LINE_IN 输入,适合线路电平信号。
- LINPUT2 / RINPUT2:可配置为 MIC 输入或辅助输入。
- LINPUT3 / RINPUT3:辅助输入,常用于手机音频等。
信号进来后,先经过一个可编程增益放大器(PGA)。增益范围从 -17.625dB 到 +30dB,步进 0.375dB。这个 PGA 很关键——输入信号太弱,底噪会明显;太强,ADC 会削波。
避坑指南:我曾经在项目中遇到底噪问题,查了半天发现是 PGA 增益设得太高,把电源纹波也放大了。后来把增益降了 6dB,底噪立刻下去了。记住:PGA 不是越大越好。
PGA 之后是输入混音器。你可以把多个输入源混合到一起,再送给 ADC。这个功能在做对讲或混音产品时很有用。
模拟输出路径:从 DAC 到耳机/喇叭
输出路径和输入路径是对称的。DAC 输出的模拟信号,先经过输出混音器,再经过音量控制,最后送到耳机功放或喇叭功放。
WM8960 的输出引脚包括:
- LOUT1 / ROUT1:耳机输出,内置 40mW 功放(16Ω 负载)。
- LOUT2 / ROUT2:线路输出,适合接外部功放。
- SPK_OUTP / SPK_OUTN:喇叭输出,BTL 模式,最大 1W(8Ω 负载)。
输出音量控制也是数字 + 模拟两级。数字音量在 DSP 里,模拟音量在输出功放前。我建议优先用模拟音量,因为数字音量在低音量时容易损失动态范围。
电源与参考电压:噪声的“源头”
音频芯片对电源极其敏感。WM8960 有多个电源引脚:
| 电源引脚 | 电压 | 用途 |
|---|---|---|
| AVDD | 2.7V - 3.6V | 模拟电路供电 |
| DVDD | 1.71V - 3.6V | 数字电路供电 |
| SPKVDD | 2.7V - 5.5V | 喇叭功放供电 |
| VMID | AVDD / 2 | 模拟参考电压 |
VMID 是模拟电路的参考地,通常用两个大电阻分压得到。这个电压必须非常干净,否则会直接耦合到信号里。
关键点:VMID 引脚上一定要接大电容(10μF 以上)去耦。我见过有人省了这个电容,结果底噪大了 10dB。
另外,AVDD 和 DVDD 建议用独立的 LDO 供电。如果共用电源,数字开关噪声会通过电源耦合到模拟电路里,产生“嘶嘶”声。
小结:信号链路排查清单
当你遇到无声、爆音或底噪问题时,按这个顺序查:
- 时钟:BCLK 和 LRCK 有没有?频率对不对?
- 电源:AVDD、DVDD、VMID 电压正常吗?纹波大不大?
- 输入路径:PGA 增益是否合适?输入信号有没有削波?
- 输出路径:音量控制是否打开?功放有没有使能?
- 寄存器配置:I2S 格式、采样率、位深是否匹配?
嗯,这个清单我每次调试都会过一遍。大部分问题,都能在这五步里找到答案。