ubuntu 16.04修复固件刷新失败的LimeSDR-USB V1.4

最近在使用LimeSDR捣鼓软件定义无线电,结果在刷新固件的过程中,莫名失败,导致无法识别硬件。

使用LimeUtil检查硬件,出现如下结果:

$ sudo ./LimeUtil --find
  * [WestBridge , media=USB 2.0, module=STREAM, addr=04b4:00f3, serial=0000000004BE]

之后就再也无法通过

$ sudo ./LimeUtil --update

更新固件了,一直失败。

修复方法

首先确定LimeSDR硬件版本,这个一般刻印在主板的边缘,如下图箭头指向的地方:

v1.4版本的LimeSDR

这一步骤的目的是确认稍后我们需要更新到主板上的镜像,我们的是1.4版本,因此到http://downloads.myriadrf.org/project/limesuite上找到最新日期的目录,然后在这个目录下找到对应版本的镜像,比如我就需要http://downloads.myriadrf.org/project/limesuite/18.02/LimeSDR-USB_HW_1.4_r4.0.img这个镜像(当前日期最新)。如果跟我一样是更新失败导致的,可能在本地的~/.local/share/LimeSuite/images/目录下已经存在相应的文件,比如~/.local/share/LimeSuite/images/18.02/LimeSDR-USB_HW_1.4_r4.0.img

接下来找到J17跳线,如下图箭头指向的位置:

v1.4版本的LimeSDRJ17跳线位置

放大图像,可以看到J17跳线的位置,默认情况下跳线是联通的。这个跳线旁边印着“FX3 BOOT”字样。这个跳线在断开的时候,重新加电的时候,芯片会恢复到刷机模式,这个模式下,我们可以使用Cypress提供的固件更新工具刷新固件(LimeSDR使用的USB 3.0芯片是Cypress提供的)。

因此我们需要先断开USB设备的供电,然后拔除J17跳线,然后连接USB设备,等待差不多5S左右,插上J17跳线。(J17跳线可以在刷机完成后再插上的,但是由于刷机完成后,芯片会自动重置,因此建议在芯片启动到刷机模式之后,就把J17跳线插上,可以减少一次重启。

注意:这个软件是从Cypress官网下载的,是整合在EZ-USB FX3 SDK v1.3.3 for Linux这个SDK里面的,整个包非常大,我们只需要里面的其中一个工具包,可点击此处下载已经提取的工具包,下载完成后,解压缩到目录,然后执行如下命令安装工具包:

$ cd ~

$ wget http://www.mobibrw.com/wp-content/uploads/2018/02/cyusb_linux_1.0.4.tar.gz

$ tar -zxvf cyusb_linux_1.0.4.tar.gz

$ cd cyusb_linux_1.0.4
 
$ sudo apt-get install libqt4-dev

$ sudo ./install.sh

#执行命令
$ cd bin && ./cyusb_linux

在出现的界面中参考如下操作:

选完文件后,出现如下图的界面,点击“Start Download”刷新镜像

刷新完成后,设备自动重启,会从设备列表中丢失,关闭窗口即可。

执行如下命令,可以看到设备已经成功的切换到正常模式了,如下:

$ sudo ./LimeUtil --find
  * [LimeSDR-USB, media=USB 3.0, module=FX3, addr=1d50:6108, serial=0009060B00460B22]

完成后,需要执行

$ sudo ./LimeUtil --update

升级一下FPGA的固件。

注意,执行上面的操作之后,可能正常运行,也可能依旧不能正常工作。如果出现如下图的情况:

注意最后的输出:

[13:30:27] INFO: Connected Control port: LimeSDR-USB FW:4 HW:4 Protocol:1 GW:0.0 Ref Clk: -0.00 MHz

明显是没有正确的读取到FPGA固件信息。

正常情况下应该是如下输出:

[14:04:19] INFO: Reference clock 30.72 MHz
[14:04:19] INFO: Connected Control port: LimeSDR-USB FW:4 HW:4 Protocol:1 GW:2.14 Ref Clk: 30.72 MHz

这种情况是由于固件自身的BUG导致的,固件没有正确的初始化完成,初步估计是USB固件与FPGA固件初始化顺序导致的问题(这个现象应该是USB供电导致的,如果是独立供电,应该是FPGA优先于USB芯片启动,而不会出现此问题)。需要重置一下USB接口才可以。
首先加电等待10S以上,让芯片内部完成初始化。然后在LimeSuiteGUI界面中断开USB设备的连接(USB线或者外接触供电不要断开),然后按下主板上的FX3 RST触点开关,如下图:

上述操作有时需要多试几次才行,后续的版本是否会修复这个问题,暂时未知。
也可以从Linux系统发起重置命令:

$ sudo pip install --upgrade pip

$ sudo pip install pyusb

然后使用如下脚本:

#!/usr/bin/env python
from usb.core import find as finddev
dev = finddev(idVendor=0x1d50, idProduct=0x6108)
dev.reset()

执行脚本:

$ sudo python usb_reset.py

另外貌似上面的问题,也可以插上设备后,不要操作设备,等3到5分钟,再操作也可正常使用,难道是硬件初始化时间需要这么长时间?

目前测试发现,使用v17.06.0版本的LimeSuitGUI配合对应的LimeSDR-USB_HW_1.3_r3.0.imgLimeSDR-USB_HW_1.4_r2.8.rbf,是目前最稳定的匹配版本。这两个可以从本站下载:推荐使用LimeUtil刷新的固件

最新版本的固件,然后外接一个12V的电源的情况下(建议12V,目前测试5V供电的情况下,问题依旧不是太好),可以很好的改善启动状况以及稳定性,如果是带外壳的版本,可能没有焊接额外供电接口出来,也不方便焊接这个接口,有些外壳,由于没有预留足够空间,没办法额外供电。这种情况下,可以焊接一个导线出来,目前使用的是淘宝上买的“DC电源线 母座转接线 适用于5.5x2.1mm 25cm长 线径3.5mm”,如下图:

供电的话,外接一个12V变压器即可,比如路由器的,也可以在淘宝购买。

参考链接


发布者

《ubuntu 16.04修复固件刷新失败的LimeSDR-USB V1.4》上有2条评论

  1. 博主您好,我也遇到了这个问题,WEST Bridge,无法识别,按照教程也没解决问题,可以私聊请教嘛,谢谢了

    1. 出现 "WestBridge",说明固件已经损坏了,固件启动之后,没有重置USB的设备,但是USB芯片部分还是工作正常的,利用USB芯片强制去刷新固件来实现恢复,这部分应该不难的。

回复 马德壮 取消回复

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