wiki:rockprog

rockprog

Einführung

Da das FiFi-SDR softwareseitig kompatibel zum Softrock-Radio ist, können bestehende Tools für die Einstellung der gängigen Parameter genutzt werden. So läßt sich z.B. der Abgleich der Quarzfrequenz mit den meisten SDR-Programmen durchführen, wobei das spezielle Konfigurations-Tool von PE0FKO am besten geeignet ist.

Neben den vom Softrock übernommenen Parametern besitzt das FiFi-SDR aber noch weitere Einstellmöglichkeiten, insbesondere für den Preselektor. Um auch diese neuen Werte programmieren zu können, wurde das einfache Kommandozeilen-Tool rockprog erstellt.

rockprog ist für Windows, Linux und Mac verfügbar.

ACHTUNG: Da die Entwicklung des Programms unter Linux erfolgt, kann es sein dass zwischenzeitlich in den Windows- und Mac-Versionen Änderungen noch nicht übernommen wurden.

Bedienung

Beispiel für eine umfangreiche Konfiguration eines FiFi-SDR mit FiFi-Preselektor:

#!/bin/sh

# Quarzabgleich automatisch!
rockprog -w --autotune

# Preselektor-Betriebsart: 4 Ausgänge
rockprog -w --presel --mode=1

# Umschaltgrenzen der Tiefpässe auf FiFi-Preselektor
rockprog -w --presel --index=0 --freq-from=0     --freq-to=0.123 --pattern=1
rockprog -w --presel --index=1 --freq-from=0.123 --freq-to=0.307 --pattern=7
rockprog -w --presel --index=2 --freq-from=0.307 --freq-to=0.768 --pattern=0
rockprog -w --presel --index=3 --freq-from=0.768 --freq-to=1.92  --pattern=2
rockprog -w --presel --index=4 --freq-from=1.92  --freq-to=4.8   --pattern=6
rockprog -w --presel --index=5 --freq-from=4.8   --freq-to=12    --pattern=5
rockprog -w --presel --index=6 --freq-from=12    --freq-to=30    --pattern=3
rockprog -w --presel --index=7 --freq-from=30    --freq-to=75    --pattern=4
rockprog -w --presel --index=8 --freq-from=75    --freq-to=150   --pattern=12

# Übrige Tabellen-Einträge löschen
rockprog -w --presel --index=9  --freq-from=0 --freq-to=0 --pattern=0
rockprog -w --presel --index=10 --freq-from=0 --freq-to=0 --pattern=0
rockprog -w --presel --index=11 --freq-from=0 --freq-to=0 --pattern=0
rockprog -w --presel --index=12 --freq-from=0 --freq-to=0 --pattern=0
rockprog -w --presel --index=13 --freq-from=0 --freq-to=0 --pattern=0
rockprog -w --presel --index=14 --freq-from=0 --freq-to=0 --pattern=0

# Standardwert für Preselektor-Ausgänge
# PRESELEKTOR-TABELLE WIRD NUR GESCHRIEBEN, WENN AM SCHLUSS INDEX 15 BENUTZT WIRD!
rockprog -w --presel --index=15 --freq-from=0.0 --freq-to=500 --pattern=0

# Schaltgrenzen für 3. und 5. Oberwelle des LO
rockprog -w --3rd --freq=35.0
rockprog -w --5th --freq=85.0

# Faktor zwischen 'virtuellem' Si570 (Register-Schnittstelle) und tatsächlicher RX-Frequenz
rockprog -w --vfact --factor=4

Die Optionen von rockprog (unvollständig und nur als Beispiele...)

