Wiki Devices
RTL-SDR
RTL-SDR dongles 0.9.25 are driven by the app's own driver over WinUSB — no librtlsdr and no rtl_tcp. Spectrum, sweep, listening and IQ recording are available at sample rates of 1.024–2.56 MS/s between 28.8 and 1766 MHz; there is no transmitter. This page covers which dongles are supported and what has been tested on hardware, how to assign the driver, what every dongle control on the Device tab does, and where the honest limits lie.
Which dongles are supported
You need a dongle built on the RTL2832U chip with a tuner of the R8xx family. The app looks for dongles by the USB identifiers 0BDA:2832 and 0BDA:2838.
| What | State in 0.9.49 |
|---|---|
| RTL2832U + R820T2 | Tested on the author's hardware: spectrum, sweep, FM listening. |
| RTL2832U + R820T | The same driver code as for the R820T2; not tested on hardware separately. |
| R828D, including the RTL-SDR Blog V4 | Implemented, untested on hardware. |
| Direct sampling below 28.8 MHz | Implemented, untested on hardware. |
| Bias tee | Implemented, untested on hardware. |
| Other tuners (E4000, FC0013) | Not supported. The app refuses with the reason “the dongle's tuner is not supported: not an R820T/R820T2/R828D”. |
The tuner and the serial number become known only after connecting: before that the app does not open the dongle, so as not to take it away from a program that may already be using it.
Apart from the HackRF One, RTL-SDR and tinySA, the free edition supports no receivers. SDR SA PRO PRO adds the ADALM-Pluto / Pluto+, the Fobos SDR and the bladeRF 2.0 micro — see SDR SA PRO.
The app's own driver and WinUSB
The app talks to the dongle by itself, directly over USB, and installs no drivers into the system. For that the dongle must have the WinUSB driver built into Windows; it is assigned once with the Zadig tool.
- Plug the dongle into a USB port.
- Run Zadig and select the dongle's interface
Bulk-In, Interface (Interface 0)— that is the name the app uses in its advice. - Assign the WinUSB driver to this interface.
- In the app's start window press Refresh and connect.
When the driver is wrong, the app writes Device visible, but no driver is bound with the reason “the dongle has the wrong driver” and the same advice about Zadig.
WinUSB is opened exclusively: while SDR#, SDR++ or rtl_tcp holds the dongle, the app cannot open it and says Device busy with another program. And the other way round — while the dongle is open here, other programs cannot get it.
Where the driver comes from
The app's driver for the RTL2832U and the R820T / R820T2 / R828D tuners is ported from the webrtlsdr library (Apache License 2.0, © 2013 Google Inc., © 2024 Jacobo Tarrío Barreiro) and modified: its code was rewritten from TypeScript into Python over libusb. The licence text is in the folder of the installed app — _internal\licenses\third-party\webrtlsdr-LICENSE.txt, and where the code came from and what was changed — in _internal\licenses\third-party\SOURCES.txt.
Connecting
In the Select a receiver start window every dongle found is listed as a row of the form “RTL-SDR #0 — USB 1-4”: its number in order and its place on the USB bus. The row carries no serial number: it can be read only after the dongle is opened, and many dongles share the same one anyway. If there are several dongles, tell them apart by the port. Pick the row and press Connect.
After connecting, the dongle sits at 100 MHz with a sample rate of 2.4 MS/s and the tuner AGC on. Only the ppm correction is kept between launches; frequency, sample rate and gain start from these values every time. If the dongle cannot be opened, the app shows the cause with advice and returns to the list — no restart needed.
Dongle controls on the “Device” tab
For an RTL-SDR the Source group on the Device tab (Ctrl+4) shows its own set of controls — the HackRF's LNA, VGA and AMP are not there. The Type row reads rtlsdr, and the Instrument row shows the chip with its tuner and the dongle's name, for example “RTL2832U + R820T” (an R820T2 tuner is labelled the same way). The Pause, Back to live and Reconnect buttons and the loss counters work as described on the HackRF One page.
Instrument sample rate
The Instrument sample rate list offers 1.024, 1.4, 1.8, 2.048, 2.4 and 2.56 MS/s. The sample rate is also the instantaneous receive bandwidth. Higher rates are left out on purpose: on the author's dongle 2.88 and 3.2 MS/s lost 0.29 % and 0.36 % of the samples, while up to 2.56 MS/s there were no losses. There are no lower rates either: finer detail comes from a narrower RBW — see RBW, windows and VBW. Changing the rate on the fly briefly restarts the stream.
Gain
- Tuner AGC
- On by default: the tuner controls the LNA and mixer gain by itself. Levels are then not comparable between frames — the gain changes without you knowing. For measurements, switch the AGC off and set the gain by hand.
- Gain
- Appears when the AGC is off. The R820T LNA and mixer together, from 0 to 52.5 dB. The tuner has 3.5 dB steps and a 2.3 dB half-step, so the slider shows not what you asked for but what reached the tuner after rounding. Right after the AGC is switched off the app requests 30 dB — after rounding that is 28.0. The decibels are nominal, per the driver, not calibrated.
- Total gain
- In manual mode something like ≈ 44.0 dB, nominal: the tuner gain plus the 16 dB of the IF amplifier that the driver sets in manual mode. With the AGC on it reads AGC — unknown, and in direct sampling direct sampling — the tuner is not in the path.
The ppm correction
The ppm slider corrects the dongle's crystal error, from −100 to +100 in steps of 1. Clones without temperature compensation are off by tens of ppm: 30 ppm at 100 MHz is a 3 kHz offset. Set the correction against a carrier of known frequency. The value is kept for the next launches — separately for a dongle with its own serial number, and one shared value for dongles with a default serial such as 00000001. Changing the correction retunes the dongle and restarts the stream.
Below 28.8 MHz
Through the tuner the app receives from 28.8 MHz upwards. The Below 28.8 MHz list enables direct sampling for HF: the signal goes into the ADC past the tuner.
- off
- The default. The lower frequency limit is 28.8 MHz.
- Q input (V3)
- The Q input exists on the RTL-SDR Blog V3. Clones usually lack it, and then there is only noise.
- I input
- The same through the I input.
Choosing a mode only allows tuning below 28.8 MHz. Direct sampling itself is active when the centre is really below that limit; above it the tuner works as usual. While it is active the tuner is out of the path: the Gain slider disappears, and the checkbox becomes Demodulator AGC. The RTL-SDR Blog V4 receives HF through its own upconverter and does not need this mode.
Direct sampling has not been checked on hardware yet. If it shows only noise on your dongle, that may be a missing input — or a defect the author has not seen.
Bias tee
The Bias-tee (Blog V3/V4; clones usually lack it) checkbox feeds power into the antenna connector. Enable it only with a load that expects it — an active antenna or a low-noise amplifier; see the dongle's documentation for the voltage. When the dongle is closed, the app switches the power off by itself. If switching it off with the checkbox fails, the app says that the bias tee may still be on and advises you to disconnect the antenna or the load and reconnect the dongle. This function has not been checked on hardware.
Tuner PLL and tuning error
- Tuner PLL
- locked — the tuner's synthesiser settled on the frequency. NOT LOCKED — frequency unreliable — the spectrum on screen is not from that part of the air. At the same time a red PLL NOT LOCKED badge appears on the trust bar, visible from any tab. In a sweep such a segment does not enter the stitched picture, and in a recording those samples get a
suspectannotation in the SigMF metadata. - Tuning error
- The tuner's synthesiser sets the frequency in steps of up to hundreds of hertz; the remainder is trimmed by the demodulator's oscillator in steps of about 6.9 Hz. Shown is what is left after that, without the ppm correction. If the PLL did not lock, a “—” stands in place of the number: the app does not know the error of such a frequency.
What differs from a HackRF
- The peak at the centre. The Center row is the centre of the receive band; the tuner's local oscillator sits 3.57 MHz above it, outside the band. Yet there is a peak exactly at the centre here too: it moves together with the tuning, so it is not a signal on the air. Its nature has not been measured, so the DC mark on the plot stays, and its tooltip says only what was measured.
- Levels. dBFS of an eight-bit ADC, not dBm. The level scale is remembered separately for each device type, so the HackRF scale is not carried over to the dongle.
- The sweep is a software one: the dongle retunes step by step, and the sweep uses the widest rate, 2.56 MS/s. Details are on the Sweep page.
- IQ recording is in the dongle's own
cu8format with a SigMF sidecar; see IQ recording. - The spur passport is separate for each device type: a HackRF passport is not applied to the dongle's spectrum.
- No transmitter. The Transmitter tab says: “This source only receives”.
- FPV video is designed for sample rates from 8 MS/s; an RTL-SDR has no such rate.
What was measured on an R820T2
The numbers below were taken on one dongle of the author's, with an R820T2 tuner. They are not a datasheet for all dongles, but what has actually been checked.
- No sample losses at any of the offered rates up to 2.56 MS/s.
- The tuner's synthesiser locks between 24 and 1766 MHz.
- The centre error after trimming by the demodulator's oscillator is within ±3.1 Hz.
- A retune takes 30–51 ms.
- An 88–108 MHz sweep takes 1.16 s per pass, with 99.72 % coverage.
- The FM broadcast spectrum is visible and the demodulated audio is audible.
When something goes wrong
The driver does not pretend that all is well. If a retune fails, it tries once more; if the second attempt fails too, samples are no longer delivered at all — the app can no longer label them with the right frequency. A stream that has gone silent for more than half a second also counts as a break, not as “zero losses”. In both cases you see the Device connection lost window with the advice to check the cable and press Reconnect. When the USB traffic itself is failing, the advice names the cable and the port (preferably without a hub), not Zadig: on a dongle that is already open the driver is not the problem.
Single traffic failures do not stop the stream, but they are not hidden either 0.9.36:
- A USB transfer that came back with an error. Its data is missing, and there is a break in the stream in its place: no spectrum frame is built across it, and the SigMF recording carries a mark at that place. How many samples are missing is still estimated by the clock in the Lost in transit row. A yellow line in the Source group says how many such transfers there were: USB transfers that came back with an error: N. Before 0.9.36 such transfers were only counted, and the spectrum and the recording ran across the hole.
- A USB transfer of odd length. Its last byte is half a sample: the app drops it, restarts the stream from a sample boundary and marks the place as a break; the line USB transfers of odd length: N says how many there were. Whether such transfers happen on a real dongle is not known.
Limits
- Only the R820T2 has been tested on hardware. The R828D and the RTL-SDR Blog V4, direct sampling and the bias tee are implemented but untested.
- The author has not yet verified the ppm correction on hardware against a carrier of known frequency.
- The E4000 and FC0013 tuners are not supported.
- The range is 28.8–1766 MHz; the sample rates are just six values from 1.024 to 2.56 MS/s.
- Levels are in dBFS; the tuner gain is nominal, not calibrated.
- There is no transmitter; FPV video needs a sample rate of 8 MS/s or more, which a dongle does not provide.
- Only the ppm value is kept between launches.
- The behaviour on traffic failures has been checked against a simulated dongle, not against real hardware faults.
The common list of the app's limits is on the Limits and roadmap page.