☰
AC108多mic矩阵驱动芯片:四通道同步采样与I2S/TDM配置实战
2026/10/11 16:31:02 网站建设 项目流程

简介:AC108多mic矩阵驱动芯片设计资料包,面向音频硬件工程师、嵌入式驱动开发者及语音算法团队,针对多通道麦克风阵列的选型、电路设计与系统集成需求。包内共23个文件,约11.97MB,涵盖datasheet、用户手册、硬件设计指南、驱动代码与说明、参考原理图及工程文件,类型包括pdf规格文档、dsn与sch原理图、opj工程、c与h源码、db与doc辅助资料,可支撑从芯片参数查阅到驱动移植的完整链路。资料围绕8路MIC EVB展开,涉及采样率与通道配置、I2C/SPI通信、噪声抑制与回声消除功能设置,以及电源、接地、滤波与抗干扰等硬件要点,并附SPK_MIC回路参考电路说明。已有977人学习下载,适合需要快速理解AC108功能特性、对照原理图完成外围设计或集成驱动的开发者参考。

1. AC108 多 mic 矩阵驱动芯片:从一颗 I2S 四通道 ADC 说起

如果你正在做远场拾音、会议全向麦或者语音交互设备,大概率绕不开一个尴尬:主控的 I2S 只有两通道,可你要接 4 个甚至 8 个麦克风。AC108 这类多 mic 矩阵驱动芯片,本质就是解决这个矛盾的——它把 4 路模拟麦克风(或 MEMS 差分信号)同时采样成 4 通道数字音频,再通过标准 I2S/TDM 接口打包送给主控。你不需要主控有 4 路 ADC,只需要一根 I2S 总线和一根 I2C 配置线。

它适合谁?做语音前端的嵌入式工程师、调过波束成形的算法同学、以及被“多 mic 同步采样”折磨过的硬件驱动开发者。这颗芯片的价值不在算力,而在“同步”和“通道数”:4 路采样共享同一个时钟域,相位一致性远好于用两片双通道 ADC 拼出来的方案。后面几章我会把寄存器配置、TDM 时序、时钟树和踩坑点拆开讲,让你能照着把链路跑通。

2. AC108 的通道、时钟与数据格式:选型前必须算清的三笔账

2.1 四通道同步采样到底同步在哪

多 mic 矩阵最怕的不是噪声,是通道间相位漂移。AC108 内部是 4 路独立的 sigma-delta ADC,但它们共用同一个主时钟(MCLK)和同一个采样时钟分频器。这意味着 4 个通道的采样时刻由同一个数字时钟边沿触发,通道间偏移理论上只有一个时钟周期的量级,而不是两片独立 ADC 那种“各自锁相”的随机偏差。

实际配置时,采样率由 MCLK 和内部寄存器分频共同决定。常见做法是给一颗 24.576MHz 晶振,通过寄存器把 MCLK 分频到 12.288MHz 或 6.144MHz,再得到 48kHz 或 16kHz 的采样率。这里有个容易翻车的点:MCLK 必须连续、无毛刺,一旦主控在初始化阶段反复开关时钟,ADC 内部状态机会锁死,表现为 I2S 上全是 0 或满幅噪声。我一般会在上电后先稳定 MCLK 至少 10ms,再写配置寄存器。

通道映射也不是固定的。AC108 支持把 4 路输入映射到 TDM 的不同 slot,寄存器里有一组通道使能和 slot 分配位。如果你只用了 2 个 mic,可以把另外两路关掉,减少 TDM 带宽占用。

2.2 I2S 与 TDM 模式的选择依据

AC108 支持标准 I2S 和 TDM 两种输出模式。区别很直接:I2S 模式下,左右声道各占一个 WS 半周期,4 通道需要两帧才能传完;TDM 模式下,WS 只标记帧起始,一根 DATA 线上连续传 4 个 slot。

选哪个取决于主控。如果主控 I2S 外设支持 TDM(很多 SoC 的 I2S 可以配成 4 slot),优先用 TDM,因为一根线搞定 4 通道,PCB 少走线,时序也简单。如果主控只支持标准 I2S,那就得用两路 I2S 或者把 AC108 配成 I2S 模式分时复用,但这样会引入额外的帧同步问题。

下面是一段典型的 I2C 寄存器配置片段,用 Python 的 smbus 模拟写寄存器过程,实际嵌入式里换成对应的 I2C 写函数即可:

import smbus I2C_ADDR = 0x3B # AC108 常见 7 位地址,具体以手册为准 bus = smbus.SMBus(1) def write_reg(reg, val): # AC108 寄存器为 8 位地址 + 8 位数据 bus.write_byte_data(I2C_ADDR, reg, val) # 1. 软复位,等待内部状态机稳定 write_reg(0x00, 0x01) time.sleep(0.01) # 2. 时钟分频:假设 MCLK=24.576MHz,目标 48kHz # 分频系数按手册公式算,这里写的是示例值 write_reg(0x01, 0x08) # MCLK 分频 write_reg(0x02, 0x01) # 采样率相关配置 # 3. 使能 4 通道,TDM 模式,slot 宽度 16bit write_reg(0x10, 0x0F) # 通道使能 write_reg(0x11, 0x03) # TDM 模式 + 4 slot write_reg(0x12, 0x0F) # slot 分配 # 4. 取消复位,开始采样 write_reg(0x00, 0x00)

