Jegyzetek az rtl-sdr-el valo ismerkedesem tapasztalatairol

Az utobbi idok legnagyobb "fogasa" a radiozassal foglalkozok szamara az a felismeres, hogy a nagy sorozatokban gyartott DVB-T USB dongle-k alkalmasak SDR (Software Defined Radio) celokra is.
 A "kezdo lokest ado" bejelentes Antti Palosaari-tol itt olvashato:
http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/44461/focus=44461
Egy tipikus rtl chipet tartalmazo DVB-T USB dongle belseje:



Mindjart egy megszoritassal kell folytatnunk, mert nem minden ilyen dongle alkalmas, hanem (egyelore) csak azok, amelyek a Realtek ceg
RTL2832 kontrolleret es az alabbi ket ceg un. silicon tunerjenek egyiket tartalmazzak:
Elonics E4000, amelyik (64 - 1700 MHz kozott dolgozik, ez talalhato egyebbkent a FunCube dongleban is).  Ill. a Fitipower FC0013, ujabban az FC0012 tipust, amik felso hatarfrekvenciaja alacsonyabb.
A kiindulo oldalnak a tajekozodashoz, erdemes ezzel kezdeni: (A fenti kep is innen valo)
http://sdr.osmocom.org/trac/wiki/rtl-sdr
A nagy vonzoero ebben a tortenetben az, hogy ezek a donglek mar 15 US dollar arert is kaphatoak, mindossze a kompatibilitasi listat kell vasarlas (es keresgeles) elott megnezni.
Az egyre gyarapodo lista itt nezgeto meg:
http://www.reddit.com/r/RTLSDR/comments/rbqfz/rtlsdr_compatibility_list_work_in_progress_please/

Egyelore ne varjon senki egy egyszeruen letoltheto es kenyelmesen vezerelheto szoftver kornyezetet, ahol kulonfele uzemmodokban lehet dolgozni, ehelyett minden gyors valtozasban van, ujabb es ujabb fejlemenyek bukkannak elo.


Az alabbiakban az elso tajekozodasaimat probalom rogziteni. Az elozmeny az, hogy egy zart listan Horvat Peterrel, HA5CQA/AK4RP vitattuk meg a friss fejlemenyeket, es sikerult kezbevennem ket ilyen USB-s eszkozt.

Itt a munka kozben rogzitett jegyzeteim kovetkeznek...

Hirtelenjeben ket ilyen usb-t dongle is kerult a kezem koze, az egyik neve LifeView  LV5TDeluxe a  kompatibilitasi lista szerint
RTL2832U/FC0012 van benne es az usb azonositok:  1F4D:C803
Kinyitottam az usb eszkoz muanyag hazat es ellenoriztem a chipek feliratait, valamint az lsusb-vel megneztem a gyarto USB azonosito kodjat, VID, valamint a gyartmany azonositojat is, PID.

Az idezett listaban az FC0012 tunerrel szerelt eszkozok mellett tobbfele link is van. A hasznalatbavetelhez az bizonyult fontosnak, emelyik  a  "Driver here" szoveg mogott van. Az ott targyalt eszkoznek az azonositoja nem pontosan ugyanaz, mint amit nekem sikerult szereznem, hanem 1F4D:B803, de a mogotte huzodo problema ugyanaz. A problemaval foglalkozo "shigawire"  itt irta le azt, http://www.reddit.com/r/RTLSDR/comments/r9rj9/have_spend_24_hours_trying_to_add_support_for/
Egy rovid idezet belole:
-------------------------------
So I now have a usb dongle with the rtl chipset, but the fc0012 tuner rather then the fs0013.
It seems to be an evolutionary change, and the fc0013 code has it's far ancestry in the fs0012 code, so "How hard could it be?".

The short version is: quite. I dug through the absolutely frightening rtl2832u DVB driver (the same that the existing rtlsdl fs0013 tuner code seems to have been sifted from) for the differences as there isn't so much as a spec sheet for the tuner chip from the manufacturer. Then when it didn't seem to work, rewrote much of it in frustration. Then ported the whole fs0012 code across wholesale to see if that would work. Nothing. The RTL ADC was happily giving me a signal free bitstream.

... it seems that the the gpio5 line on the RTL chip is hooked up to the reset line of the tuner, and then left floating (in this case, basically like someone holding down the reset button continuously).
I set the gpio line to be an output, and then give it a quick reset. Magically, I'm getting output.
 https://gist.github.com/2171926
