How to use limesdr with UHD

i want to use limesdr with UHD, but i did’t find any tutorial about this. i want to get some help here

thank you.


using openusrp project

You can also use SoapyUHD:

There are pre-built packages in the PPA.

1 Like

@jocover When will you “fix” your project to stop faking hardware from Ettus? As Marcus pointed out on Twitter, it is not only unethical and disrespectful but also stupid and pointless.

UHD is GPL License,I can modify it.this’s no problem
https://kb.ettus.com/Licensing_FAQ

B210 need $1136 but LimeSDR only $289.features is almost the same
I think openusrp project is a good idea.let more people to learn SDR

You are missing the point. You are welcome to modify UHD all that you want, but using somebody else’s hardware identifier, in this case Ettus USRP B210 is not OK. It may even be violation of their trademark, if they have it.

Ettus has always been exemplary supporter of open source SDR. As it has been pointed out, you could use the UHD plugin API to hook up the limesdr or any other hardware for that matter. Why don’t you do that? Why do you have to hijack their product name?

:unamused:

thanks for your reply,i want to use limesdr with UHD.
which means i want to use the UHD API to set thw limesdr,just like the example in the source of UHD,for example to set the gain and freq,sample rate, i am reading the SoapyUHD and openUSRP source code.
thnak you.

How do I use soapyUHD to work with LabVIEW, the OpenUSRP works great, but it does not have the ability to use all of the LimeSDR features and functions as the LabVIEW thinks its controlling an Ettus B210. I have since been trying to use the soapyUHD, but I haven’t had much success with it using LabVIEW.
Can somebody help me out?

Thanks in advance

Hopefully @joshblum (author of SoapySDR) may be able to advise.

From my experience official labview usrp support has several modifications to prevent this and similar use cases.

just so I’m clear, you are saying that I cannot use the soapy stuff with labview, correct? You mentioned about usrp, what about the hackrf? if there a way to interface labview and soapy with the hackrf?

thanks

hey @eldueno looks like I got carried away. I don’t really know the current state of labview driver stuff, but if OpenUSRP works, I don’t see why other similar modules cant work. What did you do to install OpenUSRP with labview? Building it from source, copying over the module file? Because if that works, then presumably other SoapySDR supported modules should work.

So to support that, a lot of the instructions found here are kind of similar in terms of installing the uhd module and setting UHD_MODULE_PATH. Can you try this:

  1. Build and install SoapySDR
  2. Build and install SoapyHackRF
  3. Make sure that SoapySDRUtil --info can see the hackrf support module
  4. Make sure that SoapySDRUtil --find can see the hackrf device itself
  5. Build and install SoapyUHD
  6. Does uhd_find_devices see the hackrf? (if not, make sure that libsoapySupport.so is in the UHD_MODULE_PATH)
  7. At that point, things should work. But again, im not sure if the labview support ignores certain devices or things like that. Maybe it has a list of supported devices, thats why OpenUSRP reports as B210
2 Likes

Hi,

It seems that this does not work:

root@ubuntu:~/SoapyUHD/build# uhd_find_devices 
[INFO] [UHDlinux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.11.0.git-191-g1cd96dde] 
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    addr: 1d50:6108
    driver: lime
    label: LimeSDR-USB [USB 3.0] 9070602462C00
    media: USB 3.0
    module: STREAM
    name: LimeSDR-USB
    serial: 0009070602462C00
    type: soapy

root@ubuntu:~/SoapyUHD# uhd_usrp_probe 
[INFO] [UHDlinux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_3.11.0.git-191-g1cd96dde] 
uhd_usrp_probe: symbol lookup error: /usr/local/lib/uhd/modules/libsoapySupport.so: undefined symbol: _ZN3uhd3msg4_msgC1ENS0_6type_tE

root@ubuntu:~/SoapyUHD/build# SoapySDRUtil --probe="driver=uhd,type=b200"
######################################################
## Soapy SDR -- the SDR abstraction library
######################################################

Probe device driver=uhd,type=b200
Error probing device: SoapySDR detected ABI compatibility mismatch with UHD library.
SoapySDR UHD support was build against ABI: 3.10.2,
but UHD library reports ABI: 3.11.0
Suggestion: install an ABI compatible version of UHD,
or rebuild SoapySDR UHD support against this ABI version.