这段代码的逻辑是“先复位、再配时钟、再配通道、最后放行”。参数说明:0x00 是复位控制,0x01/0x02 是时钟树,0x10~0x12 是通道和 TDM 配置。具体寄存器地址和位定义必须以你手上的手册为准,这里只给流程骨架。写完后不要立刻读数据,等 5~10ms 让内部 PLL 锁定。

2.3 数据格式与主控对接的三种常见组合

AC108 输出的是标准 I2S/TDM 格式,但主控端的接收配置必须和它对齐。常见组合有三种:

组合AC108 模式主控 I2S 配置适用场景
组合 ATDM 4 slot主控 I2S 配成 TDM,4 通道主流 SoC,推荐
组合 BI2S 双通道 ×2两路 I2S 分别接主控只有标准 I2S
组合 CTDM 2 slot主控只收 2 通道降级使用,浪费一半 mic

组合 A 最干净,但要求主控 I2S 支持 TDM。组合 B 的坑在于两路 I2S 的帧同步可能不同步,需要额外做时间对齐。组合 C 只在调试阶段用,正式产品不建议。

3. 从零跑通 AC108 采集链路:硬件连接、寄存器配置与数据验证

3.1 硬件最小系统与上电顺序

先搭最小系统。AC108 外围需要:一颗 24.576MHz 晶振(或外部时钟输入)、I2C 上拉电阻(4.7kΩ 典型)、I2S 的 BCLK/WS/DATA 三根线、以及麦克风的偏置电路。如果是模拟 mic,每路需要偏置电阻和隔直电容;如果是 MEMS mic,注意它的输出是差分还是单端,AC108 的输入配置要对应改。

上电顺序有讲究。我一般按这个顺序:先给 AC108 的模拟电源和数字电源(可以同时,但建议模拟先稳),再给 MCLK,最后拉高复位引脚。如果 MCLK 先于电源稳定,芯片内部可能进入异常状态。复位释放后,等 10ms 再开始 I2C 通信。

提示:用示波器确认 MCLK 在复位释放前已经稳定,且没有过冲。MCLK 上的振铃会导致采样时钟抖动,表现为本底噪声抬高。

3.2 寄存器配置的完整流程与参数计算

配置流程分四步:复位、时钟树、通道与格式、使能。每一步都有参数要算。

时钟树是核心。假设外部晶振 24.576MHz,目标采样率 48kHz,TDM 4 slot,BCLK 频率 = 采样率 × slot 数 × 位宽 = 48000 × 4 × 16 = 3.072MHz。AC108 内部会从 MCLK 分频出 BCLK,分频比 = 24.576MHz / 3.072MHz = 8。这个分频比要写进时钟配置寄存器。

如果目标采样率是 16kHz,BCLK = 16000 × 4 × 16 = 1.024MHz,分频比 = 24。注意分频比必须是整数,且手册会规定有效范围。如果算出来不是整数,要么换晶振,要么改 slot 位宽。

下面是一段更完整的配置代码,带参数计算:

def calc_divider(mclk, sample_rate, slots, bit_width): bclk = sample_rate * slots * bit_width if mclk % bclk != 0: raise ValueError("MCLK 无法整数分频到目标 BCLK,请换晶振或改位宽") return mclk // bclk mclk = 24576000 div = calc_divider(mclk, 48000, 4, 16) print("分频比:", div) # 输出 8 # 写入分频寄存器(地址示例) write_reg(0x01, div)

逻辑说明:先算 BCLK,再算分频比,不整除就直接报错,避免配出一个“看起来能跑但噪声很大”的时钟。参数说明:slots 是 TDM 的 slot 数,bit_width 是每个 slot 的位宽,两者相乘再乘采样率就是 BCLK。

通道配置里还有一个“高通滤波”使能位。AC108 内置了数字高通滤波器,用来去掉麦克风的直流偏置。如果你发现采集到的波形有缓慢漂移,先检查这个位有没有打开。截止频率一般设 1~10Hz,具体看寄存器档位。

3.3 用 I2S 回环验证数据是否正确

配置写完后,怎么确认数据是对的?最直接的办法是让主控把 I2S 收到的数据通过串口或 USB 传到 PC,用 Python 画波形。

