RFM69

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
RFM69CW, Pinkompatibel zum RFM12

Das RFM69 von HopeRF ist ein universelles Funkmodul für die ISM-Frequenzbänder 315, 433, 868 und 915 MHz. Eine SPI-Schnitttstelle ermöglicht die einfache Integration in Mikrocontrollerprojekte.

Ausführungen

RFM69HC(W) RFM69H(W) RFM69C(W) RFM69(W)
Sendeleistung 20 dBm 20 dBm 13 dBm 13 dBm
Pins 16 16 14 16
Abmessungen 16 x 16 mm 19,7 x 16 mm 16 x 16 mm 19,7 x 16 mm
Status aktiv EOL aktiv EOL

Die H-Variante hat eine eingebaute Endstufe für eine etwas höhrere Ausgangsleistung. Das RFM69C hat 2 Pins weniger (es fehlt der Pin DIO4), und ist Pinkompatibel zum Vorgänger RFM12B. Es kann ohne Änderung am Layout oder der Schaltung ausgetauscht werden. Lediglich die Software muss angepasst werden. Viele Module haben noch die Endung "W": "Note: This module is the Chinese distribution version of the 'RFM69HW', hence missing the 'W' tag. This module is specified as being identical in functionality and performance as well as still complaint to ETSI and FCC requirements."

Ausstattung

  • Betriebsspannung 1,8 - 3,6 V
  • SPI-Schnittstelle
  • FSK- und OOK-Modulation (Frequency Shift Keying = Frequenzumtastung, On-Off-Keying = Amplitudentastung)
  • Eingebauter Manchester de- und -encoder
  • Frequenzbereiche 315, 433, 868, 915 MHz
  • Max. Datenrate 300 kbit/s
  • Ausgangsleistung +13 dBm (rund 20 mW)
  • Stromaufnahme 45 mA senden (13 dBm), 16 mA empfangen, 0,1 µA Standby
  • Integrierte Packetengine für Synchronwort, CRC, Scrambling und AES-Verschlüsselung
  • 66 Byte FIFO
  • Module RFM69W und RFM69CW basieren auf dem SX1231 von Semtech (Pin PA_BOOST fehlt, deswegen nur +13dB)
  • Module RFM69HW und RFM69HCW basieren auf dem SX1231H von Semtech

Vergleich zum RFM12B

RFM12B RFM69(C)W
Versorgungsspannung 2,2 - 3,8 V 1,8 - 3,6 V
Max. Datenrate 115,2 kbit/s 300 kbit/s
Sendeleistung 5 dBm 13 dBm
Empfindlichkeit -105 dBm -120 dBm
Stromaufnahme 22 mA/11 mA/0,3 µA 45 mA/16 mA/0,1 µA
FIFO Größe 16 Bit 66 Bytes
Syncmustererkennung Fest 0x2DD4 oder 0xD4 Frei bis zu 8 Bytes

Ansteuerung

Das Funkmodul kommuniziert über die SPI Schnittstelle mit dem µC. Im einfachsten Fall werden SCK, MISO, MOSI und NSS benötigt. Am besten führt man auch noch DIO0 zum Prozessor. Dieser Pin kann softwareseitig so konfiguriert werden, dass er anzeigt, wenn ein Paket vollständig gesendet oder ein neues Paket empfangen wurde. Ist das Modul in Minimalkonfiguration angeschlossen, müssen dazu die Statusregister RegIrqFlags1 (0x27) oder RegIrqFlags2 (0x28) ausgelesen werden.

Die SPI-Ansteuerung erfolgt im Modus CPOL=0, CPHA=0, wobei jeweils 16 Bits vom µC zum Modul geschickt werden: Das erste Bit teilt dem Modul mit, ob es sich um einen Lese- (Bitwert 0) oder Schreibvorgang (Bitwert 1) handelt, die restlichen sieben Bit des ersten Bytes geben die Registeradresse an. Mit den zweiten acht Bit wird im Schreibmodus der zu übertragende Befehl an das Modul übermittelt, im Lesemodus kann eine beliebige Bitfolge gesendet werden. Während das zweite Byte gesendet wird, empfängt der µC sowohl im Lese- als auch im Schreibmodus den Inhalt des angesprochenen Registers vor dem aktuellen Zugriff.

