1. 项目背景与问题定位
在TWS耳机开发领域,杰理芯片方案因其高性价比和完整的功能支持,已成为众多厂商的首选方案。但在实际产品落地过程中,我们团队遇到了一个颇具代表性的音频异常问题:当用户在播放音乐过程中切换ANC(主动降噪)模式,随后立即断开蓝牙连接时,耳机端会出现明显的"pop"声(爆破音)。这种异常音不仅影响用户体验,在极端情况下甚至可能损坏扬声器单元。
经过实测复现,问题出现的具体场景如下:
- 耳机处于音乐播放状态(A2DP协议传输)
- 用户通过物理按键或APP触发ANC模式切换(开/关/通透模式)
- 在ANC切换完成后的500ms内,主动或被动断开蓝牙连接
此时约有70%概率会出现持续约200ms的爆破音,声压级测试显示瞬态峰值可达-3dBFS。
2. 技术原理深度解析
2.1 ANC与音频通路的耦合机制
杰理AC79系列芯片采用混合式ANC架构,其信号通路存在三个关键节点:
- 前馈麦克风采集的环境噪声(带宽20Hz-1kHz)
- 反馈麦克风采集的耳道内残余噪声(带宽100Hz-8kHz)
- 音乐播放的PCM数据流(带宽20Hz-20kHz)
当ANC模式切换时,DSP会执行以下操作序列:
c复制// ANC模式切换伪代码
void anc_switch(anc_mode_t mode) {
disable_interrupts(); // 关闭音频中断
reconfigure_IIR_filters(mode); // 重配置滤波器组
reset_adaptive_algorithm(); // 重置自适应算法状态
update_mixer_gains(mode); // 更新混音器增益
enable_interrupts(); // 恢复音频中断
}
2.2 蓝牙断连时的电源管理时序
蓝牙连接断开时触发的关键事件链:
- HCI层收到断连事件(HCI_Disconnection_Complete)
- 音频服务终止A2DP流传输(AVDTP_Suspend)
- 电源管理模块启动低功耗切换:
- 关闭RF收发器电源(约3ms)
- 释放DMA缓冲区(约1ms)
- 降低DSP时钟频率(约2ms)
问题根源在于:当ANC模式切换尚未完成DSP参数更新时(通常需要5-8ms),若此时突发蓝牙断连导致电源管理强制终止音频处理,会使模拟输出端产生直流偏置突变。
3. 解决方案设计与验证
3.1 硬件层面的改进措施
在PCB设计上采取以下优化:
- 增加输出端耦合电容(从100nF调整为220nF)
- 在功放输入级加入TVS二极管(ESD5Z5.0T1G)
- 优化地平面分割,将数字地与模拟地单点连接
实测显示硬件改进可降低约40%的pop声幅度,但无法完全消除。
3.2 软件状态机重构
关键修改点在蓝牙协议栈与音频DSP的交互逻辑:
c复制// 修改后的状态转换逻辑
void handle_disconnect() {
if (anc_state != ANC_STABLE) { // 检测ANC是否处于稳定状态
delay_power_down(10); // 延迟下电
}
flush_audio_buffer(); // 清空音频缓冲区
ramp_down_dac(20ms); // DAC渐消
power_off_rf(); // 关闭射频
}
3.3 参数调优方案
通过示波器捕获异常时的I2S信号,发现需调整以下参数:
- 混音器淡入淡出时间:从默认5ms调整为15ms
- DAC消隐时间:从10ms延长至25ms
- 电源跌落检测阈值:从2.8V提高到3.0V
4. 完整解决方案实施步骤
4.1 开发环境配置
- 安装杰理SDK(版本需≥V2.3.5)
- 配置调试工具链:
- JLINK调试器
- 音频分析仪(APx525)
- 蓝牙嗅探器(Ellisys)
4.2 关键代码修改
在anc_process.c中添加状态检查:
c复制bool is_audio_path_stable() {
return (anc_state == ANC_STABLE) &&
(!dac_ramping) &&
(bt_state == BT_CONNECTED);
}
更新电源管理模块:
diff复制- void power_down_immediate() {
+ void safe_power_down() {
+ while (!is_audio_path_stable()) {
+ delay_ms(1);
+ }
audio_codec_mute(true);
dac_power_off();
}
4.3 测试验证方案
设计自动化测试脚本:
python复制def test_anc_switch_disconnect():
for mode in [ANC_ON, ANC_OFF, TRANSPARENCY]:
play_music()
switch_anc(mode)
disconnect_bt()
analyze_audio("pop_noise.wav") # 检测瞬态噪声
assert_no_artifact(threshold=-60dB)
5. 典型问题排查指南
5.1 现象:pop声仅在低温环境出现
可能原因:
- 电解电容ESR随温度变化
- 功放芯片的启动特性漂移
解决方案:
- 改用X7R材质的MLCC电容
- 增加低温环境下的DAC启动延时
5.2 现象:特定音乐类型触发率高
分析发现当音频信号含有大量低频成分(<100Hz)时问题更易出现。这是因为:
- ANC低频段的相位补偿与音乐低频叠加
- 直流分量更容易通过未完全稳定的滤波器
改进措施:
- 在ANC切换时强制启用20Hz高通滤波
- 增加直流偏移检测电路
6. 工程实践中的经验总结
-
时序控制黄金法则:任何可能影响音频通路的操作(包括但不限于ANC切换、EQ调整、模式切换),都必须确保:
- 前级数据流已停止
- 后级处理已完成缓冲
- 电源处于稳定状态
-
实测数据显示,在-10°C至45°C环境温度范围内,建议额外增加20%的状态切换余量时间。
-
对于量产固件,建议添加音频通路稳定性自检功能,在启动时自动校准关键时序参数。
这个案例的解决过程中,我们发现约68%的音频瞬态异常都与电源时序管理相关。后续在新项目设计中,会特别要求硬件工程师预留音频电源轨的电压跌落检测电路,并在PCB上标注明确的音频区域分割线。
