Aus Raspberry Pi Geek 02/2017

Datenaustausch per Funk im SRD-Frequenzband 860 MHz (Seite 3)

Abbildung 4: OSI-Schicht 1: Ein Datagramm mit 4-Byte-Header für Empfänger- und Senderadresse sowie bis zu 60 Byte Nutzdaten.

Abbildung 4: OSI-Schicht 1: Ein Datagramm mit 4-Byte-Header für Empfänger- und Senderadresse sowie bis zu 60 Byte Nutzdaten.

Unabhängig davon, ob das Userprogramm (trx.c) nun senden oder empfangen will, konfiguriert es zuerst die LID und die gewünschte Länge des Datagramms per IOCTRL.

Beim Senden schreibt es die Empfängeradresse (RID) in die Gerätedatei /etc/rfm69, gefolgt von den Nutzerdaten. Diesen Datenblock trennt das Kernel-Modul auf, programmiert die RID in die Syncword-Register des RFM69, ersetzt die RID im Datenblock mit der eigenen Adresse (LID) vor den Nutzdaten und schreibt die Daten in den FIFO. Das RFM69-Modul setzt noch die Präambel davor und hängt das CRC-Wort hinten an.

Den Empfang löst das Userprogramm durch das Lesen von der Gerätedatei aus. In Folge programmiert das Kernel-Modul die LID in das Syncword-Register des RFM69, das nach Empfang alles zwischen diesem Sync-Wort und dem CRC-Wort – also RID und gegebenenfalls Nutzdaten – aus dem RFM69-FIFO ausliest und an das Userprogramm zurückgibt.

Der Betrieb

Als Entwicklungs- und Betriebsumgebung dient uns ein aktuelles Raspbian [6]. Es enthält fast alle notwendigen Werkzeuge, nur für das Kernel-Modul benötigen Sie gegebenenfalls noch die Header-Dateien (Listing 1, Zeile 1). Selbst ein Raspberry Pi der ersten Generation schafft es, das Kernel-Modul und das einfache Userprogramm in seiner Zielumgebung in angemessener Zeit zu kompilieren.

Listing 1

 

$ sudo apt-get install raspberrypi-kernel-headers
$ git clone https://gitlab.com/dieheins/srd860radio

Die gesamte Software finden Sie auf der Heft-DVD dieser Ausgabe. Der Quellcode lässt sich aber auch in der jeweils aktuellsten Version aus einem Gitlab-Repository [7] laden (Zeile 2).

Bevor sich im Verzeichnis srd860radio/ per make sowohl das Modul rfm69gmsk.ko als auch das Userprogramm trx bauen lassen, müssen Sie in der Header-Datei kmod/rfm69gmsk.h die Konstante RFM69_HWTYPE entsprechend dem tatsächlich verwendeten Funkmodul auf 0 (RFM69HCW) beziehungsweise 1 (RFM69CW) setzen. Mit Root-Rechten – also mit sudo make install – schreiben Sie das Userprogramm dann permanent nach /usr/local/bin/. Allerdings lädt der Kernel das Modul noch nicht automatisch. Sie müssen das also bei jedem Systemstart manuell erledigen (Listing 2).

Listing 2

 

$ sudo insmod ~/srd860radio/kmod/rfm69gmsk.ko

Haben Sie zwei Systeme entsprechend aufgesetzt, testen Sie die Funkübertragung mithilfe des Userprogramms. Um Fehler auszuschließen, betreiben Sie die beiden Rechner anfangs am besten im selben Raum. Mit dem Kommando aus der ersten Zeile von Listing 3 versetzen Sie den ersten RasPi auf Kanal 17 in den Empfangsmodus und weisen ihn an, nur ausreichend starke Signale ab -65 dBm zu akzeptieren.

Listing 3

 

$ trx rx -r -65 17 0xcafebabe
[...]
Reception 0xcafebabe <= 0xdeadbeef on CHN = 17 with Payload = 0x98bb.

Anschließend setzen Sie auf dem zweiten RasPi ein Datagramm mit einer Leistung von +13 dBm auf demselben Kanal ab (Listing 4). Die 2 Byte Nutzerdaten steuert dabei das Userprogramm als Zufallszahl hinzu. Klappt alles, quittiert nun der erste RasPi den Empfang der Daten (Listing 3, letzte Zeile).

Listing 4

 

$ trx tx -p 13 17 0xdeadbeef 0xcafebabe
Transmission 0xdeadbeef => 0xcafebabe on CHN = 17 with Payload = 0x98bb.

Die exemplarischen Werte in den zwei Listings sollten in jedem Fall funktionieren. Falls Sie bei eigenen Experimenten den Empfangspegel zu tief legen, zum Beispiel deutlich unter -85 dBm, erhalten Sie mit hoher Wahrscheinlichkeit eine Fehlermeldung (Listing 5). Sie weist darauf hin, dass der Empfänger ein Signal von mindestens der definierten Leistung “gesehen” hat, aber innerhalb des Timeouts keine korrekten Daten empfangen konnte.

Listing 5

 

$ trx rx -r -95 17 0xcafebabe
Trigger reception failed: 0.

Der zugrundeliegende Effekt nennt sich “Desense” und liegt teilweise am HF-technisch eher suboptimalen Gesamtaufbau. Nicht ganz unschuldig ist aber auch der Raspberry Pi, der im fraglichen Frequenzbereich offensichtlich strahlt wie der sprichwörtliche Weihnachtsbaum – allerdings nur bei einigen Tausendstel Nanowatt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben