尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AD9361配置与驱动调试实战:从寄存器映射到校准链路

AD9361配置与驱动调试实战:从寄存器映射到校准链路 简介一份面向AD9361/AD936X射频收发器开发者的配置驱动案例文档聚焦寄存器配置与实战调参涵盖频点设定、带宽调整、采样率配置、增益控制等关键环节。内容以docx格式呈现压缩包共1个文件大小1.69MB适合刚接触软件定义无线电(SDR)或需快速上手AD936X评估板的硬件工程师。文档整理自ADI VisualAnalog向导的完整配置流程从参考时钟40MHz设置、采样速率与带宽的插值滤波自动配置到LVDS接口电平调整、接收/发射工作频率与衰减值设定再到通过Low Level Scripting生成txt配置文本并补充了打开通道的修改方法。同时给出了手动增益调节的增益表参考800MHz/2300MHz/5000MHz可帮助排查数据抓取失败、信号噪声干扰等常见问题。已有369人学习该资源对需要系统理解AD9361配置步骤的开发者有直接参考价值。1. 为什么 AD9361 的配置这么容易让人翻车一个寄存器就是一个黑匣子做射频收发项目的人迟早会撞上 AD936X 这个系列。AD9361 和 AD936X 系列作为零中频射频收发器几乎是 SDR 和软件无线电硬件平台里的标配前端无论是 Xilinx 官方评估板、第三方射频子卡还是自研的相控阵或通信波形验证平台核心工作都绕不开一件事把芯片的几百个寄存器配到能正常收发。但恰恰是这一步拦住了很多人。真正驱动 AD9361 跑起来难点不在焊板子而在理解它的配置体系——你面对的不是裸寄存器而是一套从 RF 频点到基带滤波系数都耦合在一起的校准链路寄存器之间互相牵连随便动一个偏置参数整条 RX 链路性能就变了。这篇文章要解决的就是把你从「看驱动源码一头雾水」带到「能自己改配置、调参数、定位收发异常」的程度给你一套可以直接复现的 AD936X 配置与驱动调试路径。适合看这篇文章的人是手里有 AD9361 硬件、想跑通官方驱动但不知道从哪里下手或者已经跑通了 basic 例程、但一改频点或带宽就发现配置对不上号的工程师。我不打算逐条翻译数据手册而是按实际干活的经验来讲先讲清楚 AD936X 的配置模型和驱动框架再给出一套最小可行配置流程然后专门把那些让无数人卡住的坑拎出来说清楚。2. 理解 AD936X 的配置模型从 SPI 寄存器映射到驱动分层2.1 AD936X 寄存器配置体系不是简单读写而是状态机AD9361 的寄存器空间看起来是一个平坦的 SPI 地址映射但实际操作时必须理解一个关键事实寄存器配置是有时序和状态依赖的。芯片内部的工作状态由 ENSMEnvelope State Machine管理你写入的很多寄存器并不会立即生效而是要在 ENSM 进入对应状态、或者执行一次校准触发之后才会被真正用到。常见做法是先把配置写进寄存器然后通过 SPI 触发校准Calibration或者直接控制 ENSM 状态跳转让芯片从 SLEEP 到 FDD/TDD 模式跑一圈配置才会完整落地。从驱动分层的角度看Xilinx 官方提供的 AD936X 驱动常见的是 ad9361.c 加 ad9361_api.c 这套组合其实做了三件事底层的 SPI 读写封装、中层的 API 配置接口、上层的状态控制和数据接口。你用的时候通常不会直接去翻 ad9361.c 里那些裸寄存器读写函数而是调用 API 层比如 ad9361_set_rf_freq、ad9361_set_tx_attenuation、ad9361_set_rx_gain 这些函数。但 API 层的参数看着简单背后的寄存器换算却很绕。比如设置 RF 频率你以为只是写一个整数进去实际上驱动内部会把它拆成整数分频、小数分频、VCO 校准参数等多组值然后分步写入并等待 VCO 锁定。这里有个常见的认知误区有很多人以为配置 AD936X 就是把数据手册附录里的寄存器表抄一遍。实际项目中你几乎不会手写寄存器值而是基于官方驱动做二次开发因为寄存器之间的耦合度太高了。给你一个直观感受光是一个 RX 通道的增益配置就牵扯到 LNA 增益表、TIA 增益、ADC 满量程校准、增益控制模式选择这几个模块的寄存器互相影响单独改一个结果往往是接收机饱和或者灵敏度骤降。2.2 配置的数据流链路一切都为了校准服务AD936X 能工作的核心是芯片内部有一整套校准机制。你配置完寄存器之后必须让芯片跑一遍校准否则滤波器频响可能偏的离谱I/Q 不平衡也没人管甚至直流偏置都会直接压掉信号动态范围。校准大体分三类RX 校准、TX 校准、以及辅助通道校准。RX 校准时芯片内部会注入已知的测试信号通过检测接收通路上的响应来计算并补偿 I/Q 相位误差、幅度误差和直流偏置TX 校准则用来修正发射链路的 I/Q 不平衡。这些校准的结果会直接写回寄存器所以在跑完校准之后你读某些寄存器看到的数值已经不是出厂默认值了。需要注意的是校准参数和配置参数是绑定的。你改了一个会影响链路特性的配置哪怕只是改了滤波器带宽、改了采样率或者改了 LO 频率最好重新触发一次对应的校准。我见过一个实际案例有人把 RX 采样率从 40Msps 改到 30.72Msps只改了采样率相关的寄存器没有重新校准结果接收灵敏度掉了接近 10dB信号频谱上明显多出镜像分量。重新跑了一次 RX 校准问题消失。这是 AD936X 驱动开发里最容易忽视的一条规则配置变更后校准必须跟上。驱动代码里校准的入口一般对应 ad9361_calibrate 或者类似的 API 函数。实际执行时这个过程会花掉不少时间——取决于你配置的通道数量和校准项从几十毫秒到几百毫秒都有可能。所以如果你在做 TDD 切换或者动态带宽调整不要把校准放在时隙关键路径上否则时序直接崩掉。2.3 驱动框架选择的现实考量官方驱动 vs 自研驱动选用 AD936X 驱动时摆在面前的无非两条路用 Xilinx 官方提供的 Linux 驱动或裸机驱动还是自己从头写。我的建议很简单除非你有极端定制需求比如要在一个没有 Linux 的 MCU 上驱动它否则永远先拿官方驱动跑通再谈优化。官方的 ad936x 驱动不仅包括寄存器读写还包括了校准算法、滤波器系数计算、增益控制逻辑这些自己写是要掉头发的。尤其是 TX 滤波器系数的计算官方驱动里有一整套基于 matlab 算法的 C 语言实现你在代码里改一个参数它能实时算出一组系数填进寄存器。自研驱动意味着你得把 FIR 滤波器设计那套数学重新实现一遍这工作量有时候比调通整个射频链路还大。但官方驱动也有它的麻烦代码量大封装层级多你很难从函数调用关系直接判断某个寄存器在哪里被写入。一个实用的方法是用 SPI 调试工具直接抓驱动运行时的寄存器写入日志。Xilinx 的驱动带 debugfs 接口可以打开寄存器读写跟踪这样一来你能看到 API 调用背后到底动了哪些寄存器、写入顺序是什么、校准前后哪些寄存器值发生了变化。这个信息比读代码来得快得多。3. 用官方驱动在 Zynq 平台跑通 AD936X 的最小配置流程3.1 硬件连接与设备树配置先保证驱动能看见芯片在 Zynq 平台上AD936X 驱动跑起来的前提是设备树里把 SPI、控制接口、数据接口都描述清楚。AD9361 的接口分为三组SPI 配置接口通常接在 Zynq 的 SPI 控制器上也可以用 GPIO 模拟、控制引脚比如 ENSM 使能、TX/RX 切换、复位、以及并行数据接口CMOS 或 LVDS接到 Zynq 的 PL 端。设备树里如果没把复位引脚和 ENSM 引脚描述对驱动初始化会一直卡在 chip id 读取失败上。下面是一段常见风格的设备树节点写法基于 Xilinx 内核的 ad9361 驱动绑定spi0 { status okay; ad93610 { compatible adi,ad9361; reg 0; spi-max-frequency 20000000; clocks ad9361_clk; clock-names ad9361_ext_refclk; adi,refclk-frequency 40000000; adi,digital-interface-init 1; adi,rx-rf-port-input-select 0; /* 0: A_BALANCED, 1: B_BALANCED, 2: A_BALANCED_B_BALANCED */ adi,tx-rf-port-input-select 0; adi,rx-fir-config-disable 0; adi,tx-fir-config-disable 0; adi,gpio-reset gpio0 42 0; adi,gpio-sync gpio0 43 0; adi,gpio-enable gpio0 44 0; }; };这段配置里有几个参数值得说明。spi-max-frequency 不要盲目调高AD936X 的 SPI 接口和 PCB 走线质量直接相关20MHz 是个稳妥的起步值如果板子走线较长或者有连接器过渡降一半更安全。refclk-frequency 指的是给 AD936X 的参考时钟频率这个必须和硬件实际焊接的晶振频率对应否则驱动计算 LO 频率和采样率时全部偏掉。gpio-reset 对应 AD936X 的复位引脚驱动初始化时会先拉低再拉高完成硬件复位。常见的翻车现场是设备树里 reset gpio 对应的引脚被别的外设复用导致驱动初始化时芯片没被真正复位然后读不到 chip id。排查方法是先不管驱动在系统启动后用 gpio 调试接口手动拉一下复位再用 spi 工具读 0x02 寄存器如果返回值是 0x41 或类似的值说明 SPI 通路正常。3.2 用 Linux 内核的 ad936x 驱动直接跑波形从模块参数到 IIO 设备Xilinx 发布的 Linux 内核里已经包含了 ad936x 的 IIO 驱动路径一般在 drivers/iio/adc/ad9361.c。这个 IIO 驱动不只是把芯片的寄存器暴露给用户空间还实现了射频前端调谐的标准抽象通过 iio_utils 就能设置频率、采样率、带宽、增益。这意味着你不需要写任何 C 代码就能先用命令行工具把板子调到某个频点然后用 matlab 或者 Python 脚本收数据验证链路是否工作。这种验证方式对后面写自己的配置逻辑非常有价值。加载驱动并创建一个射频前端配置的流程大概是这样先确认设备树被正确解析然后查看 /sys/bus/iio/devices/ 下是否出现了 iio:deviceX。出现之后用下面的命令验证基本通路# 查看当前设备名称确认是 ad9361 cat /sys/bus/iio/devices/iio:device0/name # 设置 RX 中心频率为 2.4GHz echo 2400000000 /sys/bus/iio/devices/iio:device0/in_voltage0_frequency # 设置 RX 采样率为 40Msps echo 40000000 /sys/bus/iio/devices/iio:device0/in_voltage_sampling_frequency # 设置 RX 射频带宽为 20MHz echo 20000000 /sys/bus/iio/devices/iio:device0/in_voltage_rf_bandwidth # 设置接收增益为 30dB如果当前是手动增益模式 echo 30 /sys/bus/iio/devices/iio:device0/in_voltage0_hardwaregain这里要提醒一点in_voltage0_frequency 写进去的是驱动内部做完整换算你可以通过读取同一节点来确认实际锁定的频点。如果读回来的值和写入值有较大偏差或者写入时内核日志报出 calib 失败大概率是参考时钟配置不匹配或者 VCO 频率落到不可用的范围。另一点是采样率设置AD936X 的采样率支持范围是远大于你设置一个任意值的它内部有 16 倍抽取/插值滤波器和 FIR 滤波器驱动会根据你的目标采样率自动算分频链和滤波器系数。但注意采样率不是连续可调的它受限于内部时钟分频结构实际可用的采样率会是某些特定值比如 30.72Msps、40Msps、61.44Msps 这类常见组合。3.3 裸机或者无操作系统平台的配置流程直接用寄存器 API不是所有 AD936X 项目都跑 Linux。很多自研硬件平台用的是单片机和 FPGA 组合这时候官方 Linux 驱动就没法用了你需要把配置逻辑移植到裸机环境。常见做法是先用 Linux 平台把整条配置链路调通然后用逻辑分析仪抓 SPI 总线上的寄存器写入序列在裸机端复现同样的写入时序。但这样做有一个隐患官方驱动的写入序列包含一个状态判断过程可能某个寄存器的写入依赖前面寄存器写入后的中断或者寄存器返回状态如果你只是盲目抓时序一旦某个写入的时序间隔不对校准就容易出问题。更可靠的做法是直接在裸机上实现精简版配置流程核心步骤如下// 1. 初始化 SPI 接口设置相位和极性速率 10MHz spi_init(SPI_SPEED_10MHz, SPI_MODE_0); // 2. 软件复位 ad936x_spi_write(0x000, 0x01); // 写入软件复位命令 mdelay(10); // 3. 读取芯片 ID 确认通信正常 uint8_t chip_id ad936x_spi_read(0x02); printf(Chip ID: 0x%02x\n, chip_id); // 4. 设置参考时钟与采样率相关参数 ad936x_spi_write(0x005, 0x00); // 设置时钟分频相关寄存器 ad936x_spi_write(0x006, 0x08); // RFPLL 分频系数 // 5. 配置 RF 频点先设置 VCO 的整数和小数部分 ad936x_spi_write(0x032, 0x1A); // 写入整数分频 ad936x_spi_write(0x033, 0x6C); // 写入小数分频高字节 ad936x_spi_write(0x034, 0x8B); // 写入小数分频中字节 ad936x_spi_write(0x035, 0x2C); // 写入小数分频低字节 // 6. 触发 VCO 校准 ad936x_spi_write(0x030, 0x01); // 触发 VCO 校准 mdelay(50); // 等待校准完成这段代码的逻辑很直观先复位芯片再确认 SPI 通信然后分步配置时钟和频点最后触发校准。但要注意我这里给出的寄存器地址和值只是示意不同版本的 AD936X 数据手册会有细微差别而且实际频点的计算涉及大量参数换算裸机上做这类换算同样需要完整的寄存器换算公式。所以我的真实建议是如果要用裸机方案先从官方 Linux 驱动里把 ad9361_api.c 文件移植出来这个文件不依赖 Linux 内核接口大部分函数用标准 C 就能编译配合你自己实现的 SPI 底层函数跑在 ARM 或者单片机上都行。4. 关键配置参数详解频点、采样率、滤波器与校准项4.1 频率配置不是写个整数那么简单LO 分频链的边界约束在 AD936X 上设置中心频率驱动内部要完成的工作远比设置一个 VCO 频率复杂。硬件上AD936X 的 LO 信号来自一个宽带 VCO 加分频链路VCO 的工作范围一般在 6GHz 到 12GHz 之间具体视版本有差异而我们实际需要的 LO 频率要低得多所以 VCO 输出需要经过一个多级分频器。分频系数不同相位噪声、功耗、谐波抑制能力都不一样驱动需要根据目标频率自动选择最佳分频系数。问题在于如果你设置一个刚好落在分频边界附近的频点驱动计算出来的分频路径可能不是最优的严重的会导致本振泄漏偏高或者锁定时间变长。在官方驱动里设置频点底层会自动处理这一段逻辑但你必须知道一个参数参考时钟频率的精度。AD936X 对参考时钟的精度要求不低一个 40MHz 的参考时钟如果偏离 100ppm虽然锁定没问题但你会看到频谱上的信噪比整体变差因为所有频率换算都是基于这个参考源的。最好参考时钟用 TCXO 或者 OCXO除非你在一个对频率精度不敏感的宽带应用里。频点设置之后用频谱仪或者信号源配合验证是一个好习惯。手边有信号源的话给 RX 通道灌一个已知频点的单音信号然后在 FPGA 或者上位机里做 FFT观察峰值是否落回正确的频点上。如果峰值频率偏了一个肉眼可见的量首先要怀疑参考时钟频率和设备树或驱动参数不一致。4.2 采样率和滤波器带宽的匹配关系别把两者混为一谈AD936X 的 RX 链路里有两级滤波第一级是模拟低通滤波器TIA 之后的基带低通第二级是数字 FIR 滤波器。模拟低通的带宽决定了信号进入 ADC 之前的抗混叠能力数字 FIR 则做最终的通道选择和抽取。两个带宽都可以设置但它们的作用完全不同。有些人在配置时只设置 rf_bandwidth不管 FIR 的配置导致的结果是 ADC 采进来的信号包含了过宽的带外分量动态范围被白噪声淹没灵敏度下降。官方驱动在设置采样率的时候会自动为你选择一组匹配的 FIR 系数这组系数的设计目标是让整体通带平坦度和带外抑制达到一个平衡。但如果你用手动模式调整 FIR就要理解一个关系数字 FIR 的带宽不能超过采样率的一半奈奎斯特约束。一个常见错误是把 RX 采样率设为 40Msps然后把 FIR 带宽设为 25MHz这时候 FIR 的过渡带根本没有空间系数计算出来之后实际响应严重变形通带内纹波变得不可收拾。参数选择上我给一个参考。对于常见的 20MHz 信号带宽应用RX 采样率设在 40Msps 或者更高数字 FIR 带宽设在 18MHz 左右留出过渡带余量模拟低通带宽可以适当放开到 25MHz或者直接用驱动里的自动计算。如果你的应用是窄带信号比如几百 kHz 的带宽采样率依然要保持在一个合理范围然后依赖 FIR 做窄带滤波把模拟低通带宽设得太窄反而会让群延时特性变差。4.3 校准项怎么选不是所有项目都需要全套校准AD936X 的校准流程在官方驱动里是分项的包括 TX 校准、RX 校准、VCO 校准、基带 DC 偏置校准等。驱动里通常会有一个校准掩码或者开关函数允许你按需开启。很多人的习惯是全部开启图省心。但实际在项目中精简校准项能省下一大笔初始化时间对 TDD 模式的快速切换有直接收益。全校准的特点是稳妥但时间不可控按需校准的特点是快但前提是你对当前的温度、频点和链路状态有把握。具体的取舍逻辑大概是VCO 校准是必须的只要频点变化就必须跑DC 偏置校准在温度漂移明显或者更换增益状态之后建议跑TX 校准和 RX 校准在第一次上电时跑一次如果后续频点变化不大比如只偏移几十 MHz可以按需延长校准周期。这个策略在工程上是成熟的因为同一块板子上射频链路的 I/Q 不平衡特性在温度相对稳定时变化很慢。在 Linux 驱动中校准的控制节点在 debugfs 下面。你可以手动关掉某个校准项来测试初始化时间的变化# 查看当前校准状态 cat /sys/kernel/debug/adi_ad9361/debug_reg # 手动执行一次全校准 echo calibrate /sys/kernel/debug/adi_ad9361/debug_reg这段命令说明的是 debugfs 下存在这类控制入口实际节点名称可能与内核版本有关。当你只需要做快速验证时通过 debugfs 手动触发校准比每次改配置都重启驱动要高效得多。5. 配置驱动时的五个高频踩坑点现象、原因与解决5.1 芯片 ID 一直读不对SPI 时序和模式不匹配现象驱动加载时报 AD936X 初始化失败打印出的 chip id 地址是 0xFF 或者 0x00。原因AD936X 的 SPI 是支持三线或四线模式的而且对 SPI 的极性和相位有特定要求。最常见的问题出在 SPI 模式选择上AD936X 需要的是 SPI Mode 0CPOL0, CPHA0但很多人的 MCU 或者 FPGA SPI 控制器默认是 Mode 3或者他们在接设备树时没指定 spi-cpol 和 spi-cpha 属性。解决先确认硬件上 AD936X 的 SPI 引脚有没有被别的器件占用然后用示波器抓一下 SPI 时钟和数据线的电平关系确认主机侧确实是 Mode 0。在 Linux 设备树里显式加上 spi-cpol 和 spi-cpha 属性就能解决一部分问题。另一个可能原因是片选信号极性搞反AD936X 的 CS 是低有效如果你的片选在默认状态下一直是低那每次读写都会命中但数据完全乱掉。5.2 设置频点之后发现接收信号镜像严重校准没跟上现象设置 2.4GHz 的接收频点灌进去一个 2.401GHz 的单音FFT 结果在 2.399GHz 也看到一个镜像分量幅度只比主信号低 20dB 左右。原因这是 I/Q 不平衡校准失效的典型表现。RF 链路里 I 和 Q 两路的幅度和相位不可能绝对一致芯片需要内部校准来补偿。如果你改了 LO 频点、换了模拟滤波带宽或者经历了大的温度变化旧的校准参数已经不适用。解决在改完频点或者带宽之后显式触发一次 RX 校准。在驱动代码里每次 ad9361_set_rf_freq 调用后跟一个校准调用。如果还是出现镜像检查参考时钟是否干净参考时钟上的杂散会直接恶化 I/Q 校准效果。5.3 TX 输出功率低或者波形失真TX 校准的功率探测器没有正确配置现象TX 输出功率比预期低 6dB或者发射频谱明显出现非线性分量。原因AD936X 的 TX 校准过程需要一个功率探测器power detector驱动通过它观察 TX 通路的实际输出幅度来修正增益和偏置。如果探测器没有打开或者探测器的配置和你的 TX 衰减设置不匹配校准结果就是错的。另一个常见原因是 TX 的衰减值设得太大导致探测器工作在线性范围之外。解决先把 TX 衰减设到一个中间值比如 20dB然后重新跑 TX 校准。校准完成后再按需要调整衰减值。注意调整衰减值本身不需要重新校准因为衰减是在校准之后加在通路上的。5.4 采样率设置后驱动报错没有落在可用的时钟分频网格上现象尝试设置一个采样率比如 36Msps驱动返回错误或者读回来的实际采样率和设置值不一致。原因AD936X 的内部时钟树有固定的分频结构ADC 采样率、滤波器速率、数据接口速率之间存在确定的整数倍关系不是任意值都能配置。驱动会按照目标采样率向上取最近的可用值但如果目标离可用值太远直接报错。解决先查你目标采样率对应的可用分频组合参考数据手册里的时钟树章节常见的可用采样率比如 30.72Msps、40Msps、61.44Msps 这种对 FPGA 时钟也友好。如果你一定要用某一个特定值确认这个值能通过整数分频从参考时钟推到否则别硬来。5.5 初始化时间太长校准时序被放在了关键路径上现象系统上电到 AD936X 能开始收发数据耗时超过 1 秒在一些要求快速启动的 TDD 场景下直接不可用。原因初始化默认启用了全部校准项其中某些校准时序比较长而且驱动默认是同步等待校准完成。解决为快速启动场景裁剪校准项只保留 VCO 校准和必要的 DC 校准把 RX/TX 的 I/Q 校准放到后台异步执行。在官方驱动里可以通过修改初始化参数中的校准掩码来实现。实测下来快速模式可以压到 200ms 以内代价是首次收发的信号质量可能差一些但等后台校准完成后会自动改善。6. 进阶在 FPGA 端验证 AD936X 配置效果的实用技巧配置完 AD936X怎么确认它真的工作在正确的状态一种靠谱的思路是在 FPGA 端实现一个简单的环路测试把 TX 数据经 FPGA 发出去然后从 RX 收回来通过比对收发数据判断链路是否完整。这个方法不需要额外的仪器硬件上只要能环回就行。具体做的时候在 FPGA 里生成一个单音正弦波的基带 I/Q 数据经过 TX 通路发射再把接收到的 I/Q 数据做 FFT看频点幅度是否正常。为了避免信号泄漏到天线端造成干扰可以加一个射频开关或者衰减器把 TX 输出直接连到 RX 输入形成内部环回。实际操作里我会在 FPGA 里放一个小的调试模块这个模块能产生三种信号连续波单音、线性调频信号、伪随机序列。单音用于验证频点和增益线性调频用于验证带宽和滤波器响应伪随机序列用于验证数据通路有没有符号错位。每次改完 AD936X 配置先用单音看频点对不对再用线性调频看带宽边缘衰减是否合理。// 伪代码FPGA 内生成单音 I/Q 测试数据 // 参数频率控制字 fcw, 相位累加器 acc always (posedge clk) begin acc acc fcw; i_data cos_lut[acc[31:22]]; // 查表得到 I 路数据 q_data sin_lut[acc[31:22]]; // 查表得到 Q 路数据 end查表方式生成单音是实现成本最低的方法LUT 深度 1024 点足够覆盖 40Msps 采样率下的常见测试频点。FPGA 里做 FFT 可以直接用 Xilinx 的 FFT IP 核点数设 4096窗函数选 Hann能有效抑制频谱泄漏方便观察镜像和杂散。我记得自己调试某块板子的时候就是用这个方式发现 TX 校准配置错误导致发射频谱在中心频点两侧出现两个明显的杂散峰重新校准后杂散掉了 40dB。这套验证流程的价值在于当你手里的频谱仪不够或者测试环境受限时它至少能帮你判断配置是否基本正确。整个 AD936X 配置调试的过程说到底就是一个反复验证和校正链路参数的过程。我个人的习惯是每改一组关键参数就做一次完整的链路自检哪怕只是简单看一下 I/Q 幅度和相位差也不要等到问题严重了才去排查。配置驱动这条路没有捷径但如果你把自己的调试流程固定下来很多问题都能在几分钟内定位。希望这篇配置文件驱动的思路能帮你在 AD9361 上少走一段弯路顺利把波形跑起来。本文还有配套的精品资源点击获取
返回列表