ISM-Schnittstelle für Wireless M-Bus nutzen

Der RevPi Flat verfügt über einen 868 MHz Transceiver (ISM-Band) auf Basis des ICs “Texas Instruments CC1101”.

Wireless M-Bus

Die ISM-Schnittstelle ist in erster Linie für Wireless-M-Bus-Anwendungen gemäß dem Standard EN 13757-4:2005 gedacht. Hier kannst Du entweder direkt eine Stabantenne oder über ein entsprechendes Antennenkabel eine externe Antenne anschließen. Die Funkschnittstelle ist ähnlich der WLAN/Bluetooth-Schnittstelle über eine SMA-Buchse (hier allerdings “standard-polarity”) aus dem Gehäuse herausgeführt.

Der CC1101 ist über den SPI-Bus 0 nCS2 (GPIO6) mit dem Compute Module verbunden.

Beachte bitte, dass wir hier nur die Hardware-Schnittstelle zur Verfügung stellen. Um den wireless M-Bus zu realisieren, musst Du Deine eigene Software entwickeln.

Aktuell existiert keine vollständige M-Bus-Bibliothek für den CC1101. Es gibt jedoch eine Transceiver-Demo, die auf dem ISM-Frequenzband für den RevPi Flat arbeitet. Du kannst dieses Beispiel um eine M-Bus-Anwendungsschicht-Implementierung erweitern, um eine vollständige M-Bus-Bibliothek für den RevPi Flat zu erstellen.

Transceiver-Demo

Benötigte Hardware

  • 1 RevPi Flat als Sender
  • 1 RevPi Flat als Empfänger

Mit den folgenden Schritten bringst Du die CC1101 Transceiver-Demo auf dem RevPi Flat zum Laufen.

  • Installiere die pigpio Bibliothek:
    sudo apt-get install pigpio

Die Treiberbibliothek für Ti CC1101 auf dem RevPi Flat verwendet die pigpio Bibliothek anstelle der in der offiziellen Version verwendeten WiringPi, da letztere inzwischen veraltet ist.
Referenz: http://abyz.me.uk/rpi/pigpio/index.html

Nimm folgende Änderungen in der Datei “cc1100_raspi.h“ vor, die Du aus dem vorherigen Schritt erhalten hast, um die Pinbelegungen an den RevPi Flat anzupassen:
#define SS_PIN 6
#define GDO2 21

Der GPIO Pin 6 des Compute Module des RevPi Flat ist an den CE des CC1101 angeschlossen.
Der GPIO Pin 21 des Compute Module des RevPi Flat ist an GDO2 (Pin digitaler Ausgang) des CC1101 angeschlossen.

  • Lade die SPI-Bibliothek von WiringPi aus der folgenden Quelle herunter:
    http://wiringpi.com/reference/spi-library/
  • Erstelle eine neue SPI-Bibliothek für den RevPi Flat basierend auf der SPI-Bibliothek des WiringPi. Benenne die Dateien “wiringPiSPI.c” und “wiringPiSPI.h” in “FlatSPI.c” und “FlatSPI.h” um.
  • Ändere die Funktion “WiringPiSPISetupMode” in “FlatSPI.c“, um das Gerät “/dev/spidev0.2” zu öffnen, da das Modul CC1101 auf CE 2 auf dem RevPi Flat verfügbar ist.
  • Passe die API in den Demodateien an (cc1100_rasp.cpp, RX_Demo.cpp und TX_Demo.cpp), um die API von pigpio anstelle der WiringPi-API zu verwenden.
    Alle Funktionen sollten aus “FlatSPI.h” und “pigpio.h” importiert werden, um die Demo unabhängig von WiringPi zu machen.
  • Ersetze entsprechend die Referenzen der WiringPi-API.

WiringPi API
wiringPiSetup();
pinMode(GDO0, INPUT);
delayMicroseconds(100);
delay(1);

pigpio API
gpioInitialise();
gpioSetMode(GDO0, PI_INPUT);
gpioDelay(1000);

  • Ändere die SPI-Zugriffsfunktionen in “cc1100_raspi.cpp”. Der Kanalparameter sollte 2 sein.
  • Ändere entsprechend die Funktion “wiringPiSPISetup (0, 8000000)” in “FlatSPISetup (2, 8000000)) < 0)” und ”wiringPiSPIDataRW (0, tbuf, len)” in “FlatSPIDataRW (2, tbuf, len)”.
  • Lade ein spidev Modul auf den RevPi Flat mit „sudo modprobe spidev“. Es wird für den SPI-Zugriff im Benutzerbereich benötigt.
  • Kompiliere die Demo-Dateien auf dem RevPi Flat und führe die Demos aus:
    gcc -c -o FlatSPI.o FlatSPI.c
    g++ -lpigpio -lpthread TX_Demo.cpp cc1100_raspi.cpp FlatSPI.c -o TX_Demo FlatSPI.o

    sudo ./TX_Demo -v -a1 -r3 -i1000 -t5 -c1 -f868 -m100

    g++ -lpigpio -lpthread RX_Demo.cpp cc1100_raspi.cpp FlatSPI.c -o RX_Demo FlatSPI.o

    sudo ./RX_Demo -v -a3 -c1 -f868 -m100
  • Lade hier den vollständigen Quellcode für die CC1101 Transceiver-Demo für den RevPi Flat herunter:
    CC1101-Flat_Demo