Can you share how you installed or compiled the software including LimeSuite, UHD, SoapySDR, SoapyUHD? I know 3.10.2 is the UHD from the PPA, so 3.11.0 is from a source build? So perhaps the uhd executable is from one version and the other libs are from another? Make sure that there is only one version of the tools installed at any time, otherwise they can “clash”.

1 Like

joshblum, thank you for the reply,

I used this guide: http://happyf337.blogspot.ru/2017/07/limesdr-ubuntu-desktop-1404-x8664-setup.html

This should work, but the manual is a bit outdated, so I do not know how to fix it.

so 3.11.0 is from a source build?

Yes, it is.

Ok, seems now it’s working.

Fix:

pybombs remove uhd -d    
wget https://github.com/EttusResearch/uhd/archive/release_003_010_002_000.zip
unzip release_003_010_002_000.zip
mv uhd-release_003_010_002_000/ uhd
cd uhd/host/lib/usrp
git clone https://github.com/jocover/OpenUSRP.git
echo "INCLUDE_SUBDIRECTORY(OpenUSRP)">>CMakeLists.txt
cd OpenUSRP
cd ../../../
mkdir build && cd build
cmake ..
make -j4
make install

Result:

root@ubuntu:~/airprobe/gsm-receiver# uhd_find_devices
linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_003.010.002.000-0-unknown

--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    type: b200
    product: B210
    module: STREAM
    media: USB 3.0
    name: LimeSDR-USB
    serial: 0009070602462C00

root@ubuntu:~/airprobe/gsm-receiver# uhd_usrp_probe 
linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_003.010.002.000-0-unknown

Using OpenUSRP
Reference clock 30.720 MHz
LMS7002M cache /root/.limesuite/LMS7002M_cache_values.db
Rx Filter calibrated from cache
Tx Filter calibrated from cache
Rx Filter calibrated from cache
Tx Filter calibrated from cache
  _____________________________________________________
 /
|       Device: B-Series Device
|     _____________________________________________________
|    /
|   |       Mboard: B210
|   |   revision: 4
|   |   product: 2
|   |   serial: 2462C16
|   |   FW Version: 3
|   |   FPGA Version: 2.11
|   |   
|   |   Time sources:  none, internal, external
|   |   Clock sources: internal, external
|   |   Sensors: ref_locked
|   |     _____________________________________________________
|   |    /
|   |   |       RX DSP: 0
|   |   |   
|   |   |   Freq range: -10.000 to 10.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       RX DSP: 1
|   |   |   
|   |   |   Freq range: -10.000 to 10.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       RX Dboard: A
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Frontend: A
|   |   |   |   Name: FE-RX1
|   |   |   |   Antennas: TX/RX, RX2
|   |   |   |   Sensors: temp, lo_locked, rssi
|   |   |   |   Freq range: 30.000 to 3800.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 76.0 step 1.0 dB
|   |   |   |   Bandwidth range: 1000000.0 to 60000000.0 step 1.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Frontend: B
|   |   |   |   Name: FE-RX2
|   |   |   |   Antennas: TX/RX, RX2
|   |   |   |   Sensors: temp, lo_locked, rssi
|   |   |   |   Freq range: 30.000 to 3800.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 76.0 step 1.0 dB
|   |   |   |   Bandwidth range: 1000000.0 to 60000000.0 step 1.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Codec: A
|   |   |   |   Name: B210 RX dual ADC
|   |   |   |   Gain Elements: None
|   |     _____________________________________________________
|   |    /
|   |   |       TX DSP: 0
|   |   |   
|   |   |   Freq range: -10.000 to 10.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       TX DSP: 1
|   |   |   
|   |   |   Freq range: -10.000 to 10.000 MHz
|   |     _____________________________________________________
|   |    /
|   |   |       TX Dboard: A
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Frontend: A
|   |   |   |   Name: FE-TX1
|   |   |   |   Antennas: TX/RX
|   |   |   |   Sensors: temp, lo_locked
|   |   |   |   Freq range: 30.000 to 3800.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 89.8 step 0.2 dB
|   |   |   |   Bandwidth range: 800000.0 to 60000000.0 step 1.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Frontend: B
|   |   |   |   Name: FE-TX2
|   |   |   |   Antennas: TX/RX
|   |   |   |   Sensors: temp, lo_locked
|   |   |   |   Freq range: 30.000 to 3800.000 MHz
|   |   |   |   Gain range PGA: 0.0 to 89.8 step 0.2 dB
|   |   |   |   Bandwidth range: 800000.0 to 60000000.0 step 1.0 Hz
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Codec: A
|   |   |   |   Name: B210 RX dual ADC
|   |   |   |   Gain Elements: None

