SoapyLMS issue? Help identify please

Hello!

I’ve been doing some programming with SoapySDR in C on Windows and I’ve stumbled upon a strange issue - the call to make the SDR device would fail for me exactly every other time. At first I thought I was doing something wrong in the code, so I went into the Pothos distribution, fired up LimeUtil and got the same behaviour.

Here is the --info output:

Console output

C:\Program Files\PothosSDR\bin>SoapySDRUtil.exe --info
######################################################
## Soapy SDR – the SDR abstraction library ##
######################################################
Lib Version: v0.8.0-PothosSDR-2020.01.26-vc14-x64
API Version: v0.8.0
ABI Version: v0.8
Install root: C:\Program Files\PothosSDR
Search path: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/airspyhfSupport.dll (0.1.1-81ca737)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/airspySupport.dll (0.1.2-10d697b)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/audioSupport.dll (0.1.1-2ae84e3)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/bladeRFSupport.dll (0.4.1-1c1e8aa)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/HackRFSupport.dll (0.3.3-3c514ce)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/IrisSupport.dll (2019.07.0.1-423a351)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/LMS7Support.dll (19.04.1-538e186b)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/miriSupport.dll (0.2.6-5a9674c)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/netSDRSupport.dll (0.1.0-dc4e579)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/osmosdrSupport.dll (0.2.6-5a9674c)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/PlutoSDRSupport.dll (0.2.0-e28e4f5)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/RedPitaya.dll (0.1.1-3d576f8)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/remoteSupport.dll (0.5.2-6d9bd82)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/rtlsdrSupport.dll (0.3.1-8ba18f1)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/sdrPlaySupport.dll (0.3.0-14ec39e)
Module found: C:\Program Files\PothosSDR/lib/SoapySDR/modules0.8/uhdSupport.dll (0.3.6-47972ba)
Available factories… airspy, airspyhf, audio, bladerf, hackrf, iris, lime, miri, netsdr, osmosdr, plutosdr, redpitaya, remote, rtlsdr, sdrplay, uhd
Available converters…

  • CF32 → [CF32, CS16, CS8, CU16, CU8]
  • CS16 → [CF32, CS16, CS8, CU16, CU8]
  • CS32 → [CS32]
  • CS8 → [CF32, CS16, CS8, CU16, CU8]
  • CU16 → [CF32, CS16, CS8]
  • CU8 → [CF32, CS16, CS8]
  • F32 → [F32, S16, S8, U16, U8]
  • S16 → [F32, S16, S8, U16, U8]
  • S32 → [S32]
  • S8 → [F32, S16, S8, U16, U8]
  • U16 → [F32, S16, S8]
  • U8 → [F32, S16, S8]

Here is what I get when I try to --make a device for the first time and then every odd time as well:

Console output

C:\Program Files\PothosSDR\bin>SoapySDRUtil.exe --make=“driver=lime”
######################################################
## Soapy SDR – the SDR abstraction library ##
######################################################
Make device driver=lime
[INFO] Make connection: ‘LimeSDR-USB [USB 3.0] 90726074F283B’
[INFO] Reference clock 30.72 MHz
[INFO] Device name: LimeSDR-USB
[INFO] Reference: 30.72 MHz
[INFO] LMS7002M register cache: Disabled
driver=FX3
hardware=LimeSDR-USB
boardSerialNumber=0x74f283b
firmwareVersion=4
gatewareVersion=2.21
hardwareVersion=4
protocolVersion=1

And here is every other time:

Console output

C:\Program Files\PothosSDR\bin>SoapySDRUtil.exe --make=“driver=lime”
######################################################
## Soapy SDR – the SDR abstraction library ##
######################################################

