USRP 套件在windows下的快速引入

📅 发布时间:2026/9/17 23:44:20
USRP 套件在windows下的快速引入
新增补充内容经过一些适用目前认为相同配置的计算机windows的B210 稳定IO能力是Linux的60%左右。尽管如此由于Linux并不是大多数人的首选OS在windows下使用B210还是有意义的。目前来看游戏笔记本windows下win10,11处理20M的IQ数据问题不大再高一点就必须上Linux了。在我的专栏《SDR业余软件无线电》中详细介绍了笔者和朋友们的工作室探索使用C/C单一工具链走通SDR全流程的尝试并挑战了56MHz 数据的CPU实时处理, 以及共享内存驱动的单路 6GBps, 多路20GBps的吞吐极限 。感兴趣的朋友可以移步专栏仔细阅读免费文章。同时本博客的技术文章大部分都配有源码依托CSDN的gitcode托管可参考查阅。文章目录新增补充内容[TOC]1 USRP的加载流程2 windows下的讨巧配置2.1 USB驱动2.2 安装配置PothosSDR2.2.1 安装PothosSDR2.2.2 拷入或者下载FPGA镜像2.2.3 设置环境变量2.3 设置MTU2.4 安装python2.5 烧写FLASH2.6 运行gqrx测试效果2.7 运行校准3 搭建第一个GNU-Radio实验4 搭建VC开发环境5 mingw Qt 编译器6 后记最近帮朋友一起研究了USRP系列硬件的上位机配置USRP在Linux下非常友好在windows下就不太友好了。还是踩了几个坑我把必要的文件打包到云盘。链接https://pan.baidu.com/s/1rMJyQEYQHCI8k8qEXsHKyQ: 提取码:12341 USRP的加载流程朋友公司有B210、N210等板子. B210不通过网络接口因此只要驱动安装好供电、速率都搞定了就妥了。另外B210射频部分和基带部分是整合好的靠AD936X系列芯片有些兼容板卡在936X的小系列上偷工减料直接从射频到基带集成化程度高。网络板如N210X310等是带子母板的通过千兆或者万兆网连接,可根据需求换不同的射频子板灵活性好。驱动USB版需要1. 识别USB2.传送FPGA固件即编译好的门文件。驱动网络版需要1. 加载网络。2.传送FPGA固件。USRP的驱动UHD(USRP Hardware Driver)对各类接口支持的很好只要环境变量设置好在Linux下默认设置无需操作就会统一自动执行下列步骤枚举设备。兼容性检查如果是带有Flash的板卡如X300系列会检查Flash内的FPGA固件版本和上位机UHD是不是兼容。如果不兼容就会提示用户下载相应版本并上传固件uhd_image_loader)。加载网络接口一旦设备兼容检查通过根据–args“typeXXX,addrXXX” 参数选定的当前设备检查是不是需要加载 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会超过FastSendDatagramThreshold导致传输延迟超过实时控制的需求。此时就会获得警告。在发射时会不断提示下面的错误即使采样率很低发射也会断续、卡顿。[Error] [tx_flow_ctrl_ack] timeout getting a send buffer因此要双击PothosSDR\share\uhd下的FastSendDatagramThreshold.reg或者修改注册表Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AFD\Parameters] FastSendDatagramThresholddword:00002000x310建议设置为81920x2000。采样率不要超过传输能力否则会出现错误提示。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 安装配置PothosSDRPothosSDR是一款软件无线电的一揽子方案可以支持市面上大部分的大众SDR产品免去了环境配置、编译的大部分工作可谓居家必备。2.2.1 安装PothosSDR我安装的是 PothosSDR-2020.01.26-vc14-x64,对应的UHD 镜像为 3.15。** 注意错误的镜像版本会影响到使用 **也可以下载最新版https://downloads.myriadrf.org/builds/PothosSDR/安装后文件夹与Linux的usr文件夹类似2.2.2 拷入或者下载FPGA镜像环境变量基本都设置好了不过share里木有images文件夹因此要把对应版本的images拷贝过来。拷贝过来后文件夹这个样子执行脚本uhd_images_downloader.py也可以直接下载。2.2.3 设置环境变量环境变量中已经有了UHD_PKG_PATH 路径到\Pothos安装文件夹 VOLK_PREFIX 路径到\Pothos安装文件夹如果是要使用带有射频交换网的高级板子比如X310的FPGA内可拖动模块还要新加上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比如8000netsh interface ipv4 set subinterface 本地连接 1 mtu8000 storepersistent当然如果没有专用于USRP的网卡建议把 storepersistent 去掉以免影响上网。设置为8000的MTU同时也要确保注册表的UDP快速传输门限也得到了修改Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AFD\Parameters] FastSendDatagramThresholddword:000020002.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.exe2.5 烧写FLASH只有具备FLASH的板子要看这个步骤。B210每次uhd驱动加载时会自己处理的当然也可以执行。获取设备uhd_find_devices.exe烧写uhd_image_loader.exe --argstype类型名,addrX.X.X.X烧完后重启板卡运行uhd_usrp_probe.exe即可看到板卡的参数。如果遇到问题或者警告其提示信息里会有详细的应对说明不用慌。2.6 运行gqrx测试效果到了这一步即可运行gqrx啦注意音频设备里面我的计算机有两个Default选择第一个会崩溃Bug启动开始菜单里面的 PothosSDR 的 gqrx听听广播2.7 运行校准每个硬件在0-6G范围内的射频特性不一样由工艺决定。UHD有校准功能可以尽可能校准各类参数。这一步比较耗时间也可以不做。用射频直连线连接RXTX把外接的GPS、时钟如果有的话都接好而后运行uhd_cal_rx_iq_balance.exeuhd_cal_tx_dc_offset.exeuhd_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即可。但受到编译器的版本影响若使用了不同版本的Visual C编译器则主要考虑使用C接口API而不是C…C接口API因为boost和stl库的二进制内存结构差异会导致诡异的runtime error具体示例代码参考https://github.com/EttusResearch/uhd/tree/master/host/examples这里需要注意的是usrp的C支持需要boost库。可以参考https://www.ettus.com.cn/peixun/33/5 mingw Qt 编译器如果使用了mingw编译器的Qt比如 msys2的Qt请务必注意要把 PothosSDR Include里的 pthread.h 改名为pthread.hpp否则会因为Mingw配置不同导致失败。同时由于boost库是C库即使使用了mingw编译器的boost也不代表可以用 Pothos的libuhd因为 它的libuhd是VC 编译的。有两个解决方案1 自行编译libuhd2 使用 libuhd 的 C API。6 后记我把必要的文件打包到云盘。链接https://pan.baidu.com/s/1rMJyQEYQHCI8k8qEXsHKyQ: 提取码:1234