1. 为什么我要折腾A2B数字麦克风这套方案车载音频和工业音频采集这两年在快速往“全数字链路”方向走模拟麦克风加长线缆的方案在抗干扰、布线重量、通道扩展性上越来越吃力。A2BAutomotive Audio Bus就是在这个背景下被大量采用的一根非屏蔽双绞线同时跑音频数据、控制信号和供电主机端挂一颗AD2428WD做主控远端挂AD2428WC做从板从板上再接数字MEMS麦克风整条链路从麦克风到SoC全程数字中间没有ADC也没有模拟走线。这套架构在车载麦克风阵列、主动降噪、车内语音交互里非常常见。但问题也很现实A2B的配置不像I2S那样接几根线就能出声。它需要在SigmaStudio里把主从节点、总线拓扑、时钟、麦克风PDM接口、TDM输出槽位全部配对任何一处对不上现象就是“数字麦克风阵列没声音”——这也是我在论坛和群里被问得最多的一句话。这篇内容就是把我用AD2428WD-EVB做主控、AD2428WC-EVB做从板从零把一颗数字MEMS麦克风跑通的完整过程写下来包括SigmaStudio里每一步为什么这么配、参数怎么算、没声音时怎么一层层排查。适合谁看刚接触A2B、手里有这两块EVB或者类似板子的嵌入式/音频工程师做过I2S麦克风但没碰过A2B的以及被“阵列没声音”卡住想找排查思路的人。我会尽量把SigmaStudio里那些看起来像黑盒的选项讲清楚让你配完之后知道自己在配什么而不是照抄截图。2. A2B链路整体设计与方案选型思路2.1 为什么是主控AD2428WD加从板AD2428WC这套组合先理清楚这两块板子的角色。AD2428WD-EVB是主节点Master/Node 0它通常通过USBi或者板载的SPI/I2C接口跟PC上的SigmaStudio通信同时它负责给整条A2B总线提供主时钟superframe的同步源并把从总线上收上来的音频通过TDM/I2S吐给后端的SoC或DSP。AD2428WC-EVB是从节点Slave它挂在总线的下游负责给本地挂的麦克风提供PDM时钟、把PDM数据转成A2B总线上的音频流往上送。选这套组合的核心原因是AD2428本身支持PDM麦克风直连从板的PDM接口可以直接接数字MEMS麦克风不需要额外的codec。相比“从板接一颗ADC再转I2S”的方案PDM直连省掉了一级转换时钟由A2B从节点统一派生相位一致性更好——这对麦克风阵列做波束成形非常关键因为阵列算法吃的就是通道间严格的采样同步。提示AD2428WD和AD2428WC在芯片功能上高度一致主要差别在EVB的接口配置和出厂默认的节点角色。别想当然认为“WD一定是主、WC一定是从”角色是SigmaStudio里配出来的板子只是提供了对应的接口。2.2 总线拓扑与供电方式的选择A2B支持多种拓扑点对点、菊花链daisy-chain、分支。我这次用的是最基础的点对点主控直接连从板一根双绞线搞定。为什么先用点对点因为排查阶段变量越少越好。菊花链一旦中间某个节点配置错了后面所有节点全哑定位成本翻倍。等点对点跑通、麦克风出声了再往菊花链扩展心里有底。供电上A2B总线是“总线供电”bus power的主节点通过双绞线给从节点供电从节点再给本地麦克风供电。这里有个容易忽略的点总线供电能力有限如果你在从板上挂多颗麦克风或者麦克风功耗偏大要算一下总电流别超过主节点的供电上限否则现象是“配置全对但就是不出声”或者时好时坏。我实测单颗MEMS麦克风典型几百微安完全没压力但如果你挂4颗以上建议单独给从板辅助供电别硬扛。2.3 时钟与采样率的规划A2B的音频是装在superframe里传输的superframe的速率和采样率、通道数直接挂钩。规划顺序应该是先定麦克风的PDM时钟再定A2B的采样率最后核对superframe能不能装下你要的通道数。数字MEMS麦克风的PDM时钟通常在1MHz到3.2MHz之间输出的是1bit PDM流经过从节点内部的抽取滤波器decimation filter变成PCM。抽取比决定了最终PCM采样率。比如PDM时钟2.048MHz抽取比64得到32kHz PCM抽取比32得到64kHz。这个关系一定要在配之前算清楚因为SigmaStudio里填错一个数出来的采样率就不是你想要的后端SoC按48kHz去读32kHz的数据声音会变调或者直接判为无效帧。我这次的目标是48kHz、单通道先跑通所以PDM时钟和抽取比按能整除到48kHz的组合来选。具体数值在下一章展开。3. SigmaStudio里A2B工程的核心配置细节3.1 新建工程与器件库的正确选择打开SigmaStudio新建一个A2B工程。这里第一个坑就是器件选择SigmaStudio的A2B支持列表里有AD2428、AD2427、AD2426等多个型号还有不同封装的变体。选错型号后面生成的寄存器配置会跟实际芯片对不上表现就是“下载成功但总线起不来”。正确做法是主控侧选AD2428Master从板侧选AD2428Slave然后在节点属性里指定EVB对应的硬件配置。AD2428WD-EVB和AD2428WC-EVB在SigmaStudio的板级支持里通常有对应的预设如果没有就手动按EVB原理图配I2C地址和GPIO。注意SigmaStudio版本很关键。A2B插件在不同版本里界面和选项位置会变建议用官方推荐的、与你的EVB文档匹配的版本。我踩过的坑是用了一个较新的版本结果PDM配置页的选项名跟旧教程完全对不上白白找了半天。3.2 主从节点的地址与角色分配A2B总线上每个节点都有一个唯一的节点ID和I2C地址。主节点默认是Node 0从节点依次是Node 1、Node 2……在SigmaStudio的拓扑视图里你要把从板拖到主节点的下游并给它分配节点ID。这里的关键是从节点的I2C地址不能跟主节点冲突也不能跟从板上挂的其他I2C器件冲突。AD2428WC-EVB上除了A2B芯片可能还有EEPROM之类的器件配之前扫一遍I2C总线把地址列出来避免撞车。我一般会在纸上画一张地址表主节点、从节点、麦克风如果麦克风有I2C控制接口、EEPROM各占什么地址一目了然。角色分配上主节点要勾选“提供总线时钟”和“总线供电”从节点勾选“从总线取电”。如果从节点也要往外供电比如给下游菊花链的下一级还要配对应的供电模式。这些选项在SigmaStudio的节点属性面板里别漏。3.3 PDM麦克风接口的配置要点这是整个工程里最容易出错的地方。从节点AD2428WC的PDM接口要配几个东西PDM时钟输出使能、时钟频率、采样沿上升沿还是下降沿采样、抽取比、以及PDM数据映射到哪个A2B上行槽位。PDM时钟频率的选择要同时满足麦克风的要求和抽取滤波器的要求。以常见的数字MEMS麦克风为例它支持的PDM时钟范围通常是1.0MHz到3.2MHz。我选2.048MHz因为2.048MHz除以抽取比64正好是32kHz除以抽取比……等等我要48kHz那就得重新算48kHz乘以抽取比64等于3.072MHz这个在麦克风支持范围内所以PDM时钟设3.072MHz抽取比64得到48kHz PCM。这个计算过程一定要自己走一遍别抄别人的数。采样沿要和麦克风的规格书对齐。大部分MEMS麦克风在PDM时钟的上升沿输出数据、下降沿稳定从节点在下降沿采样。配反了的现象是数据全是噪声或者全零。数据映射到A2B上行槽位时要记住A2B的槽位是按时分复用排的一个48kHz的superframe里能装多少个槽位是固定的。单通道麦克风占一个上行槽位配好之后在SigmaStudio的“Upstream”视图里能看到这个槽位被占用。3.4 音频路由与TDM输出配置从节点把麦克风数据送上总线后主节点要把它从总线上取下来通过TDM/I2S输出给后端。这一步在SigmaStudio里是配主节点的“Downstream to TDM”路由。要配的参数包括TDM模式I2S、左对齐、右对齐、DSP模式、位深16/24/32bit、帧同步宽度、以及麦克风数据放在TDM的哪个slot。后端SoC读的是哪个slot这里就得配到哪个slot两边必须一致。我这次后端用的是标准I2S48kHz、32bit slot、麦克风数据放slot 0。配完之后用逻辑分析仪抓主节点的TDM输出能看到BCLK、LRCLK和数据线数据线上应该有随声音变化的波形。如果TDM线上什么都没有说明主节点没把总线数据取下来回去检查路由配置。4. 从零跑通的完整实操过程4.1 硬件连接与上电检查先把硬件接好。主控AD2428WD-EVB通过USBi连PCA2B总线口用双绞线连到从板AD2428WC-EVB的A2B口。从板的PDM接口接数字MEMS麦克风注意麦克风的VDD、GND、CLK、DATA四根线别接反尤其是CLK和DATA接反了要么没数据要么芯片发热。上电顺序先给主控板上电再给从板上电如果从板是独立供电的话。如果从板走总线供电那就只给主控上电用万用表量一下从板A2B口的电压确认总线供电正常。我遇到过从板A2B口电压只有零点几伏的情况查下来是双绞线接触不良换根线就好了。上电后先别急着开SigmaStudio用示波器量从板PDM接口的CLK脚正常应该有PDM时钟输出前提是从节点已经配置并启动。如果CLK脚一直是低电平说明从节点没起来先解决总线通信问题别往下走。4.2 SigmaStudio工程下载与总线枚举打开配好的工程点下载。SigmaStudio会通过USBi把配置写进主节点然后主节点去枚举总线上的从节点。枚举成功的标志是在拓扑视图里从节点变成“已连接”状态并且能看到从节点的寄存器读值。如果枚举失败按这个顺序查主从之间的双绞线是否接好、从节点供电是否正常、从节点I2C地址是否冲突、主节点的总线供电是否使能。我一般会先用SigmaStudio自带的寄存器读写工具直接读从节点的一个已知寄存器比如器件ID寄存器能读到正确值说明I2C通了读不到就是物理层或地址问题。4.3 PDM数据抓取与验证总线枚举通过、PDM配置下载完成后从节点应该开始输出PDM时钟并采集数据。这时候用示波器或逻辑分析仪抓从节点PDM接口的DATA脚对着麦克风说话应该能看到数据线的占空比随声音变化PDM是1bit流声音表现为1的密度变化。如果DATA脚一直不动先确认PDM时钟有没有输出再确认麦克风有没有供电最后确认采样沿配置对不对。我踩过一次坑麦克风规格书说在时钟下降沿输出数据我在SigmaStudio里配成了上升沿采样结果抓到的数据全是乱的改成下降沿就正常了。4.4 TDM输出与后端对接从节点数据上总线后主节点把它路由到TDM输出。用逻辑分析仪抓主节点的TDM三根线BCLK、LRCLK、DATA确认BCLK频率等于采样率乘以位深乘以通道数。比如48kHz、32bit、2通道立体声帧BCLK就是48k×32×23.072MHz。LRCLK应该是48kHz。DATA线上对着麦克风说话应该有波形。如果BCLK和LRCLK都对但DATA没波形回去检查主节点的下行路由有没有把麦克风所在的槽位映射到TDM slot。如果DATA有波形但后端SoC读出来是噪声检查位深和slot对齐方式I2S和左对齐差一个BCLK周期配错了数据就整体移位。4.5 参数计算速查把这次用到的关键参数整理成表方便你对照自己的方案改参数本次取值计算依据PDM时钟3.072MHz48kHz × 抽取比64抽取比64与PDM时钟配合得到48kHzPCM采样率48kHz目标采样率TDM位深32bit后端I2S要求BCLK3.072MHz48k × 32 × 2LRCLK48kHz等于采样率麦克风slotSlot 0后端读取位置这张表里的每个数都是可以按你的实际需求替换的替换的时候记住PDM时钟、抽取比、采样率三者是绑定的改一个要重算另外两个。5. 数字麦克风阵列没声音的排查实录5.1 分层排查法从物理层到应用层“没声音”是个太笼统的现象必须分层定位。我的排查顺序是物理层供电、连线、时钟→ 总线层枚举、I2C通信→ 数据层PDM数据、A2B槽位→ 输出层TDM、后端读取。每一层都有明确的观测点用示波器或SigmaStudio的寄存器工具去测不要靠猜。物理层量从板A2B口电压、量PDM时钟脚、量麦克风供电。总线层读从节点器件ID寄存器。数据层抓PDM DATA脚、看A2B上行槽位有没有被占用。输出层抓TDM三根线、看后端SoC的I2S接收寄存器。5.2 常见问题速查表现象可能原因排查动作总线枚举失败双绞线接触不良、从节点没供电、I2C地址冲突量电压、扫I2C地址PDM时钟无输出从节点未启动、PDM使能未勾选读从节点状态寄存器PDM有数据但全是噪声采样沿配反、抽取比错对照麦克风规格书改配置A2B上行槽位为空PDM数据未映射到槽位检查SigmaStudio上行路由TDM无输出主节点下行路由未配检查Downstream to TDMTDM有波形但后端是噪声位深/slot对齐错核对I2S模式与slot声音断续总线供电不足、superframe超载算总电流、减通道数5.3 几个我踩过的坑和独家技巧第一个坑SigmaStudio里改了配置但没重新下载。A2B的配置是存在芯片寄存器里的你在SigmaStudio界面上改完必须点下载才生效光改不下载等于没改。我有一次调了半天采样沿最后发现根本没下载。第二个坑麦克风规格书里的“时钟频率范围”和“抽取比”是两回事。有的麦克风支持很宽的时钟范围但内部固定抽取比这时候你的PCM采样率就被麦克风锁死了不能随便选。配之前一定把规格书看全。第三个技巧用SigmaStudio的实时寄存器监控功能把从节点的PDM状态寄存器和A2B槽位状态寄存器加到监控列表里一边说话一边看寄存器值变化比抓波形更直观。这个方法帮我快速定位过一次“槽位映射错位”的问题。第四个技巧如果后端SoC读出来是噪声先别怀疑A2B用逻辑分析仪把TDM数据解出来存成文件用音频软件播放。如果解出来的音频是正常的问题在后端SoC的I2S配置如果解出来就是噪声问题在A2B链路。这一步能省掉大量扯皮时间。6. 从单通道到麦克风阵列的扩展思路单通道跑通之后往阵列扩展是自然的下一步。阵列的核心诉求是通道间严格同步A2B在这点上天然有优势因为所有从节点的时钟都派生自主节点的同一个superframe。扩展时要注意几点一是每个从节点的PDM时钟要同源同相二是各通道在A2B上行槽位里要连续排列三是主节点到后端的TDM输出要能容纳所有通道。如果通道数多到一根A2B总线的superframe装不下就要考虑菊花链多节点或者提高总线速率。这时候前面说的“先点对点跑通再扩展”的价值就体现出来了——你有一个已知能工作的基准扩展出问题时可以回退对比。我在实际做阵列的时候习惯先把每个通道单独跑通、单独验证再合并。合并后如果某个通道没声音直接定位到那个从节点不用全链路重查。这个习惯帮我省了很多时间。最后分享一个我在调试A2B时的小习惯每改一次配置就在工程里存一个版本文件名带上日期和改动点。A2B的配置项太多改着改着就忘了哪版是能工作的有版本记录能随时回退。这个习惯看起来笨但比事后凭记忆复原配置靠谱得多。
阅读完成 · 觉得有帮助?