第2章:硬件原理图分析——主控I2S与WM8960外围电路

硬件原理图分析,是音频驱动开发的第一步。说白了,你得先搞清楚芯片之间怎么连的,才能写对驱动。我见过不少工程师,上来就撸代码,结果发现BCLK和FS接反了,折腾好几天。嗯,咱们别走这个弯路。

这一章,我会带你过一遍I2S接口的信号定义、WM8960的外围电路设计,最后给出一份硬件检查清单。你拿着这份清单去对原理图,基本不会漏东西。

核心原则:音频驱动的问题,60%以上出在硬件连接上。原理图分析越仔细,后面调试越省心。

2.1 主控I2S控制器接口

先看主控这边。I2S接口有四根主要信号线,咱们一个一个说。

信号名 全称 方向 说明
BCLK Bit Clock 主控输出 位时钟,每个bit一个脉冲
FS Frame Sync 主控输出 帧同步,也叫LRCK,左右声道切换
DIN Data In 主控输入 从WM8960接收音频数据
DOUT Data Out 主控输出 向WM8960发送音频数据

BCLK 的频率决定了音频的采样率和位深。举个例子,采样率48kHz、位深16bit、双声道,BCLK就是 48k × 16 × 2 = 1.536MHz。我个人习惯先算这个值,再去核对主控时钟树能不能分频出来。

FS 的频率等于采样率。48kHz采样时,FS就是48kHz。注意,有些主控叫LRCK,其实一回事。

DIN和DOUT 的方向容易搞混。我刚开始做的时候,总觉得DIN是输出,结果焊好板子不出声。你记住:DIN是进主控的,DOUT是出主控的。WM8960那边正好相反。

小技巧:看原理图时,把主控和CODEC的I2S引脚标上方向箭头。主控DOUT → CODEC DIN,主控DIN ← CODEC DOUT。这样一眼就能看出问题。

2.2 WM8960外围电路

WM8960是个好东西,集成了DAC、ADC、耳机功放、喇叭功放。但外围电路如果没做好,再好的芯片也白搭。我拆成三块来讲:电源、时钟、模拟输入输出。

2.2.1 电源

WM8960需要三组电源:

  • AVDD:模拟电源,3.3V。纹波要小,我建议加LC滤波。
  • DVDD:数字电源,1.8V或3.3V。看主控IO电平,保持一致。
  • SPKVDD:喇叭功放电源,3.3V或5V。电流需求大,走线要粗。

曾经有个项目,喇叭有滋滋声,查了半天发现SPKVDD和AVDD共用一个LDO,功放的大电流干扰了模拟电路。后来分开供电,问题解决。

注意:WM8960的电源上电顺序有要求。DVDD要先于AVDD上电,否则可能锁死I2C寄存器。数据手册第7页有详细时序图,建议贴在你的调试笔记里。

2.2.2 时钟

WM8960需要外部时钟源,通常是MCLK。频率可以是11.2896MHz、12.288MHz、24.576MHz等。选哪个?看你的采样率需求。

采样率 推荐MCLK 备注
44.1kHz 11.2896MHz 256×FS,CD标准
48kHz 12.288MHz 256×FS,DVD标准
96kHz 24.576MHz 256×FS,高清音频

我个人习惯用12.288MHz,因为48kHz和96kHz都能覆盖。如果你要同时支持44.1kHz和48kHz,那就得用双PLL或者可编程振荡器。

MCLK的走线要远离开关电源和数字总线。我在一个项目里遇到过MCLK被DDR时钟串扰,导致音频有周期性噪声。后来把MCLK走线包地处理,噪声消失。

2.2.3 模拟输入输出

WM8960的模拟接口很丰富,咱们挑常用的说。

模拟输入:

  • LINE_IN:线路输入,典型接法是通过电容耦合到IN1/IN2引脚。
  • MIC_IN:麦克风输入,需要偏置电压和放大。WM8960内部有MICBIAS,可以给驻极体麦克风供电。

