ADALM-PLUTO SDR Hack: Tune 70 MHz to 6 GHz and GQRX Install

Yesterday we posted an unboxing and a few tests with the PlutoSDR. On that post user rlwsdr commented and informed us that’s it’s actually possible to do a quick hack that changes the frequency range and bandwidth from 325 – 3800 MHz and 20 MHz up to 70 MHz to 6000 MHz and 56 MHz bandwidth. All that is needed to perform this hack is setting a device string on the PlutoSDR via a USB serial connection. This hack has been confirmed by Alex Csete and others on Twitter and ourselves. It works for both RX and TX.

Alexander Csete (programmer of GQRX) also posted instructions in a comment on our last post that explained how to get GQRX running with the PlutoSDR. 

Also in the last post we mentioned that all distributors were out of stock, but a few hours after that post went out Digikey restocked and they now have (at the time of this post) 184 units left at the $99 USD price.

Frequency and Bandwidth Hack

Thanks to ‘rlwsdr’ and Alexandru Csete for bringing attention to this hack.

It seems that the current shipping version of the PlutoSDR uses the AD9363 chip which is restricted to a frequency range of 325 – 3800 MHz and bandwidth of 20 MHz. However, the higher end AD9364 chip which can support 70 MHz to 6000 MHz and 56 MHz of bandwidth is supposedly nearly identical to the AD9363 chip. The PlutoSDR can be tricked into seeing a AD9364 chip simply by changing a device string on the unit, but it’s not guaranteed to give the full tuning range and bandwidth for every single unit. It’s possible that the AD9363 chips are actually AD9364 chips that failed performance QC checks and have just been rebranded as a lower end model, or that a cheaper silicon process is used with the lower end chip.

The instructions for performing this hack are actually detailed by the official Analog.com PlutoSDR wiki on the customization page. Just search for the heading “Updating to the AD9364”. The instructions state that this is only for older PlutoSDR units which actually came with the AD9364 chip, but it seems to work with the newer PlutoSDR units that have the AD9363 chips as well.

Simply plug the PlutoSDR in, and connect to it via a serial connection. On Windows you can use a program like PuTTY for this purpose. First search in device manager for the COM port assigned to your PlutoSDR, and then input this into PuTTY leaving the speed at 9600. You can then log in and set the environment variables using the lines provided in the wiki. Now in GNU Radio, GQRX etc you should be able to tune down to 70 MHz and up to 6 GHz and set the bandwidth to 56 MHz.

PlutoSDR Upgrade instructions
PlutoSDR Upgrade instructions

The images below show the PlutoSDR serial connection screen and the commands you need to type, the PlutoSDR tuning down to broadcast FM frequencies at 100 MHz, and a TX test at 70.1 MHz. It was found that the strength of the TX is a bit lower outside the official range, but can be increased by turning off the attenuation setting.

Serial_upgrade_PuTTY
pluto_upgrade_fm
tx_pluto_70mhz

Setting up the GQRX Experimental Branch for the PlutoSDR

First set up GNU Radio and gr-iio using the instructions from this Reddit thread.

Now install gr-osmosdr-gqrx with the iiodev branch.

git clone https://github.com/csete/gr-osmosdr-gqrx
cd gr-osmosdr-gqrx/
git checkout plutosdr
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig

Install the GQRX prerequisites

sudo apt-get install git build-essential cmake qtbase5-dev qt5-default qtscript5-dev libssl-dev qttools5-dev qttools5-dev-tools qtmultimedia5-dev libqt5svg5-dev libqt5webkit5-dev libsdl2-dev libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack-jackd2-dev libxrandr-dev libqt5xmlpatterns5-dev libqt5xmlpatterns5 libqt5xmlpatterns5-private-dev pulseaudio

Install GQRX

git clone https://github.com/csete/gqrx.git gqrx.git
cd gqrx.git
mkdir build
cd build
cmake ..
make
sudo make install

Now GQRX should be ready to use the PlutoSDR. In the GQRX confiuguration screen select the device as Other or PlutoSDR and set the device string as “plutosdr=0”. Then you can set your sample rate and RF bandwidth, decimation etc. If you’ve done the frequency range hack then remember to select “No limits” in GQRX so that you can actually tune down further.

