对于 AD9361 和 AD9363,这两者在结构上基本一致,区别在于各自的调谐范围和信号的带宽不同,具体内容需要看数据手册。
AD936x 系列芯片参数的配置基本都是通过 SPI 接口来进行配置的,例如:通过 SPI 来设置 AD936x 芯片的本振频率,基带信号的采样率,选择最终信号接收和发送的端口等。
ad9361 寄存器配置流程如下图
AD9361寄存器较多,对于新手了解这些寄存器之后再写代码,比较困难而且也比较耗时几。所以可以使用ADI官方提供了AD936x Evaluation Software,用于生成初始化的脚本。开发者在此软件上进行配置,就可以完成初始化AD9361的工作了。再根据需要,修改收发频率,射频输出衰减,AGC/MGC控制,快速锁定等功能代码。
本实验,为了验证接收功能,所以只修改了接收频率,其他部分暂时都未进行修改。
首先打开配置软件, Run Project Wizard
选择器件AD9361,我先验证接收功能,所以使能RX1,关闭TX,设计选择的是差分信号,(工程配置文件这里,我一开始认知有点错误,同事们说用的1.92M和3.84M带宽进行采样,我找了半天也没找到这些选项。我就以为LTE3M其实是和后面的RX_sampling_Rate都是3.84M,是不是选择的参数和实际带宽有着某种对应关系?其实是不对的,需要仔细看后面配置页。)
进入下一页
REFCLK Path:AD9361参考时钟来源。Ext CLK into XTAL_N,这边选择一个40M的晶振。
REF_CLK_IN:AD9361工作的参考时钟频率,选择40MHz。
CLK_OUT:使用这个接口输出一个15.36M时钟接到FPGA上,FPGA根据这个时钟进行分频,然后作为后面的数据处理时钟。
进入下一页,,可以看到我们选择LTE3M,对应下面的TX和RX射频带宽为2.7M,发射和接收采样频率为3.84M。当然也可以自己定义模板。
接下来的滤波器设置,我们没有用到,保持默认即可
进入到数据接口配置页面,选择LVDS接口,Data_CLK_Rate变成的7.68M,包含IQ两路数据,
Rx LVDS Amplitude:这个是LVDS的差分压差设置,要根据具体的FPGA接口电平设置,一般选择150mV就可以。
接收频率设置为2.4G
生成脚本
脚本文件打开内容如下
这个配置文件里寄存器和写入的值才是有用的信息,还需要进行转换一下,从网上找到一个脚本,在虚拟机下执行以下就可以转换成下面的文件。前三位是寄存器,后两位是下入的值。
按照上面的流程配置完后,怎么都接收不到数据,检查了一下,15.36M的时钟也出来了,后来发现是这个ENSM设置有点问题,我查了一下寄存器配置
配置的值05,看看下面寄存器介绍,ENSM会切换到Alert状态,怪不得。所以只需要在SPI配置的最后一句 写入0x014=0x23,让9361进入到FDD状态不再出来。
建议不管你的系统是FDD模式还是TDD模式,这里都选用FDD模式,因为FDD模式可以实现TDD模式的功能(收的时候不发,发的时候不收)。在FDD模式下,也可以用ENABLE和TXNRX两个引脚控制收和发的开关,也相当于是实现了TDD的功能。
在验证配置是否成功时,还可以使用芯片的bist自测功能 ,在后面添加配置3F4,3F5,3F6三个寄存器,在FPGA上使用chipscope看采集到的波形。
这是我用信号源输出一个不带调制的单音信号,采集到的波形。接收配置成功。