USRP B210 运行gnuradio时 FPGA固件版本冲突错误解决方法

本文详细记录了在使用USRP B210设备与Gnuradio进行调试过程中遇到的FPGA兼容性问题。通过更换Gnuradio版本和固件,最终解决了版本不匹配的问题,实现了设备的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事情起源于昨天拿到USRP后开始调试,结果整了一个下午都没解决这个问题。
昨天晚上自己思考了一下,觉得还是版本问题。

首先,uhd_find_devices和uhd_usrp_probe均可以正常运行,没有报错,固件正常加载,序列号也可看到。

teray@teray-X550JK:~$ uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501; UHD_3.15.0.HEAD-0-g4e06022c
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    serial: 86680AA
    name: Zhixun-wireless_B210
    product: B210
    type: b200
teray@teray-X550JK:~$ uhd_usrp_probe
[INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501; UHD_3.15.0.HEAD-0-g4e06022c
[INFO] [B200] Detected Device: B210
[INFO] [B200] Loading FPGA image: /usr/local/share/uhd/images/usrp_b210_fpga.bin...

可以看到固件加载完全正常,但是当我们使用apt安装的gnuradio-companion
出现报错如下:

RuntimeError: RuntimeError: Expected FPGA compatibility number 14, but got 16:
The FPGA build is not compatible with the host code build.
Please run:
 "/usr/lib/x86_64-linux-gnu/uhd/utils/uhd_images_downloader.py"

首先遇到这个不能慌张,不要按照上面所提示的运行固件下载器更新固件,因为那些下载的是最新版本的固件,对解决问题没有帮助。
到官方git上找一个比较古老的版本,比如on 17 May 2018发布的v3.11.1.0
解压后,在解压的目录使用sudo运行gnuradio

~/software/uhd_firm/uhd-images_3.11.1.0$ sudo gnuradio-companion

因为Gnuradio在运行UHD时,是从当前文件夹位置寻找固件上传给fpga使用的,这里也可能是因为没有映射好路径造成的,那么现在直接从这个文件夹运行,就可以找到固件,并且版本也与之对应
再次运行流程图

Generating: '/home/teray/\xe6\xa1\x8c\xe9\x9d\xa2/gnuradio projects/USRP/top_block.py'

Executing: /usr/bin/python -u /home/teray/桌面/gnuradio projects/USRP/top_block.py

linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown


(top_block.py:7109): IBUS-WARNING **: 11:47:52.488: The owner of /home/teray/.config/ibus/bus is not root!
-- Detected Device: B210
-- Loading FPGA image: /home/teray/software/uhd_firm/uhd-images_3.11.1.0/usrp_b210_fpga.bin... done
-- Operating over USB 3.
-- Detecting internal GPSDO.... No GPSDO found
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Performing CODEC loopback test... pass
-- Setting master clock rate selection to 'automatic'.
-- Asking for clock rate 16.000000 MHz... 
-- Actually got clock rate 16.000000 MHz.
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass
-- Asking for clock rate 40.000000 MHz... 
-- Actually got clock rate 40.000000 MHz.
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass

成功。
以上。

### USRP B210 的基本使用方法 #### 安装必要的软件包 为了使 USRP B210 正常工作,必须先安装 UHD (Universal Hardware Driver) 软件套件。完成 UHD 安装之后,还需要下载并加载相应的固件FPGA 镜像文件[^4]。 ```bash sudo apt-get install libuhd-dev libuhd-host uhd-tools uhd_images_downloader ``` #### 连接与初始化设备 连接好 USB 接口后,可以通过 `uhd_find_devices` 工具确认 USRP 是否被正确识别: ```bash uhd_find_devices ``` 如果一切正常,应该能看到有关所连 USRP 设备的信息输出。 #### 发送简单的波形信号 下面是一个 Python 示例脚本,用于生成正弦波并通过 USRP 发射出去: ```python import numpy as np from gnuradio import gr, uhd, blocks class TopBlock(gr.top_block): def __init__(self): super(TopBlock, self).__init__() # 设置参数 samp_rate = 1e6 carrier_freq = 915e6 # 创建源节点 - 正弦波发生器 src = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 100e3, 1) # 初始化 USRP 发射机对象 usrp_sink = uhd.usrp_sink( device_addr="", stream_args=uhd.stream_args('fc32') ) # 将发射频率设为目标载频 usrp_sink.set_center_freq(carrier_freq) usrp_sink.set_samp_rate(samp_rate) # 构建数据流图 self.connect(src, usrp_sink) if __name__ == '__main__': tb = TopBlock() try: tb.start() # 启动流图 input('Press Enter to quit...') finally: tb.stop() tb.wait() ``` 此代码创建了一个 GNU Radio 流程图,其中包含了正弦波的发生器作为信号源,并将其连接到 USRP SINK 组件以便于实际发送信号。注意这里假设已经成功安装了 GNURadio 和 PyBOMBS 或者其他方式获取到了所需的库支持环境。 #### 数据采集与分析 对于 RTLSDR 来说,在设置为特定采样率(如1.6 MHz)的情况下,能够持续不断地将样本传递给回调函数处理。而 ctx->both.buf[i] 使用 short 类型存储这些样本有助于简化后续操作逻辑,同也方便移植至其他平台如 USRP B210 上继续开发应用[^1]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值