Note that in VMWare Lubuntu we were only able to get stable audio from the PlutoSDR and GQRX at a maximum of 3 MHz. Anywhere between 3 – 60 MHz bandwidth the PlutoSDR and GQRX spectrum and waterfall runs smoothly, but the audio is crackly. Might be a VMWare problem, or maybe something that can be fixed in later GQRX releases.

We also tested the PlutoSDR together with the SpyVerter upconverter for HF reception. It seemed to work well.

The images below show the PlutoSDR working in GQRX. The images of the 2.4 GHz and 1.8 GHz bands show that there is little to no attenuation at the edges of the 60 MHz bandwidth, so the upgrade from 20 MHz to 60 MHz is working well.

900 MHz GSM Band

900 MHz GSM Band

Broadcast FM

Broadcast FM

1800 MHz Cellular

1800 MHz Cellular

2.4 GHz WiFi

2.4 GHz WiFi

PlutoSDR + SpyVerter Broadcast AM

PlutoSDR + SpyVerter Broadcast AM

Conclusion

So with this hack the PlutoSDR is a much nicer unit that really makes an interesting and affordable choice for those wanting to upgrade from the RTL-SDR. Combined with a SpyVerter upconverter the unit should also be able to receive HF signals quite easily, so this gives a total cost of $148 for a DC to 6 GHz receiving system with TX capability, 12-bit ADC resolution and up to 56 MHz of bandwidth.

Of course we still need to confirm what the performance of the unit is like, especially in the frequency ranges opened up by the hacks and in regards to strong signal handling. We will test those in the coming weeks. If it handles those well and other software developers support it in their software then despite the unit being advertised as a learning module for students, it might become one of the best and most affordable general purpose SDRs available.

