AD936x这颗芯片在软件无线电圈子里几乎算得上“射频入门必修课”。我第一次拿到带FMCOMMS3评估板的ZedBoard时,满脑子想的是赶紧把ADC数据抓出来看看信号长什么样。结果真正卡住我的不是FPGA时序,而是那套评估软件的配置流程。你在ADI的wiki上会看到“AD936x Evaluation Software”这么个名字,点进去发现下载链接和说明早就被新工具替代了,旧版还有个支持页面,但界面和现在主流的IIO Oscilloscope差别相当大,网上教程大多只讲其中一个版本,很少有人把两代工具串起来讲清楚。
这篇文章就把我这些年配置AD936x评估板的经验完整梳理一遍:从硬件平台准备、软件安装选型,到接收链路、发射链路的逐项参数拆解,再到具体抓信号的实操记录,最后是排查问题的一套方法论。无论你是刚入手FMCOMMS2/3/4的射频新人,还是已经踩过不少坑的SDR老手,这篇文章应该都能帮你少走弯路。
1. 先搞清楚评估软件的工具链结构
很多人拿到评估板第一步就装软件,结果装完连不上板子,然后开始怀疑板子坏了。其实评估软件远不止一个“界面”而已,它背后是一整套由FPGA固件、驱动程序、寄存器映射和上层工具组成的链路。搞清楚这个结构,比你多会点几个按钮重要得多。
1.1 两代评估软件:老GUI与IIO Oscilloscope
ADI围绕AD936x做过两代官方评估工具。
老一代就是名称里直接带“AD936x Evaluation Software”的Windows桌面程序,界面风格非常典型:左侧是寄存器树,中间是参数表单,右侧是图表状态区。它把AD9361的数据手册搬到屏幕上,你可以在里面直接填参考频率、采样率、带宽、增益表,也可以直接读写0x000到0x3FF的所有寄存器。这套软件在那个年代解决的是“让客户快速看懂芯片怎么配”的问题,很多射频工程师调试寄存器级问题时至今还在翻它的regdump。
新一代就是现在官方主推的IIO Oscilloscope,基于Linux内核的IIO(Industrial I/O)子系统设计,跨平台运行,底层通过libiio库访问设备,AD936x专用部分由libad9361-iio插件提供。它更像一台虚拟仪器:有示波器面板、频谱面板、DMM面板,还能直接导入导出滤波器系数。对于绝大多数测试场景,用新工具更省事。
两代工具虽然界面天差地别,底层面对的都是同一套SPI寄存器。明白了这一点,很多困惑都会消失:老版里看到的“RX Sample Rate”,和新版里的“sampling_frequency”,本质上写的是同一组寄存器;新版里的“gain control mode”下拉框,对应老版里RX AGC Config那几个位段。
1.2 主从架构:GUI并不是直接连芯片
评估软件并不是直接拿USB线往AD936x芯片上捅就能通信,它们之间卡着一个FPGA。
常见的评估硬件组合是“FPGA载板 + FMC射频子卡”。比如ZedBoard或者ZC706作为载板,FMCOMMS2/3/4插在FMC接口上,AD936x挂在FPGA的SPI总线上。评估软件通过USB或以太网连接到FPGA,FPGA内部跑着一个软核或AXI接口逻辑,充当SPI控制器,才能真正访问AD936x的寄存器。
所以你在配置软件前,必须先确保FPGA已经加载了对应的bitstream(比特流),并且SPI接口逻辑已经跑通。否则软件这边无论如何都扫描不到设备,你甚至会怀疑是不是驱动程序装错了。我见过不少人栽在这一步,一直以为是上位机软件的问题,结果排查了半天,发现FPGA根本没烧进去bit文件。
1.3 资料检索与版本匹配思路
ADI的官方资料主要散落在三处:产品页面、wiki文档、GitHub仓库。产品页面给数据手册和硬件参考设计,wiki给各种评估板和软件的快速入门指南,GitHub上则是libiio、libad9361-iio、IIO Oscilloscope等开源项目的源码和release包。
有一个非常容易忽略的坑是版本匹配。老版AD936x Evaluation Software大多对应2012到2016年的固件,如果你手里的是后期批次FMCOMMS3,或者FPGA载板上的固件升级过,老GUI可能连不上;反过来,新版IIO Oscilloscope需要配套的内核驱动、设备树节点,如果你的板子上Linux镜像太老,可能也跑不起来。建议先把板卡型号、固件日期、软件版本三者对齐,用配套的release包,再开始配置。
2. 硬件平台与系统准备
软件配置排错的第一步是确认硬件环境是干净的。AD936x评估配置的不少疑难杂症,追根溯源都是硬件连接、供电、时钟这些基础问题引起的。
2.1 评估板与载板的适配关系
AD936x评估板家族很庞大,最常见的几款是:
- FMCOMMS2:AD9361双收双发评估板,最经典的基础版本,RF前端相对简单。
- FMCOMMS3:同样基于AD9361,但RF前端增加了低噪声放大器和额外的收发开关,适合需要更高接收灵敏度和更灵活射频路径的场景。
- FMCOMMS4:基于AD9364单收单发版本,适合只需要1T1R的测试。
这些子卡通过FMC标准接口插到载板上。ZedBoard和ZC706是最常用的两块载板,前者偏教学评估,后者适合需要更大逻辑资源、更高数据吞吐的项目。上电前务必把FMC接口插到底,确保两侧的锁紧螺钉拧好,FMC是高速连接器,接触不良会导致SPI配置飘忽不定,这是最容易忽视的“偶发问题来源”。
2.2 参考时钟:整个配置的地基
AD936x内部的RF PLL和BB PLL都要靠参考时钟来锁定。FMCOMMS2/3/4板载默认通常是一颗40MHz的TCXO,在评估软件里配置频率时,软件会默认参考频率是40MHz。如果你用外部时钟源接了板子,记得在软件里同步修改参考时钟频率,否则算出来的分频器值全是错的,本振根本无法锁定。
排查本振问题时,我通常第一步就是拿频谱仪或示波器看一眼参考时钟波形是否正常。幅度不够、波形带毛刺、频率有偏差,这些都会导致后续所有配置工作白费。
2.3 设备枚举:确认板子已经在系统里“现身”
在Windows下,插上ZedBoard这类载板的USB口后,设备管理器里应该能看到对应的USB串口设备或网卡设备。老版FTDI方案会出现“USB Serial Port”类的COM口;如果用的是Zynq方案,经常是一个以太网接口,需要用网线把板子和PC直连,并设置静态IP。
在Linux下,插上板子后用lsusb、dmesg | grep tty这类命令确认设备节点是否生成。我习惯先在终端跑一遍iio_info -s,它能列出所有可用的IIO上下文。如果设备列表为空,说明底层驱动就没起来,这时候不要急着打开IIO Oscilloscope,先把设备树、驱动加载、权限这些问题处理完再说。
3. 软件安装与版本匹配
软件安装本身不复杂,但有几个细节决定你能不能顺利连上设备。我的建议是老版和新版都备好,用途不同:老版适合看寄存器级状态,新版适合日常测量和频谱分析。
3.1 老版AD936x Evaluation Software的安装细节
老版软件在Windows下安装时,有几个前置依赖容易被忽略。早期的FTDI USB转SPI方案需要先装相应的FTDI驱动,否则设备管理器里会一直显示黄色感叹号。另外老软件对高DPI显示器不太友好,分辨率太高时界面会变得很小或者错位,建议在兼容性设置里勾选“替代高DPI缩放行为”。
安装完以后,目录下通常会有可执行程序、配置文件、文档和一个寄存器映射相关的动态库。启动时如果弹窗提示找不到设备,先不要急着反复重装软件,回到第2部分检查FPGA bitstream是否已经加载、USB线连接是否可靠。
3.2 IIO Oscilloscope的安装与依赖库处理
新版工具在Windows下基本是解压即用。ADI在GitHub release页发布ZIP包,解压后里面有exe和一堆DLL,双击就能跑。它依赖libiio的运行库,release包一般会自带。Linux下可以用包管理器安装,也能直接从源码编译,编译时需要libiio、libad9361-iio、gtkmm等相关依赖。
有一个我踩过的坑:Windows下如果系统中存有旧版本的libiio DLL,新版IIO Oscilloscope启动时可能会加载到旧库导致崩溃。解决办法是检查系统环境变量PATH里的DLL搜索顺序,或者直接把release包里的所有DLL放到exe同目录下,让它优先加载本地DLL。
3.3 版本匹配矩阵:别让工具和固件打架
结合我实际用下来的经验,版本对应关系大致可以参考这张表:
| 评估板/载板 | 配套固件 | 推荐评估软件 |
|---|---|---|
| 早期FMCOMMS2 + ZedBoard | 2012-2015年bitstream | 老版AD936x Evaluation Software |
| 新版FMCOMMS3 + ZC706 | 2016年以后bitstream | IIO Oscilloscope(配合对应Linux镜像) |
| ADRV9361-Z7020 | 带IIO驱动的Linux | IIO Oscilloscope或命令行iio工具 |
| 自研FPGA载板 | 自写AXI SPI控制器 | 老版软件(若协议兼容则可直接用寄存器级功能) |
如果你固件是新的,尽量优先用IIO Oscilloscope;如果你只是在手动调试寄存器,观察芯片内部工作状态,老版软件在某些场景反而更直观。两套工具并不冲突。
4. 核心配置项逐个拆解:接收链路篇
接收链路是大多数人最先配置的部分。AD936x的RX链路里,频率、采样率、带宽、增益这四组参数形成了彼此关联的矩阵,改一个,其他几个经常要跟着变。
4.1 RF频率与本振配置:改完频率记得看锁定状态
在评估软件里输入目标频率,比如2.442GHz,软件会自动计算出RF PLL的分频系数。AD936x内部的LO合成器步进非常小,所以输入一个完全任意的频率,比如2442.5MHz,也能正常工作。
但频率改完之后,不能直接埋头采集数据,先确认LO是否锁定。老版软件里看“RF PLL Lock”状态位,新版IIO Oscilloscope一般在状态栏或者设备树属性里能看到锁定标志。如果你配置了一个频率后,回读寄存器发现lock状态不对,多半是参考频率填错了,或者是PLL校准过程被中断。
这里有一个很实用的技巧:每改一次RF频率,我就顺手写一次LO校准的触发命令。AD936x的RF PLL锁定和LO泄漏校准是相关的,切换频率后建议把校准重新执行一遍,否则镜像抑制和本振泄漏可能明显恶化。
4.2 采样率、通道带宽与FIR滤波器:它们的联动关系
AD936x的ADC最高采样率能做到61.44MSPS,但实际给到FPGA的基带I/Q数据率,还取决于抽取倍数。评估软件里,你通常直接填想要的采样率,它会自动推导抽取因子。
我常用的配置组合是:ADC采样率61.44MSPS、抽取率2、最终I/Q数据率30.72MSPS,用来捕获20MHz带宽的Wi-Fi信号完全足够。还有一个常见组合是61.44MSPS降到20.48MSPS,抽取率3,带宽更窄时更节省后端处理资源。
通道带宽的设置有讲究。你需要先确定模拟基带LPF带宽,以及数字FIR的截止频率。IIO Oscilloscope内置了一个滤波器设计向导,你输入目标带宽和采样率,它会自动计算出FIR系数并下发到芯片。我的经验是:模拟带宽设成信号带宽的1.2到1.5倍,FIR通带略宽于实际信号,保证不切到信号本身,又能滤掉带外干扰。比如20MHz的Wi-Fi信号,我常设模拟BW为20MHz,FIR通带18MHz左右,边缘留一点过渡带。
4.3 增益控制:AGC模式选错,频谱上全是坑
AD936x接收增益控制提供手动模式、快速攻击模式和慢速攻击模式。很多人图省事直接选“快速攻击”,结果发现频谱底噪不停跳动,甚至信号被压到接近噪声底。原因很简单,快速攻击适合短促突发信号的场景,对于持续的宽带信号,慢速攻击模式会更稳定。
如果你要对信号做准确的幅度测量,建议使用手动增益模式。AD936x的RX增益控制在很宽的范围里调节,手动模式下你可以用评估软件里的滑条逐步调整增益,观察频谱上信号和噪声的变化。调试增益时最关键的原则是:让信号幅度尽量高,但同时不要触碰到ADC满量程。一旦信号削顶,频谱上会出现一堆谐波和杂散,数据就彻底没法用了。
4.4 数字接口模式:CMOS与LVDS的选择
AD936x和FPGA之间的数字接口支持CMOS和LVDS两种电平标准,也有SDR和DDR两种数据时序。配置这些参数时,你需要和FPGA侧时序约束保持一致,否则即使芯片配置正常,采回来的数据也是乱码。
在评估软件里切换接口模式后,记得同步更新FPGA工程的引脚约束。我自己最常用的组合是LVDS DDR模式,既能降低IO引脚数量,又因为差分信号抗干扰更好,适合高速采样场景。频率较低的窄带场景,CMOS模式调试起来更方便,信号扒线也容易。
5. 发射链路配置与校准操作
接收链路调通后,很多人开始碰发射链路。发射链路里最坑的不是参数难填,而是配置完发现输出信号带了镜像杂散或者本振泄漏,这时候就轮到校准功能出场了。
5.1 TX功率与衰减设置
AD936x的发射通道通过衰减器控制输出功率,衰减范围非常宽,步进能做到很细。在评估板上,TX输出通常还经过后端的balun和滤波网络,所以实际输出到SMA口的功率并不等于寄存器里的配置值。
如果你手头没有频谱仪,建议从较大的衰减值开始,比如先设成-30dB以上,再接50Ω负载,确保不会因为输出功率过高烧坏后级设备。接上频谱仪后,观察输出信号幅度,再逐步减小衰减,直到得到理想的功率电平。记住一个原则:射频调试永远从小功率开始,尤其是第一次通电。
5.2 FDD/TDD模式切换与收发独立配置
AD936x支持FDD和TDD两种工作模式。评估软件里,FDD模式下收发本振可以各自独立配置,收发可以同时工作;TDD模式下收发共用一套频率,靠天线开关来切换。
配置TDD模式时,要注意收发切换的时序,以及切换后重新做校准的时机。TDD切换非常频繁,芯片内部有对应的TRX引脚和控制机制,确保FPGA侧切换时序跟得上。我在早期调试时,TDD切换后偶尔会出现发射信号频谱变差,排查到最后发现是切换后没有重新触发校准导致的。
5.3 发射链路校准:LO泄漏和正交校准不能省
AD936x有专门的校准流程,包括发送正交校准、接收正交校准、LO泄漏校准、基带DC失调校准等。这些校准的目的是修正混频器、滤波器和正交调制器在生产制造中引入的不平衡。
评估软件里一般都有校准页面,一键触发对应校准。实际使用中发现,频率变化比较大的时候,最好重新做一次发射端的LO泄漏和正交校准。我的习惯是:每次切换发射频率超过100MHz,就重新执行一轮TX校准,成本低,效果立竿见影。
5.4 多片同步的进阶话题
如果你用两片以上AD936x搭建多通道系统,比如4×4 MIMO,那就绕不开MCS(Multi-Chip Synchronization)机制。评估软件或者底层寄存器里需要先建立一个主参考时钟的同步关系,然后通过SYNC信号把所有本振和BB PLL对齐。
多片同步调试时,最典型的症状是通道间相位不固定。排查思路是:先保证各片的参考时钟一致,再对齐SYNC采样时刻,最后逐片检查PLL锁定和校准完成标志。这块内容比较深,我玩得也不够精,但评估软件确实把寄存器的操作简化了一大部分,至少不用自己拼SPI时序。
6. 实际配置实例:用2.4GHz频段抓Wi-Fi信号
理论说再多,不如完整跑一遍配置流程。这里记录一次完整的实操:用评估板在2.442GHz频点捕获一个20MHz带宽的Wi-Fi信号,把每个环节的参数计算和操作步骤写清楚。
6.1 参数计算:从目标信号倒推配置值
我的目标是观测Wi-Fi的20MHz信道。Wi-Fi信道中心频率选2.442GHz,这是常见的Channel 7。
关键参数计算如下:
- 目标信号带宽:20MHz。
- 基带I/Q采样率:选择30.72MSPS。为什么不是20.48MSPS?因为30.72MSPS留了更多余量,频谱观察更舒服,抽取率刚好是2,实现简单。
- 模拟基带滤波器带宽:设为20MHz。
- FIR通带:设置为18MHz左右,避免把带外噪声卷进来看不清楚。
这些参数对应的抽取路径是:ADC 61.44MSPS -> 抽取2 -> 30.72MSPS。如果后端FPGA处理能力有限,可以考虑降低到20.48MSPS,抽取率变成3,但对Wi-Fi这种20MHz宽带信号来说,30.72MSPS更稳妥。
6.2 逐项操作记录
准备阶段,我先给ZedBoard接好电源、JTAG和网线,FMCOMMS3的RX1A口接了一个2.4GHz全向天线。启动板卡后,检查网口通信正常,用iio_info -s确认能扫描到AD9361设备节点。
打开IIO Oscilloscope后,我在设备的寄存器配置面板里逐个填入参数:
| 配置项 | 设置值 | 说明 |
|---|---|---|
| 设备URI | ip:192.168.1.10 | 连接板载Linux |
| RF频率 | 2442 MHz | 对应Wi-Fi Channel 7 |
| 采样率 | 30.72 MSPS | I/Q数据率 |
| 模拟带宽 | 20 MHz | 基带LPF |
| FIR配置 | 自动生成 | 通带18MHz |
| 增益控制模式 | fast_attack | 先看信号有无,再换手动精调 |
| 数字接口 | LVDS DDR | 匹配FPGA端配置 |
参数填完后,我手动触发了一次RX正交校准和DC失调校准。然后切到频谱面板,把FFT点数拉到最大,用窗函数降低频谱泄漏。几乎是瞬间,就看到频谱上出现了一个典型的大约20MHz宽的鼓包,旁边还能看到相邻信道的能量尾巴。
看到目标信号后,我把增益从fast_attack切到manual,把滑条往上推,频谱上的信号变得饱满,底噪也逐渐抬起来。最终我把增益停在某个折中点:信号幅度大约在-20dBFS,距离满量程还有充分余量,这组配置就比较适合后续做解调。
6.3 结果分析与调整心得
这次配置过程顺利得让人意外,但我是踩过坑才走到这一步的。第一次做同样实验时,我在还没加载FPGA bitstream的情况下就打开评估软件,折腾了两小时以为软件坏了。后来把bitstream加载好,再启动软件,设备一次就识别出来了。
另外一个小发现:抓Wi-Fi信号时,板上的天线位置非常影响频谱包络。天线离路由器太远时,信号会有明显的小尺度衰落,频谱包络起伏很大。换了根增益高一些的天线,信号质量和频谱稳定度改善非常明显。
7. 常见报错与排查经验实录
抛开运气成分,配置AD936x评估板总会遇到各种问题,这里把最常见的几类整理成速查表,并给出排查思路。
7.1 设备无法枚举或者连接失败
现象:打开评估软件,找不到设备;iio_info -s列表为空。
排查顺序:
- 检查FPGA是否已经加载bitstream,串口终端里看启动日志有没有报错。
- 检查板卡供电是否正常,FMC连接是否牢固。
- 确认USB驱动或者网卡驱动安装正确,Windows设备管理器有没有感叹号。
- 如果是网口连接,Ping一下板卡IP地址,不通就换网线、改静态IP试一下。
老版GUI连接不上时的第一个排查点,也是看FPGA里SPI接口有没有枚举出来。不加载固件,光靠上位机是无论如何也连不上的。
7.2 配置参数后报错或者寄存器回读异常
现象:填了频率、采样率,软件提示配置失败;或者寄存器读取值和写入值不一致。
排查思路是逐级缩小范围。先用评估软件的单寄存器读写功能,对固定地址写入一个已知值,看能不能读回来。如果不能,说明SPI通路有问题,重点查FPGA侧时序;如果能,说明SPI通路正常,问题出在配置参数之间的约束关系,比如采样率组合超出了芯片允许范围。
这类问题最容易出在采样率与滤波器参数的组合上。某些采样率配上过大的抽取率,会导致后端数据率过低,模拟滤波器的带宽设置范围也会跟着受限。
7.3 本振锁定失败或者频谱有异常杂散
现象:配置好频率后LO Lock状态不对;或者频谱上出现不该有的尖峰。
先确认参考时钟。用示波器测量TCXO输出,看频率准确度和波形质量。一个常见的坑是外部参考时钟信号幅度过高或过低,导致PLL鉴相器工作不正常。
杂散问题则复杂一些。如果杂散出现在本振的整数分频关系上,多半是电源纹波或者板子布局耦合问题;如果杂散只出现在发射开启状态下,要考虑是不是LO泄漏校准没有做,或者TX带外辐射进入RX路径。
我的习惯是,碰到杂散问题先关掉发射,单独看接收底噪。接收底噪干净,杂散才和发射链路相关;如果接收本身就一堆杂散,那就先从电源和参考时钟查起。
7.4 增益抖动和底噪起伏
现象:AGC模式下,频谱底噪不停上下跳动,或者信号幅度忽大忽小。
排查方法:切到手动增益模式,手动设置一个固定增益,观察底噪是否稳定。如果手动模式下稳定,说明问题出在AGC参数上。试着把AGC的攻击阈值调高一些,释放时间调长一些,尤其是接收连续信号时,慢速攻击模式往往比快速攻击模式稳定得多。
7.5 老版Evaluation Software的疑难杂症
老版软件在Windows 10或Windows 11上会遇到界面错位、控件显示不全、设备管理器状态异常等问题。建议安装时按管理员身份运行,勾选兼容模式为Windows 7,关闭UAC后重试。如果实在搞不定,直接切换到IIO Oscilloscope,不要死磕老版软件。
写在最后的一个小建议
玩AD936x这几年,我最大的体会是:评估软件只是把你和芯片之间的那堵墙打薄了半层,真正让你的射频功底上涨的,反而是配置失败以后一层一层剥开问题的那段经历。从老版GUI的寄存器树,到新版IIO Oscilloscope的图形化面板,工具在进步,但芯片底层的配置逻辑几十年下来没变过。
最后分享一个我自己的效率习惯:每当调出一套稳定的配置,我会第一时间把完整的寄存器转储文件导出保存。开发后期需要复现某一组射频参数时,直接通过脚本回放进寄存器,不用重新打开GUI一项项填参数。实测下来,这个习惯在批量调试多个板卡时能省下大量时间。AD936x这套东西,把规矩理顺了,后面换别的射频收发芯片也会顺手很多。