------------------

Tehat a fenti linken egy patch van, ami a szobanforgo GPIO vonal kezelessel kapcsolatos.
Mindez azonban csak akkor kell, ha a kompatiblitasi listabol nem sikerult olyan eszkozt valaszatni es vasarolni, ami a mar felderitett es mukdo tuner ic-ket tartalmazza, vagyis a Elonics E4000-t ill. a Fitipower FC0013-at.
Ezekhez ugyanis keszult egy minimalis kezelo szoftver, az rtl-sdr, ami itt talalhato

git clone git://git.osmocom.org/rtl-sdr.git

es lenyegeben a tunerek frekvenciajanak allitasara es a mintavetelezes sebessegenek beallitasara szolgal, valamint megadhatunk egy filet, amibe tarolni fogja a vett binaris adatokat. Mivel nekem a "nem-elso vonalbeli" tuner van a dongleban, szuksegem volt a patch beillesztesere es beforditasara is.

A patch alkalmazasa utan leforditottam az rtl-sdr-t, de nem akarta felismerni a gepre csatalakoztatott donglet. A fenti kezdooldalrol lehet talalni olyan infokat, hogyan lehet a linux udev segitsegevel automatikusan konfiguralni az ismert usb-azonositoval rendelkezo eszkozoket. De ez jelen esetben nem elegendo. Elsore egy egyszerubb megoldassal probalkoztam.
Lattam az rtl-sdr main.c fileban, hogy direktben be vannak illesztve a felismerendo eszkozok usb azonositoi (VID, PID), Ezek alapjan  egy otlettel beillesztettem az enyemet is, majd ujra forditottam. Ezutan mar felismerte, es ki is adta az elso eletjelet, amit ide masoltam:
  
-------------------------------------------------------
root@ubu10:/tj/rtl-sdr/ujsrc/.git/src# ./rtl-sdr -f 433890 valami
Found GTEK T803 stick with FC0012 tuner

RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val 20 18 08 19 06 00 00 96 55 00 00 02 00

RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val e8 18 08 19 06 00 00 96 55 00 00 02 00
reset fs0012 tuner...
RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val e8 06 08 39 06 00 00 96 55 00 00 02 00
Setting sample rate: 2048000.000 Hz
FC0012_Open startFC0012_Open SUCCESSFC0012_SetFrequency startFrequency: 433, Fa: 3, Fp: 0, Xin:61822
FC0012_SetFrequency SUCCESS
FC0012 registers:
R0=a1 R1=03 R2=00 R3=f1 R4=7e R5=82 R6=08 R7=20 R8=ff R9=6e Ra=b8 Rb=82 Rc=fc Rd=02 Re=4b Rf=10 R10=06 R11=02 R12=1f R13=17 R14=00 R15=04
LNA_POWER_DOWN:    Not Powered Down
VCO_SPEED:    High speed
Bandwidth:    8MHz
Crystal Speed:    28.8MHz
RSSI calibration mode:    Disabled
LNA Force:    Not Forced
LNA Gain:    17.9dB
Tuned to 433890 Hz
Reading samples...
------------------------

Kb 1 perc utan leallitottam a rogzitest, es ekkor kb 120 M meretu valami nevu file keletekezett. Azt, hogy mi van benne, egyelore nem lehet megallapitani, binaris allomanynak latszik.
A tovabbi lepesek a rogzietett file feldolgozasaval folyatatodnak, celszeruen a gnuradio szoftver keszlettel.
----------
FCD gnuradio kezelese

Kozben Horvath Peter kuldott egy hiradast, hogy a grudio listan bejelenetetek, hogy a FunCube Dongle, FCD szamara elkeszult a standard blokk a gnuradio alatt.
http://lists.gnu.org/archive/html/discuss-gnuradio/2012-03/msg00442.html
Jobben megnezve a nalam legutobb leforditott gnuradio verziot, kiderult, hogy ebben mar benne van, tehat legalabb tesztelesre, ellenorzesre van egy ismert, masik hardver is, a hozza tartazo, egyszeru sormodu gnuradio vevo egyeseggel.

Az FCD gnuradio alatti hasznalataval korabban Alex Csete mar foglalkozott, erre utal a fenti hirdasa is, es maga Alex is feltett errol egy kis jegyzetet:
http://www.oz9aec.net/index.php/gnu-radio/gnu-radio-blog/464-rtl2832u-based-software-defined-radios