Don’t use OpenUSRP, use SoapyUHD.

3 Likes

FFY00, thank you for the suggestion! Everything is ok (look’s like).

root@ubuntu:~/SoapyUHD/build# SoapySDRUtil --probe="driver=uhd,type=b200"
######################################################
## Soapy SDR -- the SDR abstraction library
######################################################

Probe device driver=uhd,type=b200
linux; GNU C++ version 5.4.0 20160609; Boost_105800; UHD_003.010.002.000-0-unknown

Using OpenUSRP
Reference clock 30.720 MHz
LMS7002M cache /root/.limesuite/LMS7002M_cache_values.db
Rx Filter calibrated from cache
Tx Filter calibrated from cache
Rx Filter calibrated from cache
Tx Filter calibrated from cache

----------------------------------------------------
-- Device identification
----------------------------------------------------
  driver=b200
  hardware=B210
  fpga_version=2.11
  fw_version=3
  mboard_id=B210
  mboard_name=
  mboard_serial=2462C00
  rx0_antenna=RX2
  rx0_id=Unknown (0xffff)
  rx0_serial=
  rx0_subdev_name=FE-RX1
  rx0_subdev_spec=A:A A:B
  rx1_antenna=RX2
  rx1_id=Unknown (0xffff)
  rx1_serial=
  rx1_subdev_name=FE-RX2
  rx1_subdev_spec=A:A A:B
  tx0_antenna=TX/RX
  tx0_id=Unknown (0xffff)
  tx0_serial=
  tx0_subdev_name=FE-TX1
  tx0_subdev_spec=A:A A:B
  tx1_antenna=TX/RX
  tx1_id=Unknown (0xffff)
  tx1_serial=
  tx1_subdev_name=FE-TX2
  tx1_subdev_spec=A:A A:B

----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
  Channels: 2 Rx, 2 Tx
  Timestamps: YES
  Clock sources: internal, external
  Time sources: none, internal, external
  Sensors: ref_locked
  GPIOs: FP0, RXA, TXA

----------------------------------------------------
-- RX Channel 0
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CS8, CS12, CS16, CF32, CF64
  Native format: CS16 [full-scale=32768]
  Stream args:
     * Samples per packet - The number of samples per packet.
       [key=spp, units=samples, default=0, type=int]
     * Bus format - The format of samples over the bus.
       [key=WIRE, type=string, options=(sc8, sc16)]
     * Peak value - The peak value for scaling in complex byte mode.
       [key=peak, default=1.0, type=float]
     * Receive frame buffer size - The size an individual datagram or frame in bytes.
       [key=recv_frame_size, units=bytes, type=int]
     * Receive number of buffers - The number of available buffers.
       [key=num_recv_frames, units=buffers, type=int]
  Antennas: TX/RX, RX2
  Corrections: DC removal, DC offset, IQ balance
  Full gain range: [0, 76, 1] dB
    PGA gain range: [0, 76, 1] dB
  Full freq range: [20, 3810] MHz
    RF freq range: [20, 3810] MHz
    BB freq range: [-10, 10] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-1e+07, 1e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-1e+07, 1e+07], options=(DEFAULT, IGNORE)]
  Sample rates: 0.1, 65 MSps
  Filter bandwidths: [0.8, 60] MHz
  Sensors: temp, lo_locked, rssi

