2、硬件原理:WM8960芯片引脚功能、内部框图与典型电路设计
拿到一块WM8960芯片,别急着看驱动代码。我个人的习惯是,先把数据手册的引脚图和内部框图翻烂。硬件原理搞不清楚,后面调音质的时候你会非常痛苦。说白了,音频驱动不只是写寄存器,你得知道信号从哪来、到哪去、中间经过了什么。
2.1 芯片引脚功能概览
WM8960是QFN封装,一共32个引脚。别看脚不多,功能划分很清晰。我把它分成几组来讲,这样你脑子里能有个框架。
| 引脚分组 | 引脚名称 | 功能描述 | 我踩过的坑 |
|---|---|---|---|
| 电源 | AVDD、DVDD、SPKVDD | 模拟/数字/功放供电 | SPKVDD纹波大,底噪直接炸 |
| 数字音频接口 | BCLK、DACDAT、ADCDAT、LRCLK | I2S总线信号 | BCLK极性搞反,声音全是噪声 |
| 控制接口 | SCLK、SDIN | I2C/SPI配置接口 | 上拉电阻没加,通信失败 |
| 模拟输入 | LINPUT1/2、RINPUT1/2、IN3 | 麦克风/线路输入 | 差分输入没配对,共模噪声大 |
| 模拟输出 | LOUT1/2、ROUT1/2、HPOUT_L/R | 扬声器/耳机输出 | 耳机输出要加隔直电容 |
| 其他 | MCLK、VMID、CPVSS/N | 主时钟、参考电压、电荷泵 | MCLK抖动直接影响SNR |
2.2 内部框图深度解析
WM8960的内部结构,说白了就是一条信号链路:输入→混音→ADC→数字处理→DAC→输出。我画了一张图,把核心模块串起来,你一看就明白。
这张图里,我特别标出了三条路径。录音和播放是常规操作,但旁路路径很多人不知道。说白了,就是模拟信号不经过ADC/DAC转换,直接混音输出。这在做对讲功能或者低延迟场景时非常有用。
2.3 典型电路设计要点
电路设计这块,我直接给你一个经过验证的参考方案。别自己瞎琢磨,照着这个来,至少能保证上电出声。
2.3.1 电源设计
- AVDD(模拟供电):2.7V~3.6V,推荐3.3V。必须用LDO,纹波要小于50μV。我习惯用AMS1117-3.3,便宜又稳定。
- DVDD(数字供电):1.71V~3.6V,推荐1.8V或3.3V。可以和AVDD共用,但要加磁珠隔离。
- SPKVDD(功放供电):2.7V~5.5V。这个电流大,我用过MP2303降压,但输出端必须加LC滤波。
2.3.2 时钟电路
WM8960需要外部提供MCLK。常见频率有12.288MHz、24.576MHz等。为什么是这些值?你算一下:48kHz采样率 × 256 = 12.288MHz。说白了,MCLK必须是采样率的整数倍。
我建议直接用有源晶振,比无源晶振加负载电容的方案稳定得多。曾经有个项目,用无源晶振,PCB布局不好,MCLK抖动大,ADC的SNR直接掉了6dB。
2.3.3 模拟输入输出
| 接口 | 推荐电路 | 参数 | 注意事项 |
|---|---|---|---|
| 麦克风输入 | 差分输入+偏置电阻 | 偏置2.2kΩ,耦合电容1μF | 差分走线要等长 |
| 线路输入 | 单端输入+分压 | 分压电阻10kΩ+10kΩ | 输入幅度不要超过AVDD |
| 耳机输出 | 隔直电容+ESD保护 | 电容220μF,TVS管 | 电容耐压要够 |
| 扬声器输出 | LC滤波+磁珠 | L=10μH,C=1μF | 防止射频干扰 |
2.4 典型电路参考设计
下面是一个我实际用过的电路方案。你照着画PCB,基本不会出问题。
// 电源部分
AVDD: LDO输出3.3V → 磁珠(600Ω@100MHz) → WM8960 Pin1
DVDD: LDO输出3.3V → 磁珠 → WM8960 Pin2
SPKVDD: DC-DC输出5V → LC滤波(10μH+10μF) → WM8960 Pin3
// 时钟部分
MCLK: 有源晶振12.288MHz → 22Ω电阻 → WM8960 Pin4
// I2S接口
BCLK: CPU I2S_BCLK → WM8960 Pin5
LRCLK: CPU I2S_LRCLK → WM8960 Pin6
DACDAT: CPU I2S_TX → WM8960 Pin7
ADCDAT: WM8960 Pin8 → CPU I2S_RX
// 控制接口(I2C模式)
SCLK: CPU I2C_SCL → 4.7kΩ上拉 → WM8960 Pin9
SDIN: CPU I2C_SDA → 4.7kΩ上拉 → WM8960 Pin10
// 模拟输入(麦克风)
LINPUT1: MIC+ → 1μF电容 → WM8960 Pin11
RINPUT1: MIC- → 1μF电容 → WM8960 Pin12
// 模拟输出(耳机)
HPOUT_L: WM8960 Pin13 → 220μF电容 → 耳机左声道
HPOUT_R: WM8960 Pin14 → 220μF电容 → 耳机右声道
嗯,这里要注意I2C的上拉电阻。WM8960的I2C引脚内部没有上拉,你必须外部加4.7kΩ到3.3V。我见过有人忘了加,结果I2C通信时好时坏,排查了半天。
2.5 布局布线建议
PCB布局这块,我总结了几条铁律:
- 模拟地和数字地要分开:在芯片下方用0Ω电阻或磁珠单点连接。别搞成大面积地平面,数字噪声会串到模拟部分。
- 电源走线要加粗:SPKVDD走线至少40mil,否则大电流时压降大,功放输出会失真。
- I2S信号线要等长:BCLK、LRCLK、DAT三根线长度差不要超过5mm。我吃过这个亏,线长差了1cm,48kHz采样时数据错位。
- 模拟输入输出远离数字信号:至少保持3倍线宽的距离。特别是MCLK这种高频时钟,串扰到模拟输入里,底噪直接上升。
好了,硬件原理这部分就讲到这里。你把这些引脚功能、内部框图和电路设计要点吃透了,后面写驱动的时候,心里就有底了。说白了,硬件是骨架,驱动是血肉,骨架歪了,血肉再丰满也没用。