A masik usb-s eszkoz, amit skerult megvizsgalnom, kisse mas problemakat hozott. Ez pedig egy Terratek feliratu, de nem az a NOXON, ami a kompatibiltasi listaban felul van, hanem az LV5T Delux, es siman csak "Not only TV-nek" hivja magat, roviden elneveztem NOTV-nek.
Az rtl-sdr alatti main.c filebol ide teszem az azonositokat, amikrol szo van:

/* Terratec NOXON DAB/DAB+ USB-Stick */
#define NOXON_VID    0x0ccd
#define NOXON_PID    0x00b3
/* Terra NOTV */
#define NOTV_VID    0x0ccd
#define NOTV_PID    0x00a9

A masodik bejegyzes tartozik ahhoz az eszkozhoz, amivel most lehetosegem van foglalkozni, ebben is FC0012-es tuner van, mig az eredeti NOXON feliratuban FC0013-as.

Azt lehetne varni, hogy a forditas utan ez is ugyanugy mukodik, mint a masik, de nem. Alighanem ide vonatkozik az a masik link, ami szinten a kompatibilitasi tablazatbol szedheto ki:
http://www.reddit.com/r/RTLSDR/comments/rbqfz/rtlsdr_compatibility_list_work_in_progress_please/c45fx5g
Ide teszem a szoveget is, mert nem vilagos hogy mit is kellene csinalni, hogy mukodjon:
---------------
EzCap EZTV646 has got RTL2832U/FC0012. However rtl-sdr must be tweaked to force FC0012 tuner because it has the same PID as EZTV668 (PID: 0x2838) so running it whithout a tweak will select Elonics E4000 tuner. Works, not so good at filtering.
---------------
Ha inditom a "megfoltozott" rtl-sdr verziot, akkor ezt irja ki:
--------------
root@ubu10:/tj/rtl-sdr/ujsrc/.git/src# ./rtl-sdr -f 433890 valami1
Found Terratec NOXON stick with FC0013 tuner
(Tehat azt hiszi, hogy a NOXON verziot talalta meg az FC0013-as tunnerrel)