模拟输出:

  • HP_OUT:耳机输出,直接驱动32Ω耳机。注意要加串联电阻(通常10Ω)和ESD保护。
  • SPK_OUT:喇叭输出,WM8960内置D类功放,效率高。但输出要加LC滤波器,否则EMI会超标。

避坑指南:我曾经在HP_OUT上没加串联电阻,结果耳机插入瞬间有爆破声。后来加了10Ω电阻和100μF电解电容,问题解决。原理图里这两个元件不能省。

2.3 硬件连接检查清单

好了,理论说完了。咱们来点实际的。下面这份清单,是我多年调试经验的总结。你拿到一块新板子,按这个顺序检查,能省下大量时间。

  1. I2S信号线检查
    • BCLK、FS、DIN、DOUT是否一一对应?
    • 有没有串接电阻?通常0Ω或22Ω,用于阻抗匹配。
    • 走线长度是否等长?不等长会导致时序偏移。
  2. I2C控制线检查
    • SCL、SDA是否上拉?通常4.7kΩ到3.3V。
    • 地址引脚配置是否正确?WM8960的7位地址是0x1A(ADDR接地)或0x1B(ADDR接DVDD)。
  3. 电源检查
    • AVDD、DVDD、SPKVDD电压是否在规格范围内?
    • 去耦电容是否靠近芯片引脚?我建议每个电源引脚放一个0.1μF陶瓷电容。
    • 上电顺序是否满足?DVDD先于AVDD。
  4. 时钟检查
    • MCLK频率是否正确?用示波器量一下。
    • MCLK幅度是否足够?WM8960要求最小1.5Vpp。
    • MCLK抖动是否过大?抖动大会导致DAC SNR下降。
  5. 模拟通路检查
    • 输入耦合电容是否焊接?通常1μF~10μF。
    • 输出串联电阻和电容是否焊接?
    • 耳机座和喇叭座是否共地?
  6. 复位和使能检查
    • WM8960的RST引脚是否拉高?低电平复位。
    • 如果用了GPIO控制电源,确保上电后GPIO输出正确电平。

我的习惯:每次拿到新板子,先用万用表量一遍电源对地电阻,确认没有短路。然后上电,用示波器看MCLK和BCLK波形。这两步没问题,再开始写驱动。你想想看,如果硬件有问题,驱动写得再好也没用。

2.4 知识结构图:I2S与WM8960硬件连接全景

下面这张图,把主控、WM8960、外围电路的关系画清楚了。你可以把它打印出来,贴在工位上。

I2S与WM8960硬件连接全景图 主控 SoC I2S 控制器 BCLK / FS / DIN / DOUT WM8960 音频 CODEC I2S / I2C 接口 I2S 总线 I2C 控制 电源 AVDD / DVDD / SPKVDD 时钟 MCLK 振荡器 模拟接口 LINE_IN / MIC / HP / SPK 💡 检查要点: 1. I2S信号方向正确 2. 电源电压和上电顺序 3. MCLK频率和幅度 4. 模拟通路耦合电容

这张图里,主控和WM8960通过I2S总线传音频数据,通过I2C总线配寄存器。外围电路提供电源、时钟和模拟接口。你检查原理图时,就按这个框架来,不会乱。

2.5 实战案例:一次I2S调试经历

最后分享一个真实案例。有次我调试一块板子,WM8960能初始化,I2C读写正常,但就是没声音。用示波器看BCLK和FS,波形正常。看DIN,也有数据。问题出在哪?

后来我仔细看原理图,发现主控的DOUT连到了WM8960的DIN,但WM8960的DOUT没连到主控的DIN——中间断开了。原来硬件工程师把DIN和DOUT搞反了。飞线解决。

你想想看,如果我先用检查清单过一遍,这个问题十分钟就能发现。所以,别偷懒,清单用起来。