RX-Frequenz einstellen
Frequenzangabe in MHz. Anmerkung: Die Frequenz des Si570 ist üblicherweise das 4-fache dieser RX-Frequenz. Wenn die RX-Frequenz in dem Bereich liegt der für Empfang auf dritter bzw. fünfter Harmonischer des Oszillatorsignals vorgesehen ist, dann wird der Si570 auf das 4/3-fache bzw. 4/5-fache der RX-Frequenz eingestellt. Beispiel:
rockprog --vco -w --freq=29.29
Aktuelle RX-Frequenz auslesen
rockprog --vco
VCO = 29.290000 MHz
Quarzfrequenz (Referenz) auslesen
rockprog --xtal
XTAL = 114.285000 MHz
Quarzfrequenz einstellen (Abgleich)
Anmerkung: Wahrscheinlich ist der automatische Quarzabgleich über die Option --autotune einfacher!.
rockprog --xtal -w --freq=114.285
Betriebsart des Preselektors setzen
Kompatibilitätsmodus zur Softrock-Software (ABPF):
rockprog --presel -w --mode=0
16 Frequenzbereiche definierbar (15 + 1 Hintergrundbereich). Pro Frequenzbereich kann ein beliebiges Bitmuster auf vier GPIOs gegeben werden.
rockprog --presel -w --mode=1
Aktuelle Preselektor-Einstellungen auslesen
Die Ausgabe hängt vom gewählten Modus des Preselektors ab.
rockprog --presel
Preselektor-Modus = 1
 0:  12.000000 -  30.000000 MHz, Ausgänge = 0000b (0)
 1:   4.800000 -  12.000000 MHz, Ausgänge = 0010b (2)
 2:   1.900000 -   4.800000 MHz, Ausgänge = 0100b (4)
 3:   0.760000 -   1.900000 MHz, Ausgänge = 0110b (6)
 4:   0.300000 -   0.760000 MHz, Ausgänge = 0001b (1)
 5:   0.000000 -   0.300000 MHz, Ausgänge = 0011b (3)
 6:  49.000000 -  52.000000 MHz, Ausgänge = 0101b (5)
 7: 140.000000 - 150.000000 MHz, Ausgänge = 0111b (7)
 8:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
 9:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
10:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
11:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
12:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
13:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
14:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
15:   0.000000 - 500.000000 MHz, Ausgänge = 0000b (0)
Im Modus 0 werden die Werte zwar angezeigt, tatsächlich werden aber die 'ABPF'-Werte der originalen Softrock-Software verwendet.
rockprog --presel
Preselektor-Modus = 0 (Es gelten die Umschaltpunkte für ABPF)
 0:  12.000000 -  30.000000 MHz, Ausgänge = 0000b (0)
 1:   4.800000 -  12.000000 MHz, Ausgänge = 0010b (2)
 2:   1.900000 -   4.800000 MHz, Ausgänge = 0100b (4)
 3:   0.760000 -   1.900000 MHz, Ausgänge = 0110b (6)
 4:   0.300000 -   0.760000 MHz, Ausgänge = 0001b (1)
 5:   0.000000 -   0.300000 MHz, Ausgänge = 0011b (3)
 6:  49.000000 -  52.000000 MHz, Ausgänge = 0101b (5)
 7: 140.000000 - 150.000000 MHz, Ausgänge = 0111b (7)
 8:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
 9:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
10:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
11:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
12:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
13:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
14:   0.000000 -   0.000000 MHz, Ausgänge = 0000b (0)
15:   0.000000 - 500.000000 MHz, Ausgänge = 0000b (0)
In dem Fall werden die entsprechenden Werte so abgerufen:
ABPF-Werte auslesen (Softrock)
rockprog --abpf
ABPF ein, 3 Filtergrenzen
 0: 0.250000 MHz
 1: 0.500000 MHz
 2: 0.750000 MHz
Faktor zwischen virtuellem Si570 (Register-Schnittstelle) und tatsächlicher RX-Frequenz setzen
rockprog -w --vfact --factor=4
Register des virtuellen und des realen Si570 auslesen
Eine RX-Frequenz von 66 MHz ist über Empfang auf der 3. Oberwelle des LO möglich. Der LO wird also tatsächlich auf 22 MHz laufen, während zum Host hin ein linearer Frequenzbereich abgebildet wird, d.h. die gewollte RX-Frequenz.
rockprog --vregs
Si570-Register 7-12: 0x40 0x02 0xD0 0xB9 0x7D 0xEB, HS_DIV=6, N1=1, RFREQ=45.045286100 (66.000007 MHz) (virtuell)