----------------------------------------------------
-- RX Channel 1
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CS8, CS12, CS16, CF32, CF64
  Native format: CS16 [full-scale=32768]
  Stream args:
     * Samples per packet - The number of samples per packet.
       [key=spp, units=samples, default=0, type=int]
     * Bus format - The format of samples over the bus.
       [key=WIRE, type=string, options=(sc8, sc16)]
     * Peak value - The peak value for scaling in complex byte mode.
       [key=peak, default=1.0, type=float]
     * Receive frame buffer size - The size an individual datagram or frame in bytes.
       [key=recv_frame_size, units=bytes, type=int]
     * Receive number of buffers - The number of available buffers.
       [key=num_recv_frames, units=buffers, type=int]
  Antennas: TX/RX, RX2
  Corrections: DC removal, DC offset, IQ balance
  Full gain range: [0, 76, 1] dB
    PGA gain range: [0, 76, 1] dB
  Full freq range: [20, 3810] MHz
    RF freq range: [20, 3810] MHz
    BB freq range: [-10, 10] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-1e+07, 1e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-1e+07, 1e+07], options=(DEFAULT, IGNORE)]
  Sample rates: 0.1, 65 MSps
  Filter bandwidths: [0.8, 60] MHz
  Sensors: temp, lo_locked, rssi

----------------------------------------------------
-- TX Channel 0
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CS8, CS12, CS16, CF32, CF64
  Native format: CS16 [full-scale=32768]
  Stream args:
     * Samples per packet - The number of samples per packet.
       [key=spp, units=samples, default=0, type=int]
     * Bus format - The format of samples over the bus.
       [key=WIRE, type=string, options=(sc8, sc16)]
     * Peak value - The peak value for scaling in complex byte mode.
       [key=peak, default=1.0, type=float]
     * Send frame buffer size - The size an individual datagram or frame in bytes.
       [key=send_frame_size, units=bytes, type=int]
     * Send number of buffers - The number of available buffers.
       [key=num_send_frames, units=buffers, type=int]
  Antennas: TX/RX
  Corrections: DC offset, IQ balance
  Full gain range: [0, 89.8, 0.2] dB
    PGA gain range: [0, 89.8, 0.2] dB
  Full freq range: [20, 3810] MHz
    RF freq range: [20, 3810] MHz
    BB freq range: [-10, 10] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-1e+07, 1e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-1e+07, 1e+07], options=(DEFAULT, IGNORE)]
  Sample rates: 0.1, 65 MSps
  Filter bandwidths: [0.8, 60] MHz
  Sensors: temp, lo_locked

----------------------------------------------------
-- TX Channel 1
----------------------------------------------------
  Full-duplex: YES
  Supports AGC: NO
  Stream formats: CS8, CS12, CS16, CF32, CF64
  Native format: CS16 [full-scale=32768]
  Stream args:
     * Samples per packet - The number of samples per packet.
       [key=spp, units=samples, default=0, type=int]
     * Bus format - The format of samples over the bus.
       [key=WIRE, type=string, options=(sc8, sc16)]
     * Peak value - The peak value for scaling in complex byte mode.
       [key=peak, default=1.0, type=float]
     * Send frame buffer size - The size an individual datagram or frame in bytes.
       [key=send_frame_size, units=bytes, type=int]
     * Send number of buffers - The number of available buffers.
       [key=num_send_frames, units=buffers, type=int]
  Antennas: TX/RX
  Corrections: DC offset, IQ balance
  Full gain range: [0, 89.8, 0.2] dB
    PGA gain range: [0, 89.8, 0.2] dB
  Full freq range: [20, 3810] MHz
    RF freq range: [20, 3810] MHz
    BB freq range: [-10, 10] MHz
  Tune args:
     * LO Offset - Tune the LO with an offset and compensate with the baseband CORDIC.
       [key=OFFSET, units=Hz, default=0.0, type=float, range=[-1e+07, 1e+07]]
     * BB - Specify a specific value for this component or IGNORE to skip tuning it.
       [key=BB, units=Hz, default=DEFAULT, type=float, range=[-1e+07, 1e+07], options=(DEFAULT, IGNORE)]
  Sample rates: 0.1, 65 MSps
  Filter bandwidths: [0.8, 60] MHz
  Sensors: temp, lo_locked
1 Like

Hello @isk007, Not sure if this applies to your situation or not, I saw in your output text information about filters being calibrated from cache. I was under the impression that calibrating from the cache had be abandoned as there were issues and that other users had been deleting the cache db file to eliminate some problems.

Like I said, not sure if it applies to you in this situation but thought I would at least “warn” you of what I had seen.

Good luck with your projects :slight_smile:

Regards,
Bevan

2 Likes

OpenUSRP fakes a B210 which is obviously not optimal. With SoapyUHD, you can use the UHD api without faking a B210. You can run the same apps, there shouldn’t be a problem with that, so SoapyUHD is a better option than OpenUSRP.

3 Likes