--------------
RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val 20 18 08 19 06 00 00 96 55 00 00 02 00
Setting sample rate: 2048000.000 Hz
Couldn't open tuner!
----------------
Vagyis magat az rtl eszkozt felismeri, de nem jol tarsitja hozza a tuner tipusat. Egy kis probalkozas utan azt csinaltam, hogy a main.c fileban kesobb, amikor a fenti NOXON_VID, stb alapjan allitja ossze, hogy mi van a dongleban, csinaltam egy uj bejegyzest ide is a NOTV eszkoznek:
--------------------------
devh = libusb_open_device_with_vid_pid(NULL, NOTV_VID, NOTV_PID);
    if (devh > 0) {
        tuner_type = TUNER_FC0012;
        printf("Found NOTV stick with FC0012 tuner\n");
---------------------------
Es innetol mar felsimeri, es mukodok is.
Gondolom, kesobb maguk a fejlesztok is ra fognak jonni, hogy ezt a problemat egy kicsit altalanosabban kell megoldani, hogyha felmerul egy ujabb eszkoz, akkor ne kelljen mindig a forrast modositani.

==========
SDR,  a DVB-T donglebol, alap szinten:

Alap szinten tehat valahogy igy lehet hasznalni a DVB-T USB donglet sdr vevoknek:

Le kell rogziteni a hallgatni/vizsgalni kivant frekvenciarol egy fileba a binaris adatfolyamot.
Probakent en ezzel a paranccsal dolgoztam, a lokalis 92.1 MHz helyi radiobol egy perces reszletet rogzitettem:

./rtl-sdr-notv -f 92100000 fmvetel

az rtl-sdr-notv az a program verzio, amibe beleapplikaltam a Terratek NOTV dongle azonositoit.
Indulas utan ezt latjuk a terminal ablakban:
-------------------------------------
root@ubu10:/tj/rtl-sdr/ujsrc/.git/src# ./rtl-sdr-notv -f 92100000 fmvetel

Found NOTV stick with FC0012 tuner

RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val e8 06 08 39 06 00 00 96 55 00 00 02 00

RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val e8 06 08 39 06 00 00 96 55 00 00 02 00
reset fs0012 tuner...
RTL SYSB registers:
reg 00 01 02 03 04 05 06 07 08 09 0a 0b 0c
val e8 06 08 39 06 00 00 96 55 00 00 02 00
Setting sample rate: 2048000.000 Hz
FC0012_Open startFC0012_Open SUCCESSFC0012_SetFrequency startFrequency: 92100, Fa: 5, Fp: 25, Xin:54613
FC0012_SetFrequency SUCCESS
FC0012 registers:
R0=a1 R1=05 R2=19 R3=d5 R4=55 R5=42 R6=0a R7=20 R8=ff R9=6e Ra=b8 Rb=82 Rc=fc Rd=02 Re=73 Rf=10 R10=07 R11=02 R12=1f R13=17 R14=00 R15=04
LNA_POWER_DOWN:    Not Powered Down
VCO_SPEED:    High speed
Bandwidth:    8MHz
Crystal Speed:    28.8MHz
RSSI calibration mode:    Disabled
LNA Force:    Not Forced
LNA Gain:    17.9dB
Tuned to 92100000 Hz
Reading samples...
-----------------
2.
Az eredmeny egy meglehetosen terjedlemes binaris file, amit attettem a /tmp ala, hogy kesobb ne legyen gondom a torolgetessel. Majd erre rainditottam egy, a levelezo listan talalt gnuradio-fm feldolgozo blokk-sorozatot. Ennek a kepet mellekelem. Ha ezt elinditom, persze modositani kell az input es az output blokkokban a fileneveket, akkor az eredmeny egy wav file lesz, amiben tenyleg hallani lehet egy kis idore a 92.1 MHz-en foghato zenei musort...



Tehat a dolog mukodik, bar egy kicsit nehezkes: menteni kell az adatfolyamot, majd ezt fel kell dolgozni, hogy eloalljon a hallgathato FM musorbol keszult hangfile.



hg5apz
Janos Tolgyesi
Wed Apr  4 20:58:50 CEST 2012


Az rtl feldolgozo blokkok a gnuradio alatt


A tovabbi munkahoz telepiteni kellett a gnuradiot... ez nem annyira egyszeru, mint ahogy ebbol a kijelentesbol annak tunhet. Sok "fuggosege" van, amik telepiteset szinten kulon tortentetkekben lehetne elmondani, de ezekbe itt most nem bonyolodunk bele. A gnuradio mar tobb mint egy evtizedes project, kezdeten egy jelentos tamogato aktussal, hogy az igenyes amator radios koroknek megteremtsek a szoftver kornyezetet az SDR radiozashoz.
http://en.wikipedia.org/wiki/GNU_Radio
A legujabb hir az, hogy a debian linux alatt most mar osszerendezett csomagkent telepitheto, a szukseges fuggosegeivel egyutt, es innentol a vele valo ismerkedes es munka jelentosen egyszerubbe valik:
http://packages.debian.org/source/sid/gnuradio
Ha atfutjuk ezt a listat, azert az latszik, hogy nem annyira egyszeru ez a feladat meg igy sem.
--------------
Aki ismeri a Matlab/Simulink rendszer-tervezesben nyujtott lehetosegeit, vagy az Octave, meg inkabb a Scilab lehetosegeit, az konnyen haladhat elore a gnuradio-companion keretrendszerben a sajat SDR block osszeallitasaban. Egeszen a legutobbi idokig azonban korlatja volt ennek a munkanak az, hogy ez a szoftver kornyezet csak keves es draga hardvert tamogatott, elsosorban az USRP-csaladot, ami az Ettus Research productuma.
http://gnuradio.org/redmine/projects/gnuradio/wiki/USRP2
Csak a legutobbi napokban jott a hir, (marc 22.) hogy integralasra kerult a lenyegesen olcsobb FunCube Dongle is :
[Discuss-gnuradio] New hardware support for FUNcube Dongle in master branch (gr-fcd)
http://lists.gnu.org/archive/html/discuss-gnuradio/2012-03/msg00442.html
A kovetkezo lepes pedig szinte nyomban ezutan kovetkezett, hogy t.i. Balint Seeber kozzetett egy alapveto kezelo eszkozt, ami az rtl2832 alapu DVB-T usb 2.0-as eszkozok kezelesere, vagyis a frenvencia beallitasara es a vett "raw" adatfolyam mentesere alkalmas, es ezt beepitette a gnuradio strukturajaba beillesztheto gr-baz csomagba is:
http://wiki.spench.net/wiki/Gr-baz#rtl_source_c
Itt szamos erdekes peldat lehet talalni a gnuradio-companion alatt ossszerakhato blokkokbol, amelyek az rtl alapu donglekkal mukodnek.



En ettol jelentosen egyszerubb peldaval kezdtem a kiserletezest, es meg is akadtam a szamomra jelenleg elerheto donglek korlata miatt: az elso korben a fejlesztok figyelemenek kozeppontjaba azok az eszkozok kerultek, amelyek a Realtek rtl2832 kontroller mellett vagy az E4000-es vagy az FC0013-as tunert tartalmazzak. Nekem jelenleg csak az FC0012-es tunerrel szerelt eszkozom van, es ennek a driver resze meg nincs kelloen kidolgozva. Tehat a gnuradio alatti kiserletezes kb eddig jut el:
- Beforditottam a gnuradio ala a fent idezett gr-baz csomagot.
- A Balint fele RTL2832 Source kivalasztasaval, valamint egy hozza illesztheto QT GUI Sink modullal letre lehet hozni a minimalis kezelo eszkozt. (Lasd a fenti abran)



Az RTL232 Source blokkban lehet megadni a veteli frekvenciat, a savszelesseget, az erositest, es nagyon lenyeges, hogy a hasznalt usb-s dongle azonositoit is megadjuk, az en esetemben ez VID: 0x0ccd valamint PID: 0x00a9. Egy listabol ki lehet valasztani a tuner tipusat is, adott esetben ezek:
Auto
Elonics E4000
Fitipower FC0013
Fitipower FC0012

A kijelzo QT GUI blokkban nemigen kell semmit allitani, alapbelallitasban mukodni fog. A fomenuben a Build alatt eloszor Create majd Execute menupontot futtatva el is indul a "szerkezet", de ket uzenetet is kuld:

Generating: "/home/janos/gnuradio/grc/scripts/top_block.py"
>>> Warning: This flow graph may not have flow control: no audio or usrp blocks found. Add a Misc->Throttle block to your flow graph to avoid CPU congestion.
Executing: "/home/janos/gnuradio/grc/scripts/top_block.py"
Failed to find custom tuner by name: "fc0012"
Found RTL2832 device: (null) (tuner: interface not implemented)

1. >>>> Warning: This flow graph may not have flow control...
Az itt emlitett Throttle block hozzaadasarol a Forumon azt lehet olvasni, hogy inkabb csak a CPU terheleset okozza, minthogy hasznos lehet...
2. Failed to find custom tuner by name: "fc0012"
ez az az uzenet, ami a mogotte levo kidolgozatlansaggal egyelore megakadalyozza a tenyleges mukodest.

A QT GUI block negyfele megjelenitesi modot kinal fel:
Frequency Display
Waterfall Display
Time Domain Display
Constellation Display
Es az x tengelyen megjeleniti a belallitott savszelesseget, amivel a valasztott frekvenciatol felfele es lefele latszani fog a vizsgalhato tartomany.



Sun Apr  8 11:36:39 CEST 2012


MSI DigiVox.. not compatible

Its shure, this is not compatible:
MSI Digi Vox Mini Hybrid
USB: ID 0438:ac14
Chipset:
NXP TDA18271HDC2, ATI Theater Video T507
I have one: it has mini-usb connector and a small cable, distributed the signal on this connector to composit video (?) and 2 chanels of sound...




Thu Apr 12 09:59:24 CEST 2012

AverMedia H830... not compatible:

AverMedia HD AverTV Hybrid Volar H830
VID 07ca
PID 0830
rev 4001& MI01

Chipset:
Conexant CX23102-11Z
http://www.conexant.com/servlets/DownloadServlet/PBR-201370-005.pdf?docid=1371&revid=5
Afatech AF9033B-N2
http://www.ite.com.tw/en/products_more.aspx?CategoryID=6&ID=15,63
http://palosaari.fi/linux/


Fri Apr 20 18:30:32 CEST 2012


My new notes about an embedded rtl-sdr server, running on a NSLU2 linux box, and its wireless access is here:
https://sites.google.com/site/embrtlsdr/
Embedded rtl-sdr setup