RTL2832U

From SpenchWiki
Jump to: navigation, search

Introduction

This page details information specific to RTL2832U-based DVB-T USB dongles.

The information applies to using it with GNU Radio (using gr-baz), and on Windows with the ExtIO plugin for HDSDR.

News

Supported devices

RTL2832U-based USB DVB-T adapters (non-exhaustive list, see here for how to install device driver on Windows).

The following are the names of some common devices, but others not listed here will work if their USB ID is the same:

  • ezcap
  • Hama nano
  • Terratec Noxon 1 & 2
  • Dexatek 1 (also Logilink/MSI)
  • Dexatek 2 (also ZAAPA HD)
  • Dexatek 3
  • Peak
  • Ardata MyVision/Gigabyte GT-U7300
  • MyGica/G-Tek
  • Lifeview
  • PROlectrix
  • Terratec Cinergy T 1
  • DIKOM HD
  • Twintech
  • Genius TVGo 2
  • SVEON

You can double-check the full list by inspecting the main librtl2832++ source file.

You can also contact me with information (name/VID/PID/tuner type) regarding other devices that are not recognised automatically.

There is a helpful subreddit with a more complete list.

Manual override

If your device is NOT recognised (missing from device table):

  • Linux: type in the VID/PID into the GRC block
  • Windows: add vid=0x#### pid=0x#### to device hint
  • Code: use the simple API to set these 'USB device override values'
  • Source: add one line to the device list in 'rtl2832.cc'
The ezcap EzTV668 with E4000 tuner

Tuners

  • Tuners are probed automatically now!

Supported tuners:

  • Elonics E4000 (original: e4000, improved: e4k)
  • Fitipower FC0013 (fc0013)
  • Fitipower FC0012 (fc0012)
  • Fitipower FC2580 (fc2580)

Manual override

You can override the tuner too, if you wish:

  • Linux: select the appropriate tuner from the list in the GRC block properties
  • Windows: add tuner=e4k/e4000/fc0012/fc0013/fc2580 to the device hint

librtl2832++

This is cross-platform source code. It is the C++ interface that abstracts the functionality of the hardware (demod & tuner).

The library compiles:

You can freely take the rtl2832-* files from the gr-baz lib directory and re-use them in any other project where you need to control an RTL2832U-based device!

Specifications

Magic numbers (ezcap EzTV)
Parameter Notes
ADC Resolution 8 bits
Dynamic range (Not that great - theoretically 48 dB?, but still enough for many applications.)

This can be improved by:

  1. oversampling
  2. bandpass filtering
  3. decimating

See 1, 2, 3.

Minimum sample rate > 900 ksps (must be greater!)
Maximum sample rate 3.2 Msps
Nominal sample rate 1 Msps (much higher leads to subtle signal degradation)
Clock 28.8 MHz internal oscillator (expect large drift and phase noise)
Spectrum flatness (Definitely not flat at centre, worse with low gain)
AGC Disabled for E4000, but still active somewhere (in RTL2832 demod chip itself?)

You can test this by tuning a strong carrier to be near/on the centre frequency.

If you know about this, please tell me.

Sensitivity TBD (decent all things considered)
Quality Don't expect anything remotely close to a USRP.
Price For ~$20 you'd be crazy not to try it!

Issues

E4000 DC offset loop

  • Disabled E4000 DC offset loop to avoid period 'jumps' in time-domain signal: I have disabled the DC offset loop in the E4000 tuner as I was seeing additional crud on the right of the centre frequency. In the time-domain, you can see it as a period jump in the incoming signal. I'll add an option to re-enable it so you can experiment (or you can modify the E4000 init function and un-comment the function call).

I2C errors

  • These are avoided with the E4000 tuner by using the OsmoSDR e4k tuner code, instead of the original e4000 code.
    This can be done by using the tuner=e4k Device Hint in the ExtIO Device Hint on Windows, or, for GRC/GNU Radio, changing to the E4000 (OsmoSDR) item in the Tuners drop-down list in a RTL2832 Source (rtl_source_c) block's properties.

Rapid tuning

  • I2C errors when tuning rapidly: personally I haven't had this problem, except when using a GRC flowgraph where the down-stream sample rates are mismatched. However, other people have reported this in normal use. Therefore this issue is as yet unresolved, as perhaps because the device wasn't designed to be rapidly re-tuned. One option is rate-limiting tune requests and/or investigating async control transfers in libusb.
  • Should no longer occur with e4k tuner code (see above).

Certain frequencies

  • I2C failure when tuning certain frequencies on E4000: For example, on both Windows and Linux if you tune to 90 MHz, then 89 MHz then back to 90 Mhz, you will see:
_I2CWriteByte: the control request was not supported by the device [-9] @ int PLL(rtl2832::tuner*, int, int):1749 "I2CReadByte(pTuner, 200, 5, writearray[0])"
  • If you inspect the referenced E4000 PLL function, you will see an if blocks that set various registers depending on the requested tune frequency - this may hold the key. Otherwise, any other theories are welcome!
  • Should no longer occur with e4k tuner code (see above).

Videos

External Resources

These are some helpful posts to help you get started (e.g. installation walk-thrus in different languages):

If you would like me to add a link, please contact me.