要开始AD9371的裸机开发,首先需要准备好硬件和软件环境。硬件方面,你需要一块搭载AD9371的评估板,比如ADRV9371-W/PCBZ,搭配Xilinx Zynq平台(如ZCU102或ZCU106)。软件方面则需要安装以下工具链:
我建议先按照ADI官方文档搭建基础环境。实际操作中,最容易出问题的是Vitis工程的包含路径设置。你需要确保以下头文件路径正确包含:
c复制#include "myk.h"
#include "myk_ad9528init.h"
#include "adi_common.h"
ADI提供的MATLAB Profile Generator工具是配置AD9371的起点。打开工具后,你会看到一个图形化界面,需要重点关注这几个选项卡:
在"RF Parameters"标签页中,需要设置:
"JESD204B"标签页控制数据接口:
生成配置文件时,建议勾选"Generate all files"选项,这样会同时产生myk.c、myk.h和myk_ad9528init.c三个关键文件。
生成的myk.c文件包含AD9371的所有初始化配置,我们来看几个关键结构体:
c复制mykonosJesd204bFramerConfig_t rxFramer = {
0, /* Bank ID */
0, /* Device ID */
0, /* Starting Lane ID */
4, /* Number of ADCs */
32, /* Frames per multiframe */
1, /* Scrambling enabled */
1, /* External SYSREF */
0x03, /* Enabled lanes */
//...更多参数
};
这个结构体控制RX数据的组帧方式。其中frames per multiframe参数需要特别注意,它影响JESD链路的稳定性。我在项目中曾将这个值设为64导致链路不稳定,改回32后问题解决。
AD9371支持三种增益控制模式:
c复制typedef enum {
MGC, //手动增益控制
AGC, //自动增益控制
HYBRID //混合模式
} gainMode_t;
在AGC模式下,还需要配置峰值检测和功率测量阈值:
c复制mykonosPeakDetAgcCfg_t rxPeakAgc = {
0x26, /* apdHighThresh */
0x16, /* apdLowThresh */
//...其他阈值参数
};
这些阈值参数需要根据实际信号强度动态调整,过高的阈值会导致AGC响应迟钝,过低则可能引起振荡。
myk_ad9528init.c文件负责时钟芯片的初始化:
c复制ad9528pll1Settings_t clockPll1Settings = {
30720000, /* RefA频率 */
1, /* 参考选择 */
3, /* R分频 */
0, /* 电荷泵电流 */
1, /* PLL带宽 */
0, /* 复位分频器 */
122880000 /* VCXO频率 */
};
PLL1的配置决定了整个时钟树的基准。这里最容易出错的是VCXO频率设置,必须与实际硬件使用的晶振频率完全一致。
c复制ad9528outputSettings_t clockOutputSettings = {
53237, /* 输出使能位图 */
{0,0,0,2,0,0,0,0,0,0,0,0,2,0}, /* 输出源选择 */
//...其他参数
};
每个输出通道可以独立配置为PLL输出或SYSREF信号。AD9371通常需要:
在真实项目中,我总结了几个常见问题的解决方法:
如果JESD链路经常断连,可以尝试:
当时钟抖动过大时:
为了获得最佳射频性能:
我在最近一个5G小基站项目中,通过调整AGC的apdHighThresh参数,将接收机灵敏度提高了3dB。这需要结合频谱仪和信号发生器进行反复测试。