import numpy as np import matplotlib.pyplot as plt # 假设从 I2S 读到了 4 通道交错数据,16bit 有符号 raw = np.fromfile("i2s_capture.bin", dtype=np.int16) channels = raw.reshape(-1, 4) # 4 通道 for ch in range(4): plt.subplot(4, 1, ch+1) plt.plot(channels[:1000, ch]) plt.title(f"CH{ch}") plt.show()

如果 4 条波形都能看到清晰的语音或测试音,且通道间没有明显延迟,说明链路通了。如果某一路全是 0,检查通道使能位和 mic 偏置;如果全是满幅噪声,检查 MCLK 和 BCLK 是否正常;如果通道间有固定延迟,检查 TDM slot 分配是否和主控接收配置一致。

注意:调试时先用一个已知信号源(比如信号发生器给 1kHz 正弦波)接到所有 mic 输入端,这样四路波形应该完全一致。用真实麦克风反而不好判断,因为环境噪声各通道不同。

4. 多 mic 矩阵驱动里最容易翻车的五个地方

4.1 现象:I2S 有数据但全是噪声,信噪比极低

原因:MCLK 抖动过大或 BCLK 分频比不是整数。AC108 的 sigma-delta ADC 对时钟抖动很敏感,MCLK 上的任何毛刺都会调制到音频带内。

解决:用示波器看 MCLK 的峰峰值抖动,如果超过几百皮秒,检查晶振负载电容和走线。分频比必须严格整数,不能四舍五入。我遇到过用 12MHz 晶振想分频到 48kHz 的情况,算出来分频比是 3.125,配进去后噪声大得没法用,换成 24.576MHz 立刻干净。

4.2 现象:四通道数据错位,语音串到别的通道

原因:TDM slot 分配和主控接收的 slot 顺序不一致。AC108 默认把 CH1 放在 slot0,但有些主控的 TDM 接收是从 slot1 开始计数的。

解决:先把 AC108 配成所有 slot 都输出同一个通道的数据,然后在主控端看哪个 slot 收到了信号,反推映射关系。或者直接查主控 I2S 手册的 slot 编号定义,和 AC108 手册对齐。

4.3 现象:上电后 I2C 能读能写,但 I2S 始终没有 BCLK

原因:AC108 的 BCLK 输出使能位没打开,或者主控端把 I2S 配成了从模式但 AC108 也是从模式,两边都在等对方出时钟。

解决:确认 AC108 是 I2S 主模式还是从模式。如果 AC108 做主,它应该输出 BCLK 和 WS;如果做主控做从,那主控要输出时钟。两边不能同时做从。我一般让 AC108 做主,因为它的时钟树更干净。

4.4 现象:采样率偏差大,录出来的音频音调不对

原因:晶振实际频率偏离标称值,或者分频寄存器写错了。晶振的负载电容不匹配会导致频率偏移几十到几百 Hz,48kHz 下可能听不出来,但做波束成形时相位会累积误差。

解决:用频率计测 MCLK 实际频率,和标称值对比。如果偏差超过 100ppm,换晶振或调负载电容。分频寄存器写完后回读一遍,确认写入值正确。

4.5 现象:长时间运行后某一路通道突然静音

原因:AC108 内部的高通滤波器或自动增益控制(AGC)在某些条件下会进入异常状态,尤其是输入信号长时间静音后突然来一个大声压。

解决:如果不需要 AGC,直接关掉。高通滤波器的截止频率不要设太低,否则直流漂移会慢慢累积。另外,定期通过 I2C 回读状态寄存器,发现异常就软复位一次。这个操作在音频采集线程里加个看门狗就行。

5. 把 AC108 用稳的三个进阶习惯

第一个习惯:每次上电都做一次寄存器回读校验。写完配置后,把关键寄存器读回来和写入值对比,不一致就重写。I2C 在电磁环境差的板子上偶尔会丢字节,回读能提前发现。

第二个习惯:用 TDM 模式时,把 BCLK 和 WS 的走线等长,且远离电源和晶振。我见过因为 BCLK 走线经过 DC-DC 电感上方,导致采样时钟上叠加了开关噪声,频谱上出现 200kHz 的杂散。后来把走线绕开,杂散直接消失。

第三个习惯:保留一个“已知良好”的寄存器配置文件,每次改配置只改一个参数,改完立刻录一段标准测试音对比。多 mic 矩阵的调试最怕一次改多个参数,出了问题根本不知道是哪个引起的。

最后说一个验证技巧:把 4 个 mic 紧挨着放,播放一段白噪声,采集 4 通道数据算互相关。如果通道间延迟在几个采样点以内,说明同步没问题;如果延迟随频率变化,说明时钟树有抖动。这个测试比看波形更灵敏。

我自己在这颗芯片上翻过的最大的车,是早期为了省一颗晶振,用主控的 I2S MCLK 直接喂给 AC108,结果主控一跑高负载任务 MCLK 就分频,音频里全是“咔咔”声。后来老老实实加了一颗独立晶振,世界安静了。多 mic 矩阵的时钟,值得单独给它一颗干净的心跳。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询