Werden nach dem Adressbyte mehrere Bytes empfangen oder gelesen, wird der Adresszeiger im RFM69 automatisch inkrementiert, so dass in einem einzigen Burst mehrere Register gelesen werden können. Zu beachten ist dabei, dass in Registern die mehr als 8 Bit breit sind (Frequenz, Bitrate, ...), das höchstwertige Byte zu erst geschrieben/gelesen wird (big endian). Wird das FIFO Register gelesen/geschrieben, wird der Adresszeiger nicht inkrementiert, so dass auf das FIFO in einem Burst zugegriffen werden kann.

Funktionsweise

Es gibt zwei grundsätzliche Funktionsmodi, die im Register "RegDataModule" gewählt werden:

Continuous Mode

Für die Datenübertragung vom/zum Modul werden die beiden Pins "DIO1/DCLK" und "DIO2/DATA" verwendet. An DCLK gibt das Modul den Takt vor mit dem die Datenbits an DATA geschrieben oder gelesen werden müssen.

Packet Mode

Die Packetengine des RFM69 kümmert sich um die Erzeugung und Auswertung der Preamble, des Synchronwortes, des Scramblings, der CRC und der Verschlüsselung. Im Sendebetrieb bearbeitet die eingebaute Packet Engine ein Nutzdatenpaket folgendermaßen:

Fixed Length Format

Senden
  • Einstellbare Anzahl (0-65535) von Preamblebytes (0xAA) an den Anfang setzen
  • Synchronwort hinzufügen (Länge zwischen 0-8 Bytes einstellbar, Synchronwort selbst ebenfalls einstellbar)
  • Nutzdaten hinzufügen (Länge wird in einem Register angegeben)
  • CRC hinzufügen (abschaltbar)
Empfangen
  • Länge des zu empfangenden Frames wird in einem Register angegeben

Variable Length Format

Senden
  • Länge des zu sendenen Frames in einem Register angeben. Die Packetengine sendet das Längenbyte automatisch vor den Nutzdaten
Empfangen
  • Packetengine erkennt automatisch die Packetlänge

Unlimited Length Packet Format

Senden
  • Beliebig lange Frames; Senden muss von der Software selber gestoppt werden
Empfangen
  • Empfangen muss von der Software selber gestoppt werden

Interrupts

Bezeichnung Beschreibung Verfügbar an (Packet mode) Verfügbar an (Cont. mode)
ModeReady Beispiel DIO5
RxReady Beispiel Beispiel
TxReady Beispiel DIO3, DIO0
PllLock Beispiel DIO3, DIO1, DIO0
Rssi Eingestellte Rssi-Schwelle überschritten; wird gelöscht wenn RX Modus verlassen wird DIO0, DIO3 DIO0, DIO3, DIO5
Timeout Beispiel DIO1
AutoMode Beispiel DIO2
SyncAddressMatch Syncadresse empfangen DIO0, DIO3 DIO0, DIO1
FifoFull Beispiel DIO3, DIO1
FifoNotEmpty DIO2, DIO1
FifoLevel DIO1
FifoOverrun
PacketSent DIO0
PayloadReady DIO0
CrcOk DIO0

Pinbelegung RFM69(H)CW

Anschlussbelegung RFM12B und RFM69

Pinnummer Name Richtung Fktn. im packet mode Fktn. im cont. mode Pin am RFM12
1 ANA Antennenanschluss ANT
2 3.3V Versorgungsspannung VDD
3 GND GND
4 DIO3 FifoFull PllLock
Rssi
SyncAdress
TXReady
nINT/VDI
5 MOSI SPI Daten Eingang SDI
6 SCK SPI Takt SCK
7 NSS Chip select nSEL
8 MISO SPI Daten Ausgang SDO
9 DIO0 PllLock (FS, TX)
CrcOK (RX)
PayloadReady (RX)
SyncAddress (RX)
Rssi (RX)
PacketSent (TX)
TxReady (TX)
ModeReady

