第3章 MTK8676音频硬件架构:音频编解码器(Codec)介绍、I2S/TDM/PDM接口详解、DSP与NPU协同处理路径、硬件音频通路图
各位工程师朋友,咱们今天来啃一块硬骨头——MTK8676的音频硬件架构。说实话,我第一次拿到这颗芯片的datasheet时,也被那密密麻麻的框图吓了一跳。但别怕,我带你一层层剥开它。
3.1 音频编解码器(Codec)介绍
MTK8676内部集成了一个多通道音频Codec。这玩意儿说白了就是负责模拟信号和数字信号之间的来回转换。我习惯把它分成三块来看:
- ADC通道:麦克风进来的模拟信号,转成数字信号给DSP处理
- DAC通道:DSP处理完的数字信号,转成模拟信号推喇叭
- 数字接口:跟外部Codec或放大器通信的通道
我在项目中遇到过一个问题:用内部Codec做双麦降噪时,发现底噪特别大。查了半天,原来是ADC的增益没配好。嗯,这里要注意——内部Codec的ADC最大支持到110dB SNR,但实际能跑到多少,取决于你的PCB布局和电源质量。
关键参数速查表:
| 参数 | 内部Codec | 外部Codec(选配) |
|---|---|---|
| ADC SNR | 110dB | 120dB+ |
| DAC SNR | 112dB | 125dB+ |
| 采样率 | 8kHz~192kHz | 8kHz~384kHz |
| 通道数 | 2入2出 | 4入8出 |
3.2 I2S/TDM/PDM接口详解
这三个接口,是音频工程师的吃饭家伙。我一个个说。
3.2.1 I2S接口
I2S是最经典的音频数字接口。它用三根线:BCK(位时钟)、LRCK(左右声道时钟)、SD(数据线)。MTK8676支持标准的I2S格式,也支持左对齐和右对齐。我个人习惯用标准I2S,兼容性最好。
为什么会这样?因为很多外部Codec默认就是I2S模式,省得你来回调寄存器。
3.2.2 TDM接口
TDM是I2S的升级版。它可以在一条数据线上传多个声道。比如8通道TDM,一根SD线就能搞定8个麦克风的数据。MTK8676支持2/4/8/16通道TDM。
我的经验:做多麦阵列时,TDM比I2S省GPIO。但要注意TDM的时隙对齐问题。我曾经因为时隙配错了一个bit,导致第3个麦和第4个麦的数据串了,排查了两天才找到原因。
3.2.3 PDM接口
PDM接口是数字麦克风专用的。它只有两根线:CLK和DATA。MTK8676内部有PDM转PCM的硬件滤波器,可以直接接数字MEMS麦克风。
你想想看,PDM的好处是什么?省走线、抗干扰。坏处呢?带宽有限,一般只支持到48kHz采样率。做语音唤醒足够了,但做高保真录音就不太够。
3.3 DSP与NPU协同处理路径
这是MTK8676最牛的地方。它把DSP和NPU串在了一起,形成了一条完整的音频处理流水线。
我画个简化的路径图给你看:
麦克风 → ADC → DSP(降噪/波束成形) → NPU(语音识别) → DSP(回声消除) → DAC → 喇叭
实际流程比这复杂得多。我拆开讲:
- DSP负责前端处理:包括AEC(回声消除)、ANC(主动降噪)、BF(波束成形)。这些算法对实时性要求高,DSP的延迟控制在5ms以内。
- NPU负责后端识别:唤醒词检测、语音识别。NPU跑神经网络模型,一次推理大概10-20ms。
- 共享内存机制:DSP处理完的数据,通过共享内存直接喂给NPU,不需要经过CPU中转。延迟能降低30%以上。
注意:DSP和NPU共用DDR带宽。如果你的模型太大,或者DSP处理链太长,可能会抢带宽。我建议你提前算好带宽预算,别等到调优时才发现瓶颈。
3.4 硬件音频通路图
好了,咱们把上面这些串起来,画一张完整的音频通路图。这张图我建议你打印出来贴在工位上。
┌─────────────────────────────────────────────────────────┐
│ MTK8676 SoC │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 内部Codec │───▶│ DSP │───▶│ NPU │ │
│ │ ADC/DAC │ │ 降噪/回音 │ │ 唤醒/识别 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ ┌────┴─────┐ ┌────┴─────┐ ┌────┴─────┐ │
│ │ I2S/TDM │ │ 共享内存 │ │ 模型推理 │ │
│ │ 接口 │ │ 缓冲区 │ │ 引擎 │ │
│ └────┬─────┘ └──────────┘ └──────────┘ │
│ │ │
│ ┌────┴─────┐ │
│ │ PDM接口 │ │
│ └──────────┘ │
└─────────────────────────────────────────────────────────┘
│ │
▼ ▼
外部Codec/AMP 数字MEMS麦
这张图里,我特别想强调两个点:
- 数据流是单向的:从麦克风到喇叭,数据只往前走,不走回头路。这样可以避免环路自激。
- 共享缓冲区是关键:DSP和NPU之间的数据交换,全靠这块共享内存。我建议你把它放在DDR的固定地址,不要用动态分配,否则容易出时序问题。
避坑指南:我曾经在一个项目里,把DSP的输出缓冲区设得太小,导致NPU读数据时丢帧。后来改成双缓冲机制——DSP写一块,NPU读另一块,交替使用。问题就解决了。
好了,这一章的内容就这些。音频硬件架构是语音助手的地基,地基不稳,上面调得再好也白搭。下一章咱们开始讲实际的调优方法,到时候会用到今天这些知识。
公众号:蓝海资料掘金营,微信deep3321