AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核

这个博客和之前的博客

前几年一直都有写博客的习惯,由于上了高中要住校,所以我之前的博客直接废掉了。甚至到了高三我都忘了还有博客这回事。。。之前写的好多东西都被腾讯云(?)还是阿里云删掉了。之前的博客主要记录了我研究基于FPGA的GameBoy模拟器的一些心得。最近省了好久的钱,买了一个开发板和一台频谱仪开始学习AD9361,花了接近八千元。花这么多钱学到的东西,有很大的必要把他们记录下来。于是就又有了一个新的博客。以下的实验内容都在我搭建好这个博客之前完成,搭建博客花了我整整一天。这是这个新博客的第一篇文章,我在写这篇文章的时候,才刚刚提交备案。不知道为什么腾讯云要完成域名的实人认证三天后才能备案。。。废话不多说,进入正题。

体验Out Of Box例程

这块开发板是在淘宝买的,决定买这块开发板前,我发现闲鱼上有一家店在卖ADI的AD-FMCOMMS3-EBZ这款FMC模块的PCB。PCB当然是从ADI的官网下载Gerber后找板厂打印的,要200元。我看了看这款板子的BOM,主要成本集中在几个数模器件、收发器、Balun和SMA接口上。在我去立创商城逛了一圈后算了下,PCBA成本大概在1200元左右。但是考虑到焊接难度(板子上大量密集的0201阻容元件,我徒手最多焊0402)、AD9361二手芯片的风险和没有回流焊机的风险,我还是决定买一个便宜一点的平台。这是我的开发板。

O1CN01ziynj91uY202xWb0H 22176048 935x1024 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
我的开发板长这样

到手后,打开官方修改过的,开源Windows平台SDR软件SDRSharp,在RX0接上天线,可以看到我这边的FM频谱图、收听FM广播。我家住在9楼,信号挺蛋疼的。。。

qq tu pian 1024x347 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
频谱图,可以在电脑上收听FM

除了通过以太网通信的SDRSharp,还可以用ADI官方的IIO Oscilloscope,用这个软件需要通过USB直接连接到PC,还需要安装ADI提供的USB驱动。接下来用几张图记录一下最基础的测试方法。

image 27 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
关闭TX的低功耗(powerdown)模式,然后开发板连着铝外壳会开始发热
image 1024x559 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
看上去比SDRSharp专业多了
image 2 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
设置通道和坐标系,这个是通道0的时域
image 3 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
发射和接收的设置
image 4 1024x559 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
单音测试!我的天线不行,有明显的谐波。可以看到,发射的单频点和我们的设置一样,在2400+0.2M
image 5 1024x559 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
星座图:)

SDRSharp和IIO Oscilloscope,都是从卖家已经下载到开发板上的Linux上读取数据的。也就是说,如果我写的程序下载进去后,这两个软件都是用不了的。。。我只能用另一块NH7020或者频谱分析仪来看发射的信号。

移植ADI库和IP核

ADI为AD9361提供了IP核的HDL源码和TCL文件以便我们编译IP核,我们要用ADI提供的TCL脚本来编译和创建Vivado项目。现在去github上能下载到的最新版本IP核,官方是强烈推荐用Vivado 2019.1的。考虑到Xilinx每次更新Vivado版本都会更新所有IP核,所以我另外安装了Vivado 2019.1。我在整个项目编译好之后用Vivado 2020.1升级项目也可以跑通。在下面的链接可以下载到最新的IP核源码。

https://github.com/analogdevicesinc/hdl

/hdl/projects/scripts/adi_project_xilinx.tcl的开头写了当前建议使用的Vivado版本。想用最新版可以在TCL输入

set env(ADI_IGNORE_VERSION_CHECK) 1

解压好之后,先编译几个IP核,编译的方法是,用TCL SHELL进入/hdl/library/下对应IP核的目录,执行*_ip.tcl这个脚本。axi_ad9361这个IP核。然后根据自己的开发板/模块,在/hdl/projects选择合适的文件夹,进入,运行system_project.tcl这个脚本,就会自动建立项目了。

image 15 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
要编译的IP核有这些
image 13 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
以axi_ad9361为例,编译ip核的方法
image 14 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
能用上示例官方推荐的板子那是最好,省事。
如果用不了,可以选择接近自己FPGA器件的开发板。
image 16 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
成功得到项目文件

得到项目文件之后,直接打开,我用的的不是官方推荐的开发板,所以需要修改一下XDC文件。为了体验Vitis IDE,我用Vivado 2020.1升级了项目。生成比特流文件后,生成xsa文件,在Tools下可以打开Vitis。

image 17 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
生成xsa文件

打开Vitis,用刚刚生成的xsa文件新建项目

image 18 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核

一路默认即可,建立一个无操作系统的Hello world工程,然后直接Build,和SDK差不多。然后右键项目 Run As->Run Configurations…,如下图所示,勾选Program FPGA。然后插上串口和JTAG,打开串口,下载。

image 22 1024x499 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
image 20 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
下载成功!

接下来我们要移植官方为Zynq编写的C语言库和示例工程。

下面是在软核/Zynq上面跑的,ADI提供的示例工程,移植进去就可以用。

https://github.com/analogdevicesinc/no-OS/tree/master/ad9361/sw

直接把项目加进Vitis,然后把console_commands和platform_xilinx两个文件夹里的代码移动到根目录下。然后打开config.h,根据自己的情况修改一下宏定义。

image 23 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核

然后直接Build,下载程序。

image 26 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核
初始化完成!可以基于这个工程写自己的SDR程序了!

我用最新版库下载进去会提示:

image 24 - AD9361学习笔记(一)体验OOB例程、移植ADI库和IP核

在ADI官方论坛逛了好久,找到解决方法,在main.c的参数配置里把default_init_param这个结构体的一个参数改一下就行了:

2, //digital_interface_tune_skip_mode

具体起什么作用还有待研究。

发表评论

电子邮件地址不会被公开。 必填项已用*标注