PllLock
SyncAddress
Timeout
Rssi
TxReady || nIRQ

10 DIO2 FifoNotEmpty (Sleep, Stdby, FS, RX, TX)
AutoMode(Sleep, Stdby, FS, RX, TX)
Data (RX, TX)
Data FSK
DATA
nFFS
11 DIO1 FifoLevel (Sleep, Stdby, FS, RX, TX)
FifoFull (Sleep, Stdby, FS, RX, TX)
FifoNotEmpty (Sleep, Stdby, FS, RX, TX)
PllLock (FS, TX)
Timeout (RX)
PllLock

Dclk
RxReady
SyncAddress
TxReady

DCLK/CFIL/FFIT
12 DIO5 ModeReady
ClkOut (Stdby, FS, RX, TX)
Data (RX, TX)
CLK
13 RESET nRES
14 GND GND

Register

Adresse Registername Beschreibung Beispiel
0x00 RegFifo Zugriff auf das FIFO Register
0x01 RegOpMode Betriebsart (senden, empfangen, ...) 0x04 = Standby
0x02 RegDataModule Modulationsart &-shaping, Packetengine 0x00 = FSK, Packetengine aktiv
0x03 - 0x04 RegBitrate = FXOSC/Bitrate 0x1A0B = 6667 -> 4,8 kbit/s
0x05 - 0x06 RegFdev Frequenzabweichung (Hub * 2) 0x52 = 82 -> 5 kHz
0x07 - 0x09 RegFrf Mittenfrequenz; RegFrf = Frequenz_in_Hz / (FXOSC / 524288) 0xD91333 = 14226227 -> 868,300 MHz
0x11 RegPaLevel Sendeleistung und Ausgangspin, muss passend zum Modultyp gewaehlt werden: PA1+2 funktionieren nur bei den *H*-Varianten, dafuer funktioniert dort PA0 nicht. 0x12 = 18 -> 0 dBm (? stimmt das Beispiel?) ; 0x5F -> 13 dBM auf RFM69HCW ; 0x9F -> 13 dBm auf RFM69W
0x19 RegRxBw Filterbandbreite 0b01001 -> 200 kHz
0x25 RegDioMapping1 DIO Funktionen
0x27 RegIrqFlags1 Statusflags (ModeReady, RxReady, TxReady, PllLock, RSSI, Timeout, AutoMode, SyncAddressMatch) 0xD0 -> Empfänger bereit zum Datenempfang
0x28 RegIrqFlags2 Statusflags (FifoFull, FifoNotEmpty, FifoLevel, FifoOverrun, PacketSent, PayloadReady, CrcOk, LowBat) 0x06 -> Daten mit erfolgreichem CRC empfangen
0x2C - 0x2D RegPreamble Preamblelänge
0x2E RegSyncConfig Synchronworteinstellungen
0x2F - 0x36 RegSyncValue Synchronwort 0x2DD4
0x37 RegPacketConfig1 Einstellungen Packetengine
0x38 RegPayloadLength Datenpacketgröße

Software Implementierungen

Projekte

Intertechno, Brennenstuhl, FS20, und andere Funksteckdosen schalten

Hier gibt es einen Artikel wie mit einem Raspberry Pi und einem RFM69 Modul Funksteckdosen angesteuert werden: [Funksteckdosen am Raspberry Pi]


Conrad Energy Count 3000

Unter http://forum.jeelabs.net/node/3412679.html?page=1 wurde schon das Protokoll der Conrad Energy Count 3000 (baugleich mit Technoline Cost Control RC) Funk-Energiekostenmessgeräte beschrieben. Mit dem RFM69 lässt sich ein Frame des Messgerätes mit dem konfigurierbarem Synchronwortfinder bequem empfangen.

LaCrosse Temperatursensoren empfangen

Ein Raumklimalogger für den Raspberry PI mit einem RFM69CW Funkmodule

Wetterstation Davis Vantage Vue ISS

Datalogger für die Wetterstation mit Raspberry PI und RaspyRFM

Open Energy Monitor empfangen

Hardware mit RFM69

Themen zum RFM69 im Forum

Bezugsquellen

Links