最近帮朋友一起研究了USRP系列硬件的上位机配置,USRP在Linux下非常友好,在windows下,就不太友好了。还是踩了几个坑,我把必要的文件打包到云盘。
链接https://pan.baidu.com/s/1rMJyQEYQHCI8k8qEXsHKyQ: 提取码:1234
1 USRP的加载流程
朋友公司有B210、N210等板子. B210不通过网络接口,因此只要驱动安装好,供电、速率都搞定了,就妥了。另外,B210射频部分和基带部分是整合好的,靠AD936X系列芯片(有些兼容板卡在936X的小系列上偷工减料)直接从射频到基带,集成化程度高。网络板,如N210,X310等,是带子母板的,通过千兆或者万兆网连接,可根据需求换不同的射频子板,灵活性好。
驱动USB版,需要1. 识别USB,2.传送FPGA固件,即编译好的门文件。
驱动网络版,需要1. 加载网络,用的是RFNoC,即片载射频网络。2.传送FPGA固件。
USRP的驱动UHD(USRP Hardware Driver)对各类接口支持的很好,只要环境变量设置好(在Linux下默认设置无需操作),就会统一自动执行下列步骤:
- 枚举设备。
- 兼容性检查:如果是带有Flash的板卡(如X300系列),会检查Flash内的FPGA固件版本和上位机UHD是不是兼容。如果不兼容,就会提示用户下载相应版本并上传固件(uhd_image_loader)。
- 加载网络接口:一旦设备兼容检查通过,根据–args=“type=XXX,addr=XXX” 参数选定的当前设备,检查是不是需要加载 RFNoC。如果需要,到/usr/share/uhd/rfnoc文件夹下加载。
- 加载固件:如果是不带FLASH的版本,则加载/usr/share/uhd/uhd/images下对应型号的固件。一般对于带FLASH的版本,这个时候设备就Ready啦。
- 加载校准文件:校准文件是运行uhd_cal_rx_iq_balance、uhd_cal_tx_dc_offset、uhd_cal_tx_iq_balance三个工具后为当前设备产生的精确校准文件,用于IQ均衡、直流去除等等。这一步不是必须的。
这个步骤比较通用,但对于网络板的板子,有些额外的细节要注意。
- 网卡MTU限制。MTU是最大传输单元,原本越大越好。但是,太大的MTU会导致传输延迟超过实时控制的需求。此时,就会获得警告。在发射时,会不断提示下面的错误,即使采样率很低,发射也会断续、卡顿。
[Error] [tx_flow_ctrl_ack] timeout getting a send buffer
- 采样率不要超过传输能力,否则会出现错误提示。IQ基带双字节格式,1个样点就占 4 字节,32比特。因此,Mbps的带宽要除以32,基本得到最大单工速率。双工,还要继续/2。若是浮点型数据,则要除以64。USB3.0相对1Gbps网卡而言还是好多了。
2 windows下的讨巧配置
对于常见的Linux发行版,USRP的驱动UHD(USRP Hardware Driver)基本都是傻瓜一条命令搞定,比如apt-get, yum, pacman等等,连着开发包、python、GNU-Radio、GQRX等等通吃,基本没有什么门槛。一旦安装完毕,默认的 /usr/share/uhd文件夹下,就有对应版本的RFNoC、images两个文件夹,运行uhd_usrp_probe即可完成测试。
但在windows下,就很麻烦了。经过一番折腾,把较优方案写在下面。
2.1 USB驱动
windows下,若是USB的板卡,需要安装USB驱动。我在网站 https://www.ettus.com.cn/Download/software/windows_install.html 下载windows的USB驱动。
注意,win-10下安装没有问题,win7没有试过。据说会有问题。
这篇教程https://www.ettus.com.cn/peixun/33/也有帮助,但只看驱动部分即可。
2.2 安装配置PothosSDR
PothosSDR是一款软件无线电的一揽子方案,可以支持市面上大部分的大众SDR产品,免去了环境配置、编译的大部分工作,可谓居家必备。
2.2.1 安装PothosSDR
我安装的是 PothosSDR-2020.01.26-vc14-x64,对应的UHD 镜像为 3.15。
** 注意,错误的镜像版本会影响到使用 **
安装后,文件夹与Linux的usr文件夹类似:
2.2.2 拷入FPGA镜像
环境变量基本都设置好了,不过share里木有images文件夹,因此要把3.15版本的images拷贝过来。拷贝过来后,文件夹这个样子:
2.2.3 设置环境变量
环境变量中,已经有了
UHD_PKG_PATH= 路径到\Pothos安装文件夹
VOLK_PREFIX= 路径到\Pothos安装文件夹
如果是网络板子,还要新加上
UHD_RFNOC_DIR=路径到\rfnoc
新加入后,别忘记重启cmd和其他程序。
2.3 设置MTU
如果TX没有问题,跳过这一步。非网卡的也不用看。若一直报错:
[Error] [tx_flow_ctrl_ack] timeout getting a send buffer
则执行:
- 查看网络连接
netsh interface ipv4 show subinterfaces
- 设置MTU,比如1028
netsh interface ipv4 set subinterface "本地连接 1" mtu=1028 store=persistent
当然,如果没有专用于USRP的网卡,建议把 store=persistent 去掉,以免影响上网。
2.4 安装python
安装python2.7,用于GNURadio。
https://www.python.org/downloads/windows/
为后续方便,还要安装
GTK2-Runtime Win64,在链接https://pan.baidu.com/s/1rMJyQEYQHCI8k8qEXsHKyQ: 提取码:1234 ,文件名
gtk2-runtime-2.22.1-2014-02-01-ts-win64.exe
2.5 烧写FLASH
只有具备FLASH的板子要看这个步骤。B210每次uhd驱动加载时,会自己处理的,当然也可以执行。
获取设备
uhd_find_devices.exe
烧写
uhd_image_loader.exe --args="type=类型名,addr=X.X.X.X"
烧完后,重启板卡,运行uhd_usrp_probe.exe即可看到板卡的参数。如果遇到问题或者警告,其提示信息里会有详细的应对说明,不用慌。
2.6 运行gqrx测试效果
到了这一步,即可运行gqrx啦!
注意,音频设备里面,我的计算机有两个Default,选择第一个会崩溃(Bug?)
启动开始菜单里面的 PothosSDR 的 gqrx,听听广播!
2.7 运行校准
每个硬件在0-6G范围内的射频特性不一样,由工艺决定。UHD有校准功能,可以尽可能校准各类参数。这一步比较耗时间,也可以不做。用射频直连线连接RX,TX,把外接的GPS、时钟(如果有的话)都接好,而后运行
uhd_cal_rx_iq_balance.exe
uhd_cal_tx_dc_offset.exe
uhd_cal_tx_iq_balance.exe
进行校准。该工作不是必须,且只用做一次。做完后,在“我的文档”里,会产生几个csv文件,存储了全频段范围的微调参数。下次加载uhd驱动时,程序会自动读取。
3 搭建第一个GNU-Radio实验
运行 开始菜单的PothosSDR的GNURadio Companion,首次提示下载依赖,有点慢, 建议夜里挂机。经过两三次检查,即可顺利启动。万一启动不了,查看提示即可。
windows下的Companion和Linux差不多,不过,由于Pothos做了深度定制,支持的硬件多多。双击可以引入模块,我的计算机里,拖拽似乎不行。
4 搭建VC++开发环境
如果要使用UHD库的底层功能,还需要VC++或者GNUC++编译器。
设置Inlcude路径时,加入路径
PothosSDR\include
连接时,加入路径
PothosSDR\lib
最后,链接uhd.lib即可。
具体示例代码参考
https://github.com/EttusResearch/uhd/tree/master/host/examples
这里需要注意的是,usrp的C++支持需要boost库。
可以参考
https://www.ettus.com.cn/peixun/33/
5 后记
我把必要的文件打包到云盘。
链接https://pan.baidu.com/s/1rMJyQEYQHCI8k8qEXsHKyQ: 提取码:1234