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.

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
Broadcast FM
1800 MHz Cellular
2.4 GHz WiFi
PlutoSDR + SpyVerter Receiving Broadcast AM
900 MHz GSM Band Broadcast FM 1800 MHz Cellular 2.4 GHz WiFi PlutoSDR + SpyVerter Receiving 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.

Subscribe
Notify of
guest

60 Comments
Inline Feedbacks
View all comments
LostInSpace

Just FYI – I just got a Rev C Pluto (Dec 2021) and the extended frequency range commands work just fine. Verified with my Sig Gen and on the air. 🙂

LostInSpace

Looking closely at the Analog Devices Pluto Wiki, they said they never did a Rev C, but that is what the white label on the case says: Rev C. The PCB is marked Rev D. Their documentation is confusing.

Mike Walker

fw_setenv compatible ad9364

This was the only way I was able to get my Pluto into the extended frequency range. I guess they changed the commands with their newer models.

Rashed

Hello. Were you able to properly receive signals over the new frequency ranges you unlocked? I want to receive cubesat signals which have a downlink frequency around 150MHz, and I want to use the Adalm Pluto. However, I am worried that, after doing this modification, the SDR will still not receive signals properly outside the frequency range initially specified by the manufacturer. Please reply as soon as possible. Thank you.

Val

You can receive FM signals between 88 and 108 MHz – they are very strong and can be received by anything that works in that frequency range. You can also try to receive Air band signals in 118 – 136 MHz range, which should be possible to receive anywhere not too far away from airports and airplanes (if your city has an airport, even a small one for amateurs and sportsmen, you should be able to receive their communications).

Robin Getz

The frequency expansion still works, but the issues are the same. The chip used inside Pluto is the AD9363 (has guaranteed performance metrics from 325 MHz to 3.8 GHz); when you tell the software it’s a different chip (like the AD9364); there are no specifications / performance metrics between 70 MHz to 325 MHz; and between 3.8 GHz to 6.0 GHz (the expanded operating specs of the AD9364). It will (likely) work very well; but it’s unknown / not guaranteed to meet any sort of performance metric.

Will it function – yes, will you have −42 dB EVM or better for LTE10 at 800 MHz (datasheet spec for the AD9364); Maybe – I don’t know. The unit that I have/measure might be different than the one you get, and it might be off more or less than yours.

Does that help?

Es93

Hello!
I would like to know how to process to change the chipset? Does it need an tools for this ?
thanks,

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.

Beer It

https://wiki.analog.com/university/tools/pluto/users
I would guess that you should follow the step 3.

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

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.

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

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?

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.

lonelysurfer

Enable dual-core(!) on plutosdr (AD9363):
fw_setenv maxcpus
pluto_reboot reset
see @ https://www.plutosdr.com/viewtopic.php?f=7&t=11
I’ve also tested it. Restore the original setting with : fw_setenv maxcpus 1
Pluto becomes greater and greater.

TC

once there were hackRF clones sold for 150$
but i haven’t found them at the time reading…

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

lonelysurfer

ADALM-PlutoSDR driver for SDR# (windows):
https://github.com/Manawyrm/sdrsharp-plutosdr/blob/master/README.md
Not everything is working for me, e.g. more than 2 or 3 Msps or tuning by frequency-manager. Its beta and we have to wait. But this is a great news!!!

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.

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.

rlwsdr

Select “No Limits” on the GCRX Input Control.
http://gqrx.dk/doc/practical-tricks-and-tips

Also give the ADI IIOScope program a try under Windows.

lonelysurfer

Strange. You can try to undo the changes with (ref. : http://manpages.ubuntu.com/manpages/trusty/man8/fw_setenv.8.html) :
fw_setenv attr_name
fw_setenv attr_val
pluto_reboot reset

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!

Robin Getz

yes – the ADI wiki does that (never really figured out why).

I use :

https://github.com/analogdevicesinc/plutosdr_scripts/blob/master/update#L186

copy / paste from github seems to work better than the wiki.

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?

lonelysurfer

…and the PlutoSDR Source was working under Lubuntu 17.04.

lonelysurfer

“Device URI” to ip:192.168.2.1 and boom…its working

medevacs

git clone https://github.com/csete/gr-osmosdr-gqrx
git checkout iiodev
fatal: Not a git repository (or any of the parent directories): .git

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.

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.

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.

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.

Val

hm, it looks like they are using dual-core CPU, but only enable one core

Beer It

I fully agree (page 2) https://www.xilinx.com/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf

My only guess is that it is done to reduce cooling requirements, and/or to reduce EMI.

Tiersten

You’re right. It appears you can enable the other core as well so this special Zynq 7010 4334 is actually a dual core chip still. I guess the other core doesn’t pass the production tests in some unspecified way. I doubt it is marking a full featured dual core as a single core even though it is functional because they don’t sell this particular variant normally.

I’ve not tried the dual core change so don’t blame me if this bricks your Pluto!

Tiersten

No. It is a single core Zynq. Read https://www.reddit.com/r/RTLSDR/comments/5u1oao/comment/de7ac7h they’re using a XC7Z010-1CLG225C4334 which matches up with what is inside my Pluto.

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).

Robin Getz

The Zynq that is used is a “XC7Z010-1CLG225C4334”; this is a special single core version from Xilinx that was made before the single core Zynq parts were publicly/officially available. We continue to use that since it’s FPGA fabric & DSP slices are a little larger than the 7007 device (official single core version).

Some people have noticed that if you turn the 2nd core on, it is there, and works – but this isn’t something we encourage. or recommend. The power draw is a little higher, and it might exceed the USB spec of 500mA.

https://wiki.analog.com/university/tools/pluto/hacking/hardware is missing the 4334 suffix in the schematics and BOM – I will see if I can get someone to fix that.

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?

Labroe

Install with pybombs, does not work. https://github.com/gnuradio/pybombs
i get this error:
root@a-VirtualBox:/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’)

Labroe

root@a-VirtualBox:/home/a# pybombs recipes add-defaults
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-defaults’ (choose from ‘list-repos’, ‘add’, ‘list’, ‘update’, ‘remove’)
root@a-VirtualBox:/home/a#

medevacs
lonelysurfer

Installing gnuradio with PyBOMBS is a mess. Better use a package-manager and : https://www.plutosdr.com/viewtopic.php?f=6&t=5

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.

beta-tester

why the AirSpy can support 10MHz panoramic spectrum view at 12bit when is has only a USB2.0 port?

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.