Make device driver=lime
[INFO] Make connection: ‘LimeSDR-USB [USB 3.0] 90726074F283B’
e[1me[31m[ERROR] TransferPacket: Read failed (ret=0)e[0m
e[1me[33m[WARNING] Gateware version mismatch!
Expected gateware version 2, revision 21
But found version 0, revision 0
Follow the FW and FPGA upgrade instructions:
Lime Suite - Myriad-RF Wiki
Or run update on the command line: LimeUtil --update
e[0m
[INFO] Reference clock 10.00 MHz
[INFO] Device name: LimeSDR-USB
[INFO] Reference: 10 MHz
e[1me[31m[ERROR] TuneVCO(CGEN) - failed to lock (cmphl!=0)e[0m
e[1me[31m[ERROR] SetFrequencyCGEN(80 MHz) failede[0m
[INFO] LMS7002M register cache: Disabled
e[1me[31m[ERROR] TuneVCO(CGEN) - failed to lock (cmphl!=0)e[0m
e[1me[31m[ERROR] SetFrequencyCGEN(61.44 MHz) failede[0m
e[1me[31m[ERROR] TuneVCO(CGEN) - failed to lock (cmphl!=0)e[0m
e[1me[31m[ERROR] SetFrequencyCGEN(61.44 MHz) failede[0m
driver=FX3
hardware=LimeSDR-USB
boardSerialNumber=0x74f283b
firmwareVersion=4
gatewareVersion=2.21
hardwareVersion=4
protocolVersion=1

Should I build from source and use the latest version? Is this a know issue?

Thanks in advance.

I had too many problems with the SoapySDR C routines - I had to shift everything to the C++ routines to get around the bugs.

On Windows 10 with my LimeSDR-Mini - SoapySDRUtil.exe works perfectly every time.

Have you tried running LimeQuickTest.exe a few times - to see if you get some errors ?

Hello!

LimeQuickTest also fails exactly every other time.

I think I’d start by using the latest version of Lime Suite and then making sure the gateware and firmware are up-to-date also.

You could try running SdrGlut to see if things actually are working ever other time. Almost everything has to be working correctly for it to run correctly. A prebuilt exe is at -

Ok I’ve installed limesuite-git under Arch Linux and can confirm that the problem is not present there. Now I’ll need to find a way to compile it from source on Windows. Thanks!

Alright, I built LimeSuite from the sources under W10, ran LimeUtil --update, the update went well, but the issue still persists. Here is an example of two consecutive LimeQuickTest runs right after I’ve updated, unplugged and reconnected the device:

Console output

c:\Program Files (x86)\LimeSuite\bin>LimeQuickTest.exe
[ TESTING STARTED ]
->Start time: Sun Nov 8 04:18:53 2020
->LimeSuite version: 20.10.0-g1480bfea

->Device: LimeSDR-USB, media=USB 3.0, module=FX3, serial=00090726074F283B, index=0, HW=4, GW=2.23
Serial Number: 00090726074F283B
Chip temperature: 41 C

[ Clock Network Test ]
->FX3 GPIF clock test
Test results: 24425; 28181; 31937 - PASSED
->Si5351C test
CLK0: 17554 / 17554 - PASSED
CLK1: 17554 / 17554 - PASSED
CLK2: 17554 / 17554 - PASSED
CLK3: 17554 / 17554 - PASSED
CLK4: 17554 / 17554 - PASSED
CLK5: 17554 / 17554 - PASSED
CLK6: 17554 / 17554 - PASSED
->ADF4002 Test
Result: 10 - PASSED
->VCTCXO test
Results : 5112959 (min); 5113089 (max) - PASSED
->Clock Network Test PASSED

[ FPGA EEPROM Test ]
->Read EEPROM
->Read data: 12 08 03 12 08 03 02
->FPGA EEPROM Test PASSED

[ LMS7002M Test ]
->Perform Registers Test
->External Reset line test
Reg 0x20: Write value 0xFFFD, Read value 0xFFFD
Reg 0x20: value after reset 0x0FFFF
->LMS7002M Test PASSED

[ RF Loopback Test ]
Note: The test should be run without anything connected to RF ports
->Configure LMS
->Run Tests (TX_2-> LNA_L):
CH0 (SXR=800.0MHz, SXT=805.0MHz): Result:(-14.7 dBFS, 5.00 MHz) - PASSED
CH1 (SXR=800.0MHz, SXT=805.0MHz): Result:(-16.3 dBFS, 5.00 MHz) - PASSED
->Run Tests (TX_1 → LNA_W):
CH0 (SXR=1800.0MHz, SXT=1805.0MHz): Result:(-15.6 dBFS, 5.00 MHz) - PASSED
CH1 (SXR=1800.0MHz, SXT=1805.0MHz): Result:(-18.9 dBFS, 5.00 MHz) - PASSED
->Run Tests (TX_2-> LNA_H):
CH0 (SXR=2500.0MHz, SXT=2505.0MHz): Result:(-17.0 dBFS, 5.00 MHz) - PASSED
CH1 (SXR=2500.0MHz, SXT=2505.0MHz): Result:(-17.1 dBFS, 5.00 MHz) - PASSED
->RF Loopback Test PASSED

=> Board tests PASSED <=

Elapsed time: 2.07 seconds

c:\Program Files (x86)\LimeSuite\bin>LimeQuickTest.exe
[ TESTING STARTED ]
->Start time: Sun Nov 8 04:19:17 2020
->LimeSuite version: 20.10.0-g1480bfea

TransferPacket: Read failed (ret=0)
Gateware version mismatch!
Expected gateware version 2, revision 23
But found version 0, revision 0
Follow the FW and FPGA upgrade instructions:
Lime Suite - Myriad-RF Wiki
Or run update on the command line: LimeUtil --update

->Device: LimeSDR-USB, media=USB 3.0, module=FX3, serial=00090726074F283B, index=0, HW=0, GW=0.0
Serial Number: 00090726074F283B
Temperature internal ADC calibration failed
Chip temperature: 0 C

[ Clock Network Test ]
->FX3 GPIF clock test
Test results: 1; 0; 0 - PASSED
->Si5351C test
CLK0: 2 / 17554 - FAILED
CLK1: 2 / 17554 - FAILED
CLK2: 2 / 17554 - FAILED
CLK3: 2 / 17554 - FAILED
CLK4: 2 / 17554 - FAILED
CLK5: 2 / 17554 - FAILED
CLK6: 2 / 17554 - FAILED
FAILED
->ADF4002 Test
Result: 0 - FAILED
FAILED
->VCTCXO test
Results : 4 (min); 4 (max) - FAILED
FAILED
->Clock Network Test FAILED

[ FPGA EEPROM Test ]
->Read EEPROM
->Read data: 12 08 03 12 08 03 02
->FPGA EEPROM Test PASSED

[ LMS7002M Test ]
->Perform Registers Test
RegistersTestInterval(startAddr=0x82, endAddr=0x82) - failed
RegistersTestInterval(startAddr=0x82, endAddr=0x82) - failed
RegistersTestInterval(startAddr=0x84, endAddr=0x84) - failed
RegistersTestInterval(startAddr=0x84, endAddr=0x84) - failed
RegistersTestInterval(startAddr=0x85, endAddr=0x85) - failed
RegistersTestInterval(startAddr=0x85, endAddr=0x85) - failed
RegistersTestInterval(startAddr=0x86, endAddr=0x8c) - failed
RegistersTestInterval(startAddr=0x86, endAddr=0x8c) - failed
RegistersTestInterval(startAddr=0xa8, endAddr=0xac) - failed
RegistersTestInterval(startAddr=0xa8, endAddr=0xac) - failed
RegistersTestInterval(startAddr=0xad, endAddr=0xae) - failed
RegistersTestInterval(startAddr=0xad, endAddr=0xae) - failed
RegistersTestInterval(startAddr=0x100, endAddr=0x104) - failed
RegistersTestInterval(startAddr=0x100, endAddr=0x104) - failed
RegistersTestInterval(startAddr=0x100, endAddr=0x104) - failed
RegistersTestInterval(startAddr=0x100, endAddr=0x104) - failed
RegistersTestInterval(startAddr=0x105, endAddr=0x10b) - failed
RegistersTestInterval(startAddr=0x105, endAddr=0x10b) - failed
RegistersTestInterval(startAddr=0x105, endAddr=0x10b) - failed
RegistersTestInterval(startAddr=0x105, endAddr=0x10b) - failed
RegistersTestInterval(startAddr=0x10c, endAddr=0x114) - failed
RegistersTestInterval(startAddr=0x10c, endAddr=0x114) - failed
RegistersTestInterval(startAddr=0x10c, endAddr=0x114) - failed
RegistersTestInterval(startAddr=0x10c, endAddr=0x114) - failed
RegistersTestInterval(startAddr=0x115, endAddr=0x11a) - failed
RegistersTestInterval(startAddr=0x115, endAddr=0x11a) - failed
RegistersTestInterval(startAddr=0x115, endAddr=0x11a) - failed
RegistersTestInterval(startAddr=0x115, endAddr=0x11a) - failed
RegistersTestInterval(startAddr=0x11c, endAddr=0x124) - failed
RegistersTestInterval(startAddr=0x11c, endAddr=0x124) - failed
RegistersTestInterval(startAddr=0x11c, endAddr=0x124) - failed
RegistersTestInterval(startAddr=0x11c, endAddr=0x124) - failed
RegistersTestInterval(startAddr=0x200, endAddr=0x20c) - failed
RegistersTestInterval(startAddr=0x200, endAddr=0x20c) - failed
RegistersTestInterval(startAddr=0x200, endAddr=0x20c) - failed
RegistersTestInterval(startAddr=0x200, endAddr=0x20c) - failed
RegistersTestInterval(startAddr=0x240, endAddr=0x261) - failed
RegistersTestInterval(startAddr=0x240, endAddr=0x261) - failed
RegistersTestInterval(startAddr=0x240, endAddr=0x261) - failed
RegistersTestInterval(startAddr=0x240, endAddr=0x261) - failed
RegistersTestInterval(startAddr=0x280, endAddr=0x2a7) - failed
RegistersTestInterval(startAddr=0x280, endAddr=0x2a7) - failed
RegistersTestInterval(startAddr=0x280, endAddr=0x2a7) - failed
RegistersTestInterval(startAddr=0x280, endAddr=0x2a7) - failed
RegistersTestInterval(startAddr=0x2c0, endAddr=0x2e7) - failed
RegistersTestInterval(startAddr=0x2c0, endAddr=0x2e7) - failed
RegistersTestInterval(startAddr=0x2c0, endAddr=0x2e7) - failed
RegistersTestInterval(startAddr=0x2c0, endAddr=0x2e7) - failed
RegistersTestInterval(startAddr=0x300, endAddr=0x327) - failed
RegistersTestInterval(startAddr=0x300, endAddr=0x327) - failed
RegistersTestInterval(startAddr=0x300, endAddr=0x327) - failed
RegistersTestInterval(startAddr=0x300, endAddr=0x327) - failed
RegistersTestInterval(startAddr=0x340, endAddr=0x367) - failed
RegistersTestInterval(startAddr=0x340, endAddr=0x367) - failed
RegistersTestInterval(startAddr=0x340, endAddr=0x367) - failed
RegistersTestInterval(startAddr=0x340, endAddr=0x367) - failed
RegistersTestInterval(startAddr=0x380, endAddr=0x3a7) - failed
RegistersTestInterval(startAddr=0x380, endAddr=0x3a7) - failed
RegistersTestInterval(startAddr=0x380, endAddr=0x3a7) - failed
RegistersTestInterval(startAddr=0x380, endAddr=0x3a7) - failed
RegistersTestInterval(startAddr=0x400, endAddr=0x40f) - failed
RegistersTestInterval(startAddr=0x400, endAddr=0x40f) - failed
RegistersTestInterval(startAddr=0x400, endAddr=0x40f) - failed
RegistersTestInterval(startAddr=0x400, endAddr=0x40f) - failed
RegistersTestInterval(startAddr=0x440, endAddr=0x461) - failed
RegistersTestInterval(startAddr=0x440, endAddr=0x461) - failed
RegistersTestInterval(startAddr=0x440, endAddr=0x461) - failed
RegistersTestInterval(startAddr=0x440, endAddr=0x461) - failed
RegistersTestInterval(startAddr=0x480, endAddr=0x4a7) - failed
RegistersTestInterval(startAddr=0x480, endAddr=0x4a7) - failed
RegistersTestInterval(startAddr=0x480, endAddr=0x4a7) - failed
RegistersTestInterval(startAddr=0x480, endAddr=0x4a7) - failed
RegistersTestInterval(startAddr=0x4c0, endAddr=0x4e7) - failed
RegistersTestInterval(startAddr=0x4c0, endAddr=0x4e7) - failed
RegistersTestInterval(startAddr=0x4c0, endAddr=0x4e7) - failed
RegistersTestInterval(startAddr=0x4c0, endAddr=0x4e7) - failed
RegistersTestInterval(startAddr=0x500, endAddr=0x527) - failed
RegistersTestInterval(startAddr=0x500, endAddr=0x527) - failed
RegistersTestInterval(startAddr=0x500, endAddr=0x527) - failed
RegistersTestInterval(startAddr=0x500, endAddr=0x527) - failed
RegistersTestInterval(startAddr=0x540, endAddr=0x567) - failed
RegistersTestInterval(startAddr=0x540, endAddr=0x567) - failed
RegistersTestInterval(startAddr=0x540, endAddr=0x567) - failed
RegistersTestInterval(startAddr=0x540, endAddr=0x567) - failed
RegistersTestInterval(startAddr=0x580, endAddr=0x5a7) - failed
RegistersTestInterval(startAddr=0x580, endAddr=0x5a7) - failed
RegistersTestInterval(startAddr=0x580, endAddr=0x5a7) - failed
RegistersTestInterval(startAddr=0x580, endAddr=0x5a7) - failed
RegistersTestInterval(startAddr=0x20, endAddr=0x2f) - failed
RegistersTestInterval(startAddr=0x20, endAddr=0x2f) - failed
RegistersTestInterval(startAddr=0x92, endAddr=0xa7) - failed
RegistersTestInterval(startAddr=0x92, endAddr=0xa7) - failed
RegistersTest() failed
->LMS7002M Test FAILED

[ RF Loopback Test ]
Note: The test should be run without anything connected to RF ports
->Configure LMS
TuneVCO(CGEN) - failed to lock (cmphl!=0)
SetFrequencyCGEN(61.44 MHz) failed
TuneVCO(CGEN) - failed to lock (cmphl!=0)
SetFrequencyCGEN(491.52 MHz) failed
Failed to set sample rate
->RF Loopback Test FAILED

=> Board tests FAILED <=

Elapsed time: 1.99 seconds

Also, the LimeSuite seems to have a strict NEQ condition when probing firmware version. That means that if the firmware is newer than the driver expect, it still asks to “update” it. Don’t know if it is an intended behaviour - just something I’ve noticed.

Summary

[INFO] Make connection: ‘LimeSDR-USB [USB 3.0] 90726074F283B’
e[1me[33m[WARNING] Gateware version mismatch!
Expected gateware version 2, revision 21
But found version 2, revision 23
Follow the FW and FPGA upgrade instructions:
Lime Suite - Myriad-RF Wiki
Or run update on the command line: LimeUtil --update