51 comments

  1. John H

    What do you have to install prior to building gr-osmosdr-gqrx-iiodev? I installed libmirisdr0 and libmirisdr-dev. PlutoSDR still doesn’t show up after installing.

      • John H

        I finally figured it out but not sure what exactly order I did it in but it did involve removing gnuradio and gr-iio from pybombs and added them from the repositories, adding the devices then building gr-osmosdr-gqrx. One glaring detail it leaves out is that you have to add miri-sdr and libmirisdr-dev and libmirisdr0 (and any other devices you want installed before building.

        To be clear though following the instructions above didn’t work on a fresh install of Ubuntu 16.04.3

  2. John H

    I have this working on one Ubuntu machine however on another one I cannot get PlutoSDR to show up under the I/O Devices list. I have no idea how I did it on the other machine but it was roughly follow the directions on adding GNURadio and gr-iio with PyBOMBS and then the the gr-osmosdr-gqrx and then gqrx. That didn’t work however when I removed GNURadio and GQRX and then installed them from the repository there it was in the I/O list and working. I cannot for the life of me recreate on the other machine.

  3. Damon Schaefer

    This frequency hack works great!!! I basically bought a B200 capability (except USB2 throughput instead of USB3) for $100!!! This device has a dual core processor (yes, I set the max cpus) so we can eventually run stuff on the board (like the E300 maybe?).
    After doing the free-hack don’t forget to select “No Limits” on the GQRX Input Control (yes, that took me 5 minutes of panicking that my hack didn’t work).
    Because this board has USB 2, can someone PLEASE write an Android driver/plug-in for SDR Touch or some other Android app so that I can do some amazing portable stuff with it?
    You guys rock!!!!!!!! I’m so happy with this thing – totally worth $150 by the way.
    Thank you,
    Damon K9CQB

  4. c5e3

    i realised, that changing the gain values don’t do anything.
    when starting gqrx inside a terminal, i get this message:
    Unable to write attribute in_voltage0_gain_control_mode: -22

    @csete, i guess it is a known bug?

  5. Kosmic

    I did some quick tests with my signal generator (could only test from 70 to 2700 Mhz) and sensitivity look consistent across the whole range. At least with my unit.

    with a signal at -80dbm and 0 db gain on the receiver I get a SNR of 12db. By increasing the gain I can receive something up to -120dbm.

  6. R vd Meer

    Just got mine,upgraded the firmware and performed the hack.
    Tried with the new sdr# driver but getting fault with the libio.dll ,cant load the libio.dll
    use sdr# x86 on a 64 bit machine

    • R vd Meer

      on a windows 64 bit it wont work with me,on a 32 bit windows it works
      the hack worked ,can tune from 70 to 6000
      only there is no signals on those frequencies
      but wifi reception is good

    • R vd Meer

      Very good news indeed,i want to say thank you to all who makes this possible,
      mine pluto is in delivery,so i cant wait to see how it works and if the hack wil work on mine.

  7. G7KGC

    I bought two of these from Digikey and I have carried out the AD9364 ‘hack’ on both units. GQRX refuses to tune below 324.999 and the GNURadio source and sink don’t work either. The units remain tuned to the last good freq. Pity because I was keen to try it on 2m.

    Am I doing something daft? I have found enough evidence online that suggests the mod should just work!

    • Val

      It’s understandable that chip is not guaranteed to work out of it’s specs. As I understand it worked for some people, but not for everyone. For instance, someone claimed it went up to 4.4 GHz after the hack, but not further.

    • Tim

      2 things I can think of.
      Make sure you click the no_limit button on gqrx.
      2nd thing was when I originally did the hack, I left the ” ad9364″ quotes marks in …..remove the quotes.

      gnuradio will work, but I only installed using pybombs. The is an edit to the recipe found in reddit for plutosdr.

      I can’t gqrx to work correctly myself yet….show gqrx v 2.7 with plutosdr in title bar and in uri, but RTL-SDR is grabbing the device instead of pluto. I can see it control rtl2832 when changing frequencies

    • John H

      I just got mine as well and applied the frequency hack and installed gqrx gr-iio gnu radio etc. The driver shows up in GQRX and “tunes” down to 70 MHz however it only really works from 325 MHz and up. Seems the freq hack didn’t work on my new unit that I got from Digikey yesterday.

      • John H

        Never mind. I finally got it going. I ended up slowing the speed down on the serial console (not sure if that mattered) From a Mac:

        screen /dev/tty.usbmodem1424 96000

        then removing the quotation marks on the attr_val did it for me.

        fw_setenv attr_val ad9364

        Now listening to FM radio band. It works. A lot of trouble but it works 🙂

    • G7KGC

      Update: The frequency mod works as long as you do not copy/paste the strings from the AD website. Take a careful look at the inverted commas – these are not the commas you are seeking!

  8. lonelysurfer

    libqt5xmlpatterns5-private-dev could not be found on Lubuntu 17.04. I installed 17.04 because gnuradio / libvolk on 14.04 was to old for gr-iio. Now 17.04 is too new :-/ Is there a way to install libqt5xmlpatterns5-private-dev on 17.04?

    • lonelysurfer

      Now I installed Lubuntu 16.04 and gqrx is working. Tuning from 70 MHz to 6000 MHz is also working. But gnuradio fails with the PlutoSDR Source:
      ERROR: Unable to find host: Der Name oder der Dienst ist nicht bekannt
      Traceback (most recent call last):
      File “/home/user/Schreibtisch/Linux_Setup/dect_pluto_test/top_block.py”, line 275, in
      main()
      File “/home/user/Schreibtisch/Linux_Setup/dect_pluto_test/top_block.py”, line 263, in main
      tb = top_block_cls()
      File “/home/user/Schreibtisch/Linux_Setup/dect_pluto_test/top_block.py”, line 127, in __init__
      self.pluto_source_0 = iio.pluto_source(“ip:pluto.local”, rx_freq_id, baseband_sampling_rate, 1 – 1, 2000000, 0x8000, True, True, True, “manual”, 64.0, “”, True)
      File “/usr/local/lib/python2.7/dist-packages/iio/iio_pluto_source_swig.py”, line 129, in make
      return _iio_pluto_source_swig.pluto_source_make(*args, **kwargs)
      RuntimeError: Unable to create context

      Source with rtl-sdr is ok. Can someone help me?

    • medevacs

      ah ok I know the reason. One needs to cd gr-osmosdr-gqrx before checkout… Anyway, guys, please review your instructions because they look like copy-pasted lots of bits and pieces from different sites that together do not really work for everyone.

  9. Val

    I think it is important to mention that the device uses open source firmware and real Linux. Taking into account great hardware it has, it has great potential.

  10. Val

    As I understand, 4 Msps is the hardware limit:
    https://wiki.analog.com/university/tools/pluto/devs/specs
    “streams up to 4MSPS with no dropped samples”

    However this is a minor limitation for many people including me. Also it looks like it can process information on the device and output processed information instead of raw samples. (I could be wrong, but to me it looks like that’s what FPGA and SoC on board can be used for).

    • Beer It

      When it says “streams up to 4MSPS with no dropped samples”, by omission of detail would imply that it is 4 MSPS combined TX and RX.

  11. KD0CQ

    So with an RX and TX port I assume we can do full duplex with this device? If so it’s a hell of a bargain >:), especially if the software Freq hack is fairly consistent across devices. Maybe modify it to use an external clock source. For $100 you can afford to hack around on the hardware some without worrying overmuch.

    • rlwsdr

      Yes. You can use the enclosed 6″ SMA RF loopback cable and hook it up to the RX and TX ports and see your transmissions real-time with either GQRX or the IIO Oscilloscope program.

    • Val

      It looks like this amazing device is similar to bladeRF at a fraction of bladeRF price. It even has FPGA on board, as well as 512 MB of RAM and dual-core CPU running at ~700MHz. Can’t wait to receive mine! It looks like software support is already coming and eventually full potential of the hardware is going to be used.

      Grab one while you still can! They are going to be sold out quickly and the price will probably go up quite a bit.
      The cheapest bladeRF is selling at 420 USD, and the model with better FPGAs cost much more (650 USD).

      • Tiersten

        They’re using a single core version of the Zynq chip for cost reasons. It has slightly more LEs than the dual core version though.

        • Val

          I’m not sure about that, multiple sources state that Zynq 7010 is being used, and as I understand there is only dual-core version of this device. I’ve seen that somewhere it was claimed that it uses single-core CPU, but this claim doesn’t fit with everything else.

            • Beer It

              odd, I can’t find any reference to that number (4334) on the Xilinx’s site, but I guess they would have that option available but really want to push the higher profit margin part.

              • Tiersten

                Yeah. I’m not sure exactly is going on there as the 4334 variant isn’t mentioned anywhere else but they’ve got a special version of the Zynq 7010 somehow. Robin posted on this blog as well and talks about some of the design decisions which mostly relate to cost. He mentions “We don’t actually use the standard 7010, but a single core version of the 7010 (which was before the single core versions were released).” He lists Xilinx as helping them though so they may have worked out something there.

                I misread it and thought the single core 7010 has more LEs than the dual core 7010 but they actually mean their mystery single core 7010 has more LEs than the official single core 7007S.

                • Val

                  Perhaps that’s how they managed to get cost this low – by using components that work well for this particular purpose, but cannot be sold at normal price point because of certain limitations/flaws. Still the end product looks like a GREAT bargain to me (in comparison to HackRF or similar devices).

  12. beta-tester

    when i buy a PlutoSDR (ADALM-PLUTO) now, will i get a device i can extend the range with that hack?
    and then i do the hack, will i violate FCC and CE?

  13. Labroe

    Install with pybombs, does not work. https://github.com/gnuradio/pybombs
    i get this error:
    [email protected]:/home/a# pybombs recipes add-test
    PyBOMBS – INFO – PyBOMBS Version 2.3.1
    usage: pybombs recipes [-h] {list-repos,add,list,update,remove} …
    pybombs recipes: error: argument sub_command: invalid choice: ‘add-test’ (choose from ‘list-repos’, ‘add’, ‘list’, ‘update’, ‘remove’)

  14. Alexandru Csete

    I was also having crackling audio at rates above 4 Msps, but I was using an old PC.

    Regardless of the chip settings, the transfer to the host computer is still limited by USB2 bandwidth, so we should probably not expect more than 6 – 10 Msps continuous streaming. It depends on how the samples are packed and how much overhead there is in the libiio protocol.

      • Alexandru Csete

        There is no theoretical problem in achieving 40 MByte / second with USB 2, so even with 2×16 bit samples you can have 10 Msps transfer rate. But it depends on the implementation and I doubt libiio is as efficient as the wire protocol for Airspy.

        • Manawyrm

          One (relativly hard) limit is the maximum speed of the USB gadget mode of the linux kernel. It doesn’t want to do more than 20 MByte/s, whatever I try to do with it.

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>