2. Snapdragon音频硬件架构

理解Snapdragon平台的音频系统,不能只盯着Codec或某个接口,而要把整条“数字音频通路”从应用处理器一路看到扬声器、麦克风和耳机。Snapdragon的音频硬件大致由五类角色构成:负责通用计算的Hexagon DSP、承担低功耗音频常驻处理的Audio DSP(在部分平台中也称LPASS内的音频子系统)、作为低功耗音频子系统总集成的LPASS、完成数模/模数转换与放大的WCD音频编解码器,以及连接各芯片与器件的I2S、SoundWire、PDM等数字接口。它们之间通过时钟与电源域协同工作,任何一处配置不当,都会表现为无声、爆音、采样率不匹配或待机功耗偏高。

一、从AP到扬声器:一条完整的音频数据通路

以音乐播放为例,应用层把PCM数据交给AudioFlinger,经HAL下发到内核ALSA/ASoC驱动。数据通常先进入LPASS中的音频DMA缓冲区,再由Audio DSP按音频硬件接口的节拍搬运到WCD Codec。Codec内部完成DAC转换、增益调节和功率放大,最终驱动扬声器。录音方向则相反:麦克风或数字麦克风阵列经PDM接口进入Codec或直接进入LPASS,经抽取滤波、降噪和增益处理后回传给AP。

这条通路的关键在于“谁在什么时候工作”。如果只是播放提示音,AP可以保持低功耗,由Audio DSP独立完成数据搬运和Codec配置;如果是复杂音效或语音识别,Hexagon DSP会参与神经网络降噪、回声消除等计算。因此,Hexagon DSP、Audio DSP和LPASS不是互相替代,而是按任务类型分工。

Snapdragon 音频硬件数据通路与接口关系 应用处理器 AP AudioFlinger / HAL ALSA / ASoC 驱动 Hexagon DSP 神经网络降噪 / AEC 语音识别预处理 LPASS 低功耗音频子系统 Audio DSP 常驻音频处理 / 低功耗播放 音频 DMA 与缓冲区 PCM 搬运 / 多通道路由 时钟与电源域控制 MCLK / BCLK / 电源门控 WCD 音频编解码器 DAC / ADC 数模 / 模数转换 增益与混音 音量 / 静音 / 路由 功率放大 扬声器 / 耳机驱动 数字音频接口与外部器件 I2S BCLK / LRCLK / SDATA 传统立体声链路 SoundWire 多通道 / 低引脚 Codec 与功放控制 PDM 数字麦克风阵列 1-bit 脉冲密度调制 PCM 下发 音效/降噪 数字音频流 模拟/数字 时钟与电源域要点 • MCLK 由 LPASS 或 Codec 提供 • BCLK = 采样率 × 位宽 × 通道 • 播放域与录音域可独立门控 • 待机时关闭未用电源域 • 时钟失锁会导致爆音或无声

二、Hexagon DSP与Audio DSP的分工

Hexagon DSP是Snapdragon中通用性较强的向量计算单元,适合运行语音唤醒、神经网络降噪、波束成形等算法。它通常不直接驱动Codec寄存器,而是把处理后的PCM交给Audio DSP或AP。Audio DSP则更贴近音频硬件,负责低功耗常驻播放、多路音频混音、采样率转换和接口时序控制。实际项目中,如果语音唤醒需要7×24小时运行,应把唤醒词检测放在Audio DSP或LPASS的低功耗域,避免频繁唤醒AP。

判断一个音频任务放在哪里,可以看三个条件:是否需要复杂神经网络计算、是否要求极低待机功耗、是否与Codec寄存器强耦合。三者分别偏向Hexagon DSP、Audio DSP和LPASS/Codec驱动。

三、WCD Codec与接口选择

WCD系列Codec是Qualcomm平台常见的音频编解码器,内部包含DAC、ADC、可编程增益放大器、混音器和耳机/扬声器驱动。它与LPASS之间通常使用I2S或SoundWire连接。I2S适合传统立体声链路,信号包括BCLK、LRCLK和SDATA;SoundWire则用更少引脚支持多通道和寄存器访问,适合多麦克风、多扬声器系统。PDM接口专门连接数字麦克风,麦克风输出1-bit脉冲密度调制码流,由Codec或LPASS内的抽取滤波器转换为PCM。

选择接口时,先看通道数和引脚预算。例如,两通道立体声播放可用I2S;四麦克风阵列建议用PDM或SoundWire;若Codec还需要频繁读写寄存器,SoundWire的带内控制更有优势。

四、时钟与电源域的配置示例

假设播放48 kHz、24 bit、双声道音频,I2S的BCLK计算为:48000 × 24 × 2 = 2.304 MHz。MCLK通常取256倍采样率,即12.288 MHz。配置时需确保LPASS输出的MCLK与Codec期望一致,否则会出现采样率偏移。电源域方面,播放时使能LPASS音频域和Codec模拟域;录音时使能PDM麦克风域;待机时关闭未使用的域。

示例:48 kHz / 24 bit / 双声道 I2S 时钟
BCLK = 48000 × 24 × 2 = 2.304 MHz
MCLK = 48000 × 256 = 12.288 MHz
LRCLK = 48000 Hz

电源域检查:
- LPASS_AUDIO_CORE:播放/录音时开启
- CODEC_ANALOG:播放/录音时开启
- PDM_MIC_RAIL:仅录音时开启
- 待机:关闭以上未使用域

调试时,如果出现无声,先确认MCLK和BCLK是否输出;如果出现爆音,检查电源域上下电顺序和Codec增益是否在时钟稳定后才配置;如果录音电平过低,检查PDM麦克风偏置和抽取滤波器增益。把这些关系理清,Snapdragon音频硬件架构就不再是一堆孤立模块,而是一条可观察、可配置、可验证的完整通路。