./rockprog --regs
Si570-Register 7-12: 0x61 0xC2 0xB1 0xEC 0xA4 0x4D, HS_DIV=7, N1=8, RFREQ=43.120273877 (22.000002 MHz)
Nur für Tests und der Vollständigkeit halber: Register des virtuellen Si570 setzen (Kommando 0x30)
rockprog -w --vregs --regset=0x01,0x02,0x03,0x04,0x05,0x06
Autotuning der Quarzfrequenz
Der Si570 hat einen Referenzquarz mit nominell 114.285 MHz. Um die RX-Frequenz exakt einstellen zu können, braucht man die tatsächliche Quarzfrequenz. In der üblichen Variante bestimmt man mit einem Empfangssignal bekannter Frequenz die Abweichung des Empfängers von der Frequenz des Senders. Mit diesem Korrekturfaktor wird die tatsächliche Quarzfrequenz berechnet und per ./rockprog --xtal -w --freq=... eingestellt.

Ein einfacherer Weg kommt ohne Messung aus: Die voreingestellten Registerwerte des Si570 werden gelesen und daraus die Ausgangsfrequenz unter Annahme der nominellen Quarzfrequenz (114.285 MHz) berechnet. Falls man die beabsichtigte Ausgangsfrequenz kennt, kann man berechnen welche Frequenzabweichung beim Programmieren der Voreinstellung bekannt war. Daraus kann dann auch die tatsächliche Quarzfrequenz bestimmt werden.

rockprog liefert eine Schätzung für die Quarzfrequenz unter der (gewagten) Annahme daß die RX-Frequenz des Radios im 5-kHz-Raster liegt (Si570 im 20-kHz-Raster). Zunächst sollte man sich die errechnete Frequenz anzeigen lassen:

rockprog --autotune
Factory-Startup: 7.500354 MHz, Vorschlag: XTAL=114.279601

Falls man damit zufrieden ist, kann man die Quarzfrequenz direkt schreiben lassen:

rockprog --autotune -w

Für den Fall daß die Sollfrequenz bekannt ist (oder wenn rockprog vorraussichtlich falsch liegt...) kann man diese Frequenz auch mit angeben. Sie überschreibt dann die geratene Sollfrequenz:

rockprog --autotune -w --freq=7.505
Umschaltpunkt für Empfang auf 3. Harmonischer des LO setzen
rockprog --3rd -w --freq=35.0
Umschaltpunkt für Empfang auf 5. Harmonischer des LO setzen
rockprog --5th -w --freq=85.0
I²C-Adresse des Si570 auslesen
Diese Adresse wird von der CPU automatisch bestimmt.
rockprog --i2c
I2C-Adresse = 0x05
Startup-Frequenz einstellen
Auf diese RX-Frequenz wird das FiFi-SDR nach dem Einschalten automatisch abgestimmt.
rockprog --startup -w --freq=15.886
Startup-Frequenz auslesen
rockprog --startup
Startup-Frequenz = 15.886000 MHz
SVN-Versionsstand der Firmware auslesen (ab SVN-Version 294, Firmware-Bezeichnung derzeit noch leer)
rockprog --firmware
Firmware-Stand (SVN) = 294
Firmware-Bezeichnung = 

Compilieren

Die Quellen können mittels SVN abgezogen werden: svn co  http://o28.sischa.net/fifisdr/svn/

Linux

rockprog kann auf einem Linux-Rechner einfach durch Aufruf von make übersetzt werden. (Voraussetzung dazu sind die Bibliotheken libusb-1.0 und libpopt0).

Mac

Neben der Entwicklungsumgebung (Xcode, gcc, Libraries) werden außerdem die Libusb-1.0 und  popt benötigt (zu beziehen z.B. über  MacPorts oder  Fink). Die Bedienung ist entsprechend der Linux-Version.

Windows

 MinGW und MSYS werden benötigt, dazu eine Windows Version von  libusb-1.0, die zunächst auch übersetzt werden muss (dazu gibt es eine Anleitung unter  http://www.libusb.org/wiki/windows_backend). (Die Prozedur ist insgesamt wesentlich unkomfortabler als unter Linux bzw. OS-X. und hat im Ursprung ein gesamtes Wochenende verschlungen :7 )
Mit der geplanten Integration einer libusb-0.1 Kompatibilitätsschicht (in die Windows Version der libusb-1.0), dürfte in absehbarer Zeit die Notwendigkeit zweier verschiedener Treiber unter Windows entfallen.
Inzwischen existiert eine Version von rockprog für Windows die auf der libusb-0.1 aufbaut. Die komplizierte Variante mit der libusb-1.0 ist damit hinfällig'''. Hier der Link zu den Quellen und zur ausführbaren